RDP/Terminal Services和VNC流技术的区别

7
作为客户支持工具的一部分,我想提供一些功能来请求查看/远程控制桌面会话。有许多方法可以获得屏幕截图并流式传输,但我特别想知道为什么RDP(远程桌面/终端服务与VNC体验如此不同)。我之所以使用RDP vs. VNC,只是因为它们似乎使用截然不同的方法将屏幕流式传输到客户端。
如果我必须猜测,RDP似乎传输位图图形块(例如100x100px)以构建完整的图片(这可能非常慢),但似乎极快地将普通绘制的形状/填充或字体绘制传输到客户端。 VNC似乎拍摄屏幕的巨大快照,比较先前的图像并将更改流式传输到客户端。
我认为RDP是一种比其他任何协议更高质量和平滑的协议,那么它使用什么技术来实现这一点呢?
编辑-只是为了澄清,我在特定地询问这些图形技术作为流媒体协议编程方法-而不是要解决此业务需求的现有产品/技术。
2个回答

10
正如您所发现的那样,它们在流式更改的方式上有很大不同。来自MS的RDP协议是ITU标准(T.128)的扩展,可在线购买。
RDP实现了许多节省带宽的技术,相互补充,并使其在低带宽下非常高效。
另一方面,VNC具有非常基本的压缩技术:它将发送已更改的位图块,并使用从RLE到jpeg的基本压缩类型以有效地传输这些块。不幸的是,在低带宽下仍然相当浪费。
VNC基本上没有关于用于构建屏幕的底层图形原语的知识。这使得它易于在任何机器上使用,因为它只监视屏幕位图的更改。另一方面,RDP更深入地钩入Windows API,并能够根据生成客户端上相同更新所需的最小信息来优化其流。
如果您想集成远程桌面功能,则有几个选择:
  • 对于RDP,您可以使用用于Web远程功能的ActiveX。您可能希望查看一个包装器将其集成到自己的软件中。
    如果您想深入了解此内容,则可获取Linux rdesktop客户端的源代码,该客户端可通过RDP连接到Windows机器。

  • 对于VNC,有许多开源实现。
    FogCreek的Copilot实际上使用了其中一个,并且您可以获取其源代码,因为它是基于TightVNC构建的。

CodeProject on RDPVNC上还有许多相关项目。


4

如Renaud所说,VNC只是按块发送位图更改,没有了解内容。而RDP则更加智能。

您可以从以下两个规范中了解RDP的确切操作:

协议级别: http://msdn.microsoft.com/en-us/library/cc240445(PROT.10).aspx

图形级别: http://msdn.microsoft.com/en-us/library/cc241537(PROT.10).aspx

我认为RDP最大的优势在于:

缓存:客户端可以存储大量先前看到的块,并且服务器可以告诉客户端如何使用它们。此外,这些是持久性的,因此当客户端连接到已经访问过的服务器时,它可以广告其磁盘上有哪些块。当窗口被移动时非常有用。此外,Windows 的许多部分,如标题栏都是相同的。
线/块绘制。正如您所猜测的那样,RDP具有线、多边形和矩形绘制操作。在绘制窗口时,这些操作非常有用。
字体绘制。RDP有一种方法来发送字体的字形并告诉客户端如何呈现它们。
光标渲染。光标图标被发送为字形。VNC只是使用一个点。
这些是我想到的重要内容。请查看协议规范书第2.2.7节功能集的完整绘图功能列表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接