gpt4 book ai didi

performance - TeamViewer 怎么这么快?

转载 作者:行者123 更新时间:2023-12-03 04:20:38 25 4
gpt4 key购买 nike

对不起,长度,有点必要。

简介

我正在用 C# 4.0 为 Windows Vista/7 开发远程桌面软件(只是为了好玩)。我已经克服了基本障碍:我有一个强大的 UDP 消息传递系统,相对干净的程序设计,我有一个镜像驱动程序(来自 DemoForge 的免费 DFMirage 镜像驱动程序)启动并运行,我已经为所有人实现了 NAT 遍历除对称 NAT 之外的 NAT 类型(存在于公司防火墙情况中)。

关于屏幕传输/共享,多亏了镜像驱动程序,我会自动收到更改的屏幕区域通知,我可以简单地将镜像驱动程序不断变化的屏幕位图编码为我自己的位图。然后我将屏幕区域压缩为 PNG 并将其从服务器发送到我的客户端。事情看起来不错,但速度还不够快。它和 VNC 一样慢(顺便说一句,我不使用 VNC 协议(protocol),只是一个自定义的业余协议(protocol))。

从最慢的远程桌面软件到最快的,列表通常从所有类似 VNC 的实现开始,然后爬到 Microsoft Windows 远程桌面......然后...... TeamViewer。不太确定 CrossLoop、LogMeIn - 我没有使用过它们,但 TeamViewer 非常快。简直就是现场直播。我跑了一个 tree命令提示符上的命令,它以 20 毫秒的延迟更新。我可以比在笔记本电脑上浏览网页慢几毫秒。在 Visual Studio 中垂直滚动代码有 50 毫秒的滞后时间。想一想 TeamViewer 的屏幕传输解决方案必须有多强大才能完成这一切。

VNC 使用基于轮询的钩子(Hook)来检测屏幕变化和暴力屏幕捕获/比较最糟糕的情况。他们最好使用像 DFMirage 这样的镜像驱动程序。我就是这个水平。他们使用一种叫做 RFB 协议(protocol)的东西。

Microsoft Windows 远程桌面显然比 VNC 高出一步。我从 StackOverflow 的某个地方听说 Windows 远程桌面不发送屏幕位图,而是实际的绘图命令。这非常棒,因为它可以只发送简单的文本(在这个坐标上绘制这个矩形并用这个渐变着色)!远程桌面确实非常快 - 这是在家工作的标准方式。它使用一种叫做 RDP 协议(protocol)的东西。

现在 TeamViewer 对我来说完全是个谜。显然,他们发布了第 2 版的源代码(截至 2012 年 2 月,TeamViewer 是第 7 版)。人们读过它并说第 2 版没用——它只是对 VNC 的一些改进,具有自动 NAT 遍历。

但是第 7 版……现在快得离谱了。我的意思是,它实际上比 Windows 远程桌面更快。我已经使用 TeamViewer 流式传输 DirectX 3D 游戏(以 1 fps,但 Windows 远程桌面甚至不允许运行 DirectX)。

顺便说一句,TeamViewer 无需镜像驱动程序即可完成所有这些工作。有一个选项可以安装,而且速度会快一点。

问题

我的问题是,TeamViewer 怎么这么快? 这一定是不可能的。如果你有 1920 x 1080 的分辨率,即使是 24 位深度(16 位深度会明显丑陋),那仍然是 6,220,800 字节的原始数据。即使使用 libjpeg-turbo(大公司使用的最快的 JPG 压缩库之一),将其压缩到 30KB(让我们非常慷慨),也需要时间通过 TeamViewer 的服务器进行路由(TeamViewer 通过简单地代理流量绕过公司对称 NAT他们的服务器)。而 libjpeg-turbo 压缩需要时间来压缩。对我来说,高质量的 JPG 压缩需要 175 毫秒才能获得 1920 x 1080 的完整屏幕截图。如果主机的计算机运行 Atom 处理器,这个数字就会上升。我只是不明白 TeamViewer 是如何优化他们的屏幕传输的。同样,小尺寸图像可能会被高度压缩,但至少需要几十毫秒来压缩。大尺寸图片压缩不费时间,但打通需要很长时间。不知何故,TeamViewer 完成了整个过程,每秒获得大约 20-25 帧。我使用了网络监视器,TeamViewer 在 500 Kbps 和 1 Mbps 的速度下仍然没有延迟(VNC 软件在该传输速率下延迟几秒钟)。在我的 tree命令提示符测试中,TeamViewer 以 1 Mbps 的速率接收入站数据,并且仍以 5-6 fps 的速度运行。 VNC 和远程桌面不会这样做。那么,如何?

答案会有些复杂和错综复杂,所以如果您只是想说这是因为他们使用 UDP 而不是 TCP,请不要发布您的 0.02 美元(您是否相信他们实际上确实使用 TCP 也同样成功)。

我希望 StackOverflow 上的某个地方有一个 TeamViewer 开发人员。

潜在答案

一旦人们回复,将更新此内容。

  • 我的想法是,首先,TeamViewer 具有非常好的网络控制。例如,他们将大数据包拆分为刚好低于 MTU 的大小,从不浪费一次旅行。他们可能有各种花哨的钩子(Hook)来检测屏幕变化以及极快的 XOR 图像比较。
  • 最佳答案

    这里最根本的可能是你不想传输静态图像而只想对图像进行更改,这本质上类似于 视频流 .

    我最好的猜测是一些非常有效(并且高度特化和优化)的运动补偿算法,因为通用桌面使用中的大部分实际变化是元素的线性移动(滚动文本、移动窗口等,与元素的转换相对)。

    1 FPS 的 DirectX 3D 性能似乎在一定程度上证实了我的猜测。

    关于performance - TeamViewer 怎么这么快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9498877/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com