C#更好的压缩远程桌面广播应用程序

我正在创建TCP远程桌面广播应用程序。 (服务器应用程序会像Team Viewer或VNC那样)

 1. run on a PC listening for multiple clients on one Thread 2. and on another thread it will record the desktop every second 3. and it will broadcast the desktop for each connected client. 

我需要使这个应用程序可以在12KBps上传和50KBps下载DSL连接(客户端和服务器)的连接上运行。

所以..我必须减少每秒发送的数据/图像的大小。

我尝试通过以下方式减少。

 I. first i send a Bitmap frame of the desktop and each other time i send only the difference of the previously sent frame. II. the second way i tried was, each time i send a JPEG frame. 

我没有成功发送JPEG帧,然后每次发送先前发送的JPEG帧的差异。

我尝试使用lzma压缩(7zip SDK)来传输Bitmap的差异。

但我没有成功将数据减少到12KBps。 我能达到的最大值是50KBps左右。

有人可以建议我这样做的算法/程序吗?

您想要做的是做图像压缩格式,但是以自定义方式(仅发送更改,而不是一遍又一遍地发送整个图像)。 以下是我将要做的两个阶段(阶段1:完成它,certificate它有效,第2阶段:优化)

概念validation阶段

1)以位图格式捕获屏幕图像

2)将图像分成连续字节的块。 您需要四处寻找最佳块大小; 它会因上行链路/下行链路速度而异。

3)为每个块获取一个简短的哈希(crc32,也许是md5,也可以用这个实验)

4)压缩(不要忘记这样做!)并传输每个更改的块(如果更改了哈希,则块已更改并需要传输)。 在接收端将图像拼接在一起以显示图像。

5)使用UDP数据包进行数据传输。

优化阶段

您可以采取以下措施来优化速度:

1)收集统计数据和硬编码传输速度与帧大小和哈希方法,以获得最佳传输速度

2)为#1制定自我调整机制

3)图像在方形区域中压缩得更好,而不是连续的字节块,正如我在上面第一阶段的#2中所解释的那样。 更改算法,以便获得可视方形区域而不是连续的线条块。 这种方形方法是图像和video压缩人员如何做到这一点。

4)使用压缩算法。 这将为您提供许多变量(CPU负载与互联网访问速度对比压缩算法选择与屏幕更新频率)

这基本上是(大致)压缩video流如何工作的总结(如果你考虑它,你可以看到你的任务的相似性),所以这不是一个未经证实的概念。

HTH

编辑:您可以尝试的另一件事:捕获屏幕的位图后,减少其中的颜色数量。 例如,如果从32位颜色深度变为16位,则可以节省一半的图像尺寸。