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