作为客户端支持工具的一部分,我想提供一些功能来请求查看/远程控制桌面 session 。有很多方法可以获取屏幕截图然后进行流式传输,但我特别想知道为什么 RDP(远程桌面/终端服务与 VNC 体验如此不同。我正在使用 RDP 与. VNC 只是因为它们似乎使用截然不同的方法将屏幕流式传输到客户端。
如果我不得不猜测,RDP 似乎传输位图图形块(例如 100x100px)以构建完整图片(这可能很慢)但似乎将正常绘制的形状/填充或字体绘制传输到客户端非常快. VNC 似乎对屏幕进行了巨大的快照,比较以前的图像并将更改传输到客户端。
我觉得 RDP 是一种比其他任何协议(protocol)都要高质量和流畅的协议(protocol),那么它使用什么技术来实现这一点?
编辑 - 只是为了澄清,我专门将这些图形技术作为流协议(protocol)编程方法询问 - 而不是用于解决此业务需求的现有产品/技术。
最佳答案
正如您所发现的,它们在传输变化的方式上都非常不同。
MS 的 RDP 协议(protocol)是 ITU standard (T.128) 的扩展,可以在线购买。
RDP 实现了许多相互补充的带宽节省技术,使其在低带宽上非常有效。
另一方面,VNC 具有非常基本的压缩技术:它将发送已更改的位图块,并将使用基本类型的压缩,从 RLE 到 jpeg 来有效地传输这些块。
不幸的是,它在低带宽上仍然非常浪费。
VNC 基本上不了解用于构建屏幕的底层图形原语。这使它在任何机器上都可以轻松使用,因为它只监视屏幕位图的更改。
另一方面,RDP 更深入地连接到 Windows API,并且能够根据在客户端上生成相同更新所需的最少信息量来优化其流。
如果您想集成远程桌面功能,您有几个选择:
如果您想更深入地了解这一点,可以使用 linux rdesktop 客户端的源代码,该客户端确实通过 RDP 连接到 Windows 机器。
FogCreek 的 Copilot 实际上使用了一个,你可以得到它的 source,因为它是建立在 TightVNC
还有一些关于 CodeProject on RDP 和 VNC 的项目。
关于streaming - RDP/终端服务与VNC流技术的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/540188/