Tag: 远程桌面

TeamViewer如此之快?

对不起长度,这是有必要的。 介绍 我正在为Windows Vista / 7在C#4.0中开发一个远程桌面软件(只是为了好玩)。 我已经经历了一些基本的障碍:我有一个强大的UDP消息传递系统,相对干净的程序devise,我有一个镜像驱动程序(DemoForge的免费DFMirage镜像驱动程序)启动并运行,我已经实现了所有NAT穿越除了对称NAT之外的NATtypes(存在于企业防火墙情况下)。 关于屏幕传输/共享,感谢镜像驱动程序,我自动通知更改的屏幕区域,我可以简单地将镜像驱动程序的不断变化的屏幕位图编组到我自己的位图。 然后我把这个屏幕区域压缩成PNG格式,然后把它从服务器发送到我的客户端。 事情看起来不错,但速度不够快。 它和VNC一样慢(顺便说一句,我没有使用VNC协议,只是一个自定义的业余协议)。 从最慢的远程桌面软件到最快的列表,通常从类似VNC的实现开始,然后爬上Microsoft Windows远程桌面…然后… TeamViewer。 不太确定CrossLoop,LogMeIn – 我没有使用它们,但TeamViewer 非常快速。 这是相当活的。 我在命令提示符下运行了一个tree命令,并且延迟了20毫秒。 我可以在网上浏览网页,比我的笔记本电脑慢几毫秒。 在Visual Studio中垂直滚动代码有50 ms的延迟时间。 考虑一下TeamViewer的屏幕传输解决scheme必须具备的强大function。 VNC使用基于轮询的钩子检测屏幕变化,并在最差的情况下使用powershell屏幕捕获/比较。 在最好的情况下,他们使用像DFMirage这样的镜像驱动程序。 我在这个级别。 他们使用一种叫做RFB协议的东西。 微软Windows远程桌面显然比VNC高一步。 我从StackOverflow的某个地方听说,Windows远程桌面不会发送屏幕位图,而是实际的绘图命令。 这是相当出色的,因为它可以发送简单的文本(在这个坐标上绘制这个矩形,并用这个渐变来着色)! 远程桌面确实非常快 – 这是在家工作的标准方式。 它使用一种称为RDP协议的东西。 现在,TeamViewer对我来说是一个完整的秘密。 显然,他们发布了版本2的源代码(截至2012年2月,TeamViewer是第7版)。 人们已经读过它,并说版本2是无用的 – 这只是对自动穿越NAT的VNC的一些改进。 但版本7 …现在是很快的。 我的意思是,它实际上比Windows远程桌面更快。 我使用TeamViewer对DirectX 3D游戏进行了stream式处理(每秒1帧,但Windows远程桌面甚至不允许DirectX运行)。 顺便说一下,TeamViewer在没有镜像驱动程序的情况下执行所有操作。 有一个选项来安装一个,它只是快一点。 问题 我的问题是,TeamViewer如此之快? 这一定是不可能的。 如果你在24位深度上得到1920×1080的分辨率(16位深度会显着难看),那么仍然是6220800字节。 即使使用libjpeg-turbo(大公司使用的最快速的JPG压缩库之一),将其压缩到30KB(让我们非常慷慨),也需要一段时间才能通过TeamViewer的服务器(TeamViewer绕过企业对称NAT,只需通过代理他们的服务器)。 而libjpeg-turbo压缩需要时间来压缩。 高质量的JPG压缩需要175毫秒的完整1920 […]