本文主要总结了李超老师写的关于WebRTC原理的书。有兴趣的同学也可以直接看书,书中讲的比较详细。实时音视频交流的目标是针对交互性强的实时交流场景,比如上课、视频会议等。比起线上交流,我们都更喜欢线下交流。这主要是因为线下交流会更加“真实”。那么网络传播中缺乏“真实感”的地方在哪里呢?主要有两个方面:实时性损失。音视频通过网络传输后,难免会有延迟。这种延迟对于一些交互性很强的通信场景来说是难以忍受的。业务数据丢失。这主要是因为设备等因素的限制,无法完全还原直播的所有真实场景,包括现场的气氛。在此基础上,可以得出实时音视频交流的本质是尽可能接近或达到面对面交流的效果。实时音视频交流的指标在实时音视频交流的场景中,有两个指标可以很好的评价交流的“真实性”。一是通信延迟,二是音视频服务质量。通信延迟指标Delay200ms对人来说质量非常高,像在房间里聊天在300ms以内,大多数人满意大多数人不满意这个表是实时通信的延迟指标。可以看出,在需要交互的场景下,大于500ms的延迟对交互影响很大。造成延迟的因素有很多,比如音视频的采集、编码、传输、渲染等,这些过程都会造成延迟。其中,网络传输的延迟是最难评估和控制的,因为影响它的因素很多,而且它的变化是动态的。音视频业务质量指标音视频业务质量分为音频和视频,但音频数据量较小,对网络影响不大,主要影响网络的视频业务质量。视频业务质量与视频分辨率、帧率、码率密切相关。在实时音视频通信场景中,头像视频的默认分辨率一般为640*480或640*360,帧率至少为15帧/秒。相同分辨率下,码率越高,视频越清晰。但是码率也会受到限制。一般超过一定阈值(MOS=5)后,再大的码率也是没有意义的。这里简单解释一下,MOS值是平均意见值,有主观和客观之分,用来评价音视频服务的质量。一般来说,5分优秀,4分好,3分一般,2分差,1分很差。一般来说,以h264编码为例,如果要让视频的MOS值为4,那么在分辨率为640*480时需要1.9Mbps的码率,1920分辨率时需要7Mbps的码率*1080;MOS值为3。当分辨率为640*480时,需要0.5Mbps的码率。当分辨率为1920*1080时,需要2.5Mbps的码率。可以看出,MOS值越高,视频质量越好,码率越高,需要的带宽也越大。因此,要提高实时音视频的“真实感”,就需要在提高传输码率的同时,尽可能降低传输延迟。然而,除非所有用户都有足够的带宽并且网络质量足够好,否则降低延迟和提高比特率是矛盾的。实时音视频通信的主要矛盾从前面的描述可以看出,实时音视频通信的主要矛盾在于音视频服务质量、带宽大小、网络质量之间的矛盾。和实时性能。解决这一主要矛盾主要有五种途径。增加带宽增加带宽是解决问题最有效的方法,只要用户带宽足够,一切问题都不是问题。但在现实中,我们很少期望用户增加带宽,而在多用户实时通信场景下,单个用户带宽的增加对整体服务影响不大,因为在这种场景下,通信服务质量好坏。由网络最差的用户决定。所以这里增加带宽意味着所有用户的带宽都增加了。首先,可以期待的是5G网络的普及。这将从整体上提升所有用户接入5G网络设备的网络能力。那么在客户端,WebRTC支持的路由方案是一个很好的解决方案,可以优先选择质量最好的网络连接线路。最后,在服务器端,可以通过提供更好的接入服务,保证云网络的带宽和质量,以及更合理的路由调度策略来提供更好的带宽。减少数据量当网络带宽无法增加时,解决这一矛盾最有效的方法就是减少音视频数据量。通常有5种方法可以减少数据量,即:使用更好的压缩算法,比如使用h265、AV1等压缩率更高的编解码器。使用SVC技术,SVC技术是将视频按照时间、空间和质量进行多层编码,然后以一个流的形式发送到服务器。服务器收到后,根据每个用户的带宽选择不同的层进行下发。使用Simulcast技术类似于SVC的分层思想,但其实现更简单。就是将视频编码成多个不同分辨率的码流上传到服务器。服务器根据每个用户的带宽选择最合适的流进行传送。使用动态比特率。当网络带宽估计用户带宽不足时,降低输出码率;当估计带宽增加时,输出码率增加。掉帧或减少业务。这是一个坏主意,只有当用户的网络非常差时才应该使用。适当增加延迟在网络抖动的情况下,使用缓冲队列来平滑处理数据。这种适当增加延迟的方法也可以解决一些服务质量和网络之间的矛盾。这种方法在WebRTC中也有应用,比如PacedSender。提高网络质量提高网络质量的前提是网络不拥塞。网络质量的好坏可以从丢包、时延、抖动三个方面进行评估。丢包是传输过程中对网络影响最大的指标。优质网络丢包率不超过2%。对于WebRTC,丢包率大于2%小于10%属于正常网络。延迟对网络的影响比丢包小。如果网络中的延迟继续增加,则网络中可能出现拥塞。抖动,对网络的影响最小。一般抖动可以通过缓冲队列来解决。WebRTC中提高网络质量的方法有很多,比如NACK、FEC、JitterBuffer、NetEQ、GCC等。快速准确地评估带宽只要能够快速准确地评估带宽,通常就可以有效地防止网络拥塞。目前Google最新的Transport-CC算法是WebRTC中最好的。总结到这里,可以看出实时音视频通信要做到“既要,还要,还要”是非常困难的。这里有一张李超老师总结的思维导图,大家一起学习。
