视频通话的 200 毫秒里发生了什么

有人在纽约说了句好笑的话,你在北京笑了出来,看起来就像同一瞬间发生的事。这背后没有任何一点是简单的。一对一视频通话底层的整套机制,是过去十五年里最不可思议的工程成就之一,而它运转得如此之好,以至于几乎从没有人好奇过它是怎么做到的。

预算:五分之一秒

对话有一条硬性期限。从开口到被听到,如果间隔超过 200–300 毫秒,人们就开始撞车,如两声道歉叠在一起,然后是 “不好意思,你先说”,接着是双方都在等待的一段沉默。实时音视频中的每一个设计决策,都源自这一条约束:在不受任何人控制的网络上,把一个面孔和一道声音送到地球另一端,速度要快过一眨眼的工夫。

流媒体播放电影则完全是另一门学问。播放器会预先缓冲三十秒,谁也伤不着。而一场实时对话几乎什么都不能缓冲,这意味着每一帧的保质期都以毫秒计,没有第二次机会。

一场典型的跨洲通话,把它的预算花在了这些地方:

阶段典型耗时
采集与编码20–40 毫秒
网络传输50–150 毫秒
抖动缓冲20–60 毫秒
解码与渲染10–20 毫秒

注意这剩下多少余量。光网络传输一项,赶上糟糕的网络状况就可能吃掉四分之三的预算,这也正是为什么其余的大量工程工作,都是在别处一分一毫地把毫秒抠回来。

没人注意到的标准

浏览器能做这一切,靠的是由 W3C 和 IETF 推动制定的 WebRTC 标准,它给每个浏览器内置了一套采集、加密和传输实时媒体的引擎。问问任何在 2010 年做过视频产品的人关于插件和下载提示的时代,他们会跟你讲上很久。

最精妙的部分发生在任何一帧画面传输之前。两台坐在普通家用路由器后面的笔记本电脑,根本无法找到对方,路由器存在的意义恰恰就是阻止这种互联。于是这一标准替它们做了一场 “引荐”。每台设备先弄清楚自己在外部看来公网地址是什么样的,尝试通过网络地址转换(NAT)打出一个可用的 “洞”,同时保留一台中继服务器作为后备,应对大约五分之一直接路径死活不通的电话。所有这些协商,都在 “正在呼叫……” 和一张脸出现之间的两秒内完成。

糟糕网络下的从容

然后通话开始,网络也开始不老实,因为网络从来都不老实。数据包姗姗来迟,有些乱序到达,有些干脆永远到不了。

编解码器处理这些问题的办法,是 “故意变差” 而不是 “卡死冻结”。分辨率会柔软地降下来一两秒。丢失的帧会从相邻帧中被推测补出,通常足以以假乱真。音频走在自己专属的 “受保护车道” 里 —— 这条规则来自对真实用户的观察:人们对模糊的画面可以无限期容忍,但声音一卡,九十秒内就会挂断电话。与此同时,拥塞控制在每秒数十次地探测连接并做调整,就像司机在冰面上轻点油门一样。

把这些加在一起:一场通话可以穿越一片大洋、两个互联网服务提供商、一栋十九个人共用一台路由器的公寓楼,还能在通话中途从 Wi-Fi 无缝切换回蜂窝网络。大多数时候,没人注意到这其中的任何一件事正在发生。

无法关闭的加密

这里有一个值得停下来想想的决定:WebRTC 不允许你以明文方式发送媒体。没有明文模式,没有配置开关,没有任何一个匆忙上线的实现可以悄悄跳过的东西。视频开始流动之前,DTLS 完成密钥交换,随后 SRTP 为沿途的每一个数据包提供保护。

这种严格在这里比在大多数地方都更有道理。载荷是某个人的实时面孔和声音:它不是一份泄露了还能重发的文件,而是传输过程中正在发生的一个瞬间。为此付出的代价只是几毫秒的建立时间,被埋在 “正在连接” 阶段里,而没有任何用户会去给那个阶段计时。

编解码器的军备竞赛

压缩占掉了工程预算的另一半。音频运行在 Opus 上,它持续调整码率,处理人声和吉他声都无需切换模式;正是它让你的连接掉到几十千比特每秒时,通话听起来依然正常。视频则是一场旷日持久的争论 :VP8 为了兼容性,H.264 和 VP9 为了效率,AV1 如今也加入了战局,在同等感知质量下压缩率大约提升 30%。

这些百分比决定的,是比画质更重大的东西。每一点效率提升,都会降低一场对话保持可观看所需的带宽下限,而这个下限决定了视频在乡村线路上能否工作、在高峰期拥挤的蜂窝网络里能否运转。一场编解码器之争,本质上是在争论:谁有资格拥有这场对话。

为两个人而生

视频通话的 200 毫秒里发生了什么

一对一这种场景,悄悄享受到了这套工程最好的待遇。群组通话需要服务器来混流和路由,而每一跳都要付出几毫秒的代价。一对一视频聊天则可以常常走点对点(peer-to-peer)路线:两张脸之间最短的路径,端到端加密,整个延迟预算全部花在同一段关系上。围绕一对一对话构建的平台,默认就坐落在这种架构之上。这是个令人愉快的巧合:要求最严苛的实时场景,恰恰是最直接的路径。

所以,当另一个大陆上的面孔对你的笑话发出笑声、毫无可感知的延迟时,底下是一条 200 毫秒的流水线,正做着巨大的工作,只为了让一切感觉像什么都没发生过一样。

本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/yinshipin/71952.html

(0)

相关推荐