【发布时间】:2010-08-20 00:41:09
【问题描述】:
我正在尝试做一个“远程桌面查看器”。 为此,我需要发送用户的桌面 - 并且有很多关于套接字的信息......(特别是如果分辨率很高并且信息可以接近 5.3MB (1680X1050))
所以我开始使用 GZIP 流进行压缩,5.3MB 变成了 500KB,然后我添加了自己的压缩算法(我认为它称为 RLE) - 采用接近像素并以 1) 具有 256 >> 3 = 的格式写入32 种颜色(分别代表红色、蓝色、绿色)并写下一行中有多少像素具有相同的颜色。 + GZIP。
这使压缩率平均为 60~65KB - 最高 200KB,如果屏幕全白,它也可以低于 5000。
现在 - 我认为(但尚未实现)传递每帧之间的差异 - 对于我写的每一行,差异(像素之间)从哪里开始以及差异有多长。 好吧,它可以提供帮助——也许我平均每帧可以获得 30KB。但对于套接字来说,它很多。
有没有人成功地解决了这个问题? (当然还有……)
【问题讨论】:
-
您是否考虑过使用 RDP 或 VNC?这两种协议都完全执行您正在尝试执行的操作。
-
人们提出了比 gzip 或简单的行程编码更复杂、更复杂的压缩算法。这是一个独立的研究课题。远程查看特别有趣,因为您可以通过仅编码连续屏幕之间的差异而不是整个屏幕来节省带宽。大多数当前的软件已经这样做了,尽管坦率地说远程桌面和 VNC 离当前研究的高度还很远。
标签: c# sockets compression