Jitter Buffer 通过监测什么变量去看抖动行为呢?刚才我们在网络拥塞控制那张讲的 Jitter 的计算,需要发送端时间戳和接收端时间戳去计算。而这里它只是通过相邻两个包到达时间的间隔,最终这个 IAT(Inter Arrival Time)的概念去表征这个时间间隔,他表示端到端前后两个数据包到达的时间间隔,这个 IAT 时间间隔归一化为包个数,对一定时间区间内的 IAT 数据做一个概率分布,它是满足正态分布的趋势,我们取它是满足 95% 的概率分布作为置信区间,选取其中的最大 IAT 来估算当前网络的大延时。
刚才讲的网络延时估计与跟踪,相当于它在对网络包进行合理缓存,保证数据的完整性。那么怎么样把已经收到的数据包延时压下来,或者让数据包水位不够的时候,把这个时间轴拉长?其实这里面也是一个 Waveform Similarty 的算法,我们叫 Wsola,它兼顾 PCM 数据在幅度上,频率上、以及相位上的延续性算法,效果还是不错的。这个算法是一种基于拓展压缩语音长度,是一个变长不变调的技术,它是基于 Pitch 基音周期进行相似波形叠加的一个算法。
音频编解码器的抗丢包能力
Codec 编解码器专题一般会去讲解码器的历史或音质对比,我们今天从网络抗性的角度重点是看它的带内抗丢包能力,或者 Codec 层面能够给抗丢包带来一些什么收益。
Codec 层面不能指望完全无损的把二进制包恢复,那它的优势就哪里?
它的优势在于可以节省包头,不管是以前的私有协议还是现在的 RTP 协议,用于传输的 IP,UDP 协议字段是节省不了的,信道编码的方法比如带外 FEC,或者重传 ARQ 都是对完整数据包进行恢复或者请求重传,这里面的数据包头占用了许多流量。而所以在 Codec 中的带内 FEC 里面的实现算法里面,一般来说它可以携带 t-1 帧的数据,而这个 t-1 帧的数据包可以用一个低码率的参数进行编码,在接收端收到这个携带 t-1 帧的数据包,则可以解码重建出来 t-1 这一帧质量稍逊一点的数据。
讲到这里就是大家也有个疑问,比如说 silk 也是 t-1,然后它的抗丢包特性大概 15%,而最最新版本的 Opus1.3.1 大家可以听一下不同丢包率场景下他的表现,Opus 在内它为什么最后 30% 呢?
这个图就是刚才说的全家桶算法里面使用的抗丢包算法基本都包括在里面了,我们所使用的一些方法在这个合集里面只是占其中一小部分。PLC 就是 Packet Loss Concealment,丢包恢复算法它的内涵还是比较丰富的。画一个树状图,把整个合集集中起来发现它有两大阵营,一个是基于发端的,一个是基于收端的。基于发端的有被动式和主动式,重传类的就是主动式,前向纠错的就是被动式。
至于重传为什么给它送到发端?以我的理解,在接收端不管是 Ack, Go-N Ack 或者是 NACK 方式,都是接收端的反馈,真正要发包还是在发送端的,所以还是基于发端。
基于发端的另外一个大类就是 FEC。前面讲的 FEC 工程实践和原理就是所里德—罗门算法,这种算法还有很多类似的,比如喷泉码,比如 RLNC。这个 RLNC 有个比较好的特性,可以支持重建码,比如在网络比较好的情况下,我现在收听上百人千人,针对不同的下行用户,再根据下行信道的参数进行重新编码,不至于像用喷泉、RS 或异或只能保持原状。另外,其中信源相关的 FEC 就是上一页讲的 Codec 层面的带内 FEC。
基于接收端有很多方法,比如插入式方法,比如在接收端,那么插入静音、白噪音,或者干脆把前面一个包复制一下,就不管它的相关性和衔接,这样效果不太好。而且它的补偿效果也就是 20 毫秒顶天了,在衔接不好的情况下还容易产生金属音。
另外一大类就是内插式的方法,比如波形相似法,还有基音周期复制法,还有就是波形伸缩法。到这块,所有的方法就能很好地解决幅度连续、频率连续、相位连续的特征,所以它的效果总体来说还是不错的。
另外基于接收端的,它有一类再生补偿方法。比如时域数据传输本身挺大的,如果在变换域的话,它可能只需要一些变换域的参数,在接收端进行恢复。
再接下来还有一些比较偏门的技术,比如基于传统的语音增强,比如自适应滤波器的一些方法,进行语音重建的方法,这里不说了。前面做选择的方案也仅仅是使用比较多的方法,通过有机融合把它更好的控制起来,最终达到好的效果。
现在回答一下,刚才上一页为什么 Silk15%、Opus 达到 30%。这是一系列基于接收端的技术,不断升级、不断演进、不断优化的效果,T-1 只是一个工程化的思想,做 T-2 可不可以,如果不再考虑算法因素 T-3 行不行?
于是就引出来实验室目前正在重点发力的基于机器学习的方法来做 PLC,用上下文分析的方法,这就是目前的一个效果,大家可以看到这块有四个语音的时域图。左边这个图丢失了 100 毫秒数据,100 毫秒看似非常少,它是个什么概念呢,按照正常语速大概一个字是 150 毫秒,100 毫秒基本上大半个字丢了。我们通过机器学习 PLC 的种方法把它给恢复出来,而且效果还不错。
腾讯会议为什么能取得疫情期间高速增长?
最后,疫情期间腾讯会议为什么能在短短两个多月时间,外部用户可以从 0 做到 1000 万?这是有一定的有必然性的,首先“腾讯会议”产品是一个全平台的应用,PC、手机、传统电话、Pad、网页、小程序还有专业视频设备都可以接入的,这种互联互通的能力本身就给广大用户带来了价值。今天官微公布,腾讯会议 API 向全网开放了,国内外开发者都可以接入腾讯会议的 API,去把这个市场做大。