2012-02-14 22 views
1

我需要在'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等平台上,由于分辨率非常高,因此位图大小非常大。

有什么更快更好的方法来做桌面流?

+0

我猜是功课吗? – IanNorton 2012-02-14 07:36:53

+3

为什么不使用开源的VNC? – 2012-02-14 07:37:36

+0

没有作业,即时编码作为跳跃 – 2012-02-14 12:52:45

回答

2

有些东西可以用电脑屏幕来考虑,主要是屏幕上只有很小一部分可以在任何时候改变。

你可以看看这三种方法:

  1. 打破屏幕成矩形,每个屏幕更新只传输那些与thier位置而变化。
  2. 使用压缩图像格式,如png或jpeg,或使用zlib而不是RLE压缩位图。
  3. 捕捉图像时减少图像的颜色深度,将图像缩小为4位或8位颜色将大大减少您发送的数据量以及必须比较更改的数据量。

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

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

+0

据我所知,1)和2)不能在同一时间完成,但我会测试他们每个人的表现,但1)我不知道如何做到这一点,这是相同的分裂文件像4部分例如? – 2012-02-14 07:56:43

+0

将屏幕分成多个部分,并将其分别编码为单独的png/jpeg – IanNorton 2012-02-14 19:47:21