【问题标题】:Streaming Desktop over Diffrent Platforms for Speed在不同平台上流式传输桌面以提高速度
【发布时间】:2012-03-05 14:32:12
【问题描述】:

我需要用 C 语言创建一个小型远程桌面软件,它可以在各种平台(linux、freebsd、windows...)上编译我一直在研究各种图像格式,但仍然无法实现想出一个使用它们的好主意,现在,我就是这样做的:

1. Convert All Formats into Windows Bitmap (XImage,...etc)
2. Do a byte-to-byte comparion and replace the identical bytes with zeros
3. Preform a RLE (Run Length Encoding) on the Resulted data.
4. Transmit the Packet to the Server
5. Inverse the Operation on the Server by Reconstructing the Image through the previous image (Comparing Last Image with the New one Discarding Zero Bytes after RLE)

但这往往会很慢,因为位图图像格式已经包含非常大的文件,因为它不包含压缩,并且在 Mac OS X 等平台上,由于非常高的分辨率,位图大小非常大。

有没有更快更好的方式进行桌面流式传输?

【问题讨论】:

  • 为什么不使用开源的VNC?
  • 没有作业,我编码为 hoppy

标签: c bitmap cross-platform screen-capture


【解决方案1】:

对于计算机屏幕,您可以考虑一些事情,主要是屏幕的一小部分可以随时更改。

你可以看看这三种方法:

  1. 将屏幕分成矩形,每次屏幕更新时只传输那些随着位置发生变化的部分。
  2. 使用压缩图像格式,如 png 或 jpeg,或使用 zlib 而不是 RLE 压缩位图。
  3. 在捕获图像时降低图像的颜色深度,将图像减少到 4 位或 8 位颜色将大大减少您发送的数据量以及您必须比较更改的数据量。

根据您希望如何编写服务器,您可以从操作系统获取有关屏幕的哪些位已更改的提示,以减少您必须执行的处理量。

最后,(如果这不是家庭作业)然后看看像 VNC 这样已经做得很好的东西,甚至还有 java 或 c# 版本。

【讨论】:

  • 据我所知,1) 和 2) 不能同时完成,但我会测试它们每个的性能,但对于 1) 我不知道如何实际上,这与将文件拆分为 4 个部分相同吗?
  • 将屏幕分成多个部分,并将每个部分编码为单独的 png/jpeg
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
  • 1970-01-01
  • 2019-10-25
  • 1970-01-01
  • 2019-04-28
  • 2012-11-19
  • 1970-01-01
相关资源
最近更新 更多