做者:网易智企云信资深音视频引擎开发工程师 王兴鹤面试
随着AI和5G的到来,音视频应用将变得愈来愈普遍,人们对音视频的品质需求也愈来愈高,视频分辨率已经从高清发展为超高清、VR,视频帧率也已出现60fps、120fps等应用,交互式的应用对端到端延时也提出了更高的要求。与此同时,设备的硬件性能也日新月异。能够预见,随着5G的到来网络中传输的数据将会呈现爆发式增加,大量数据将会给网络传输带来巨大的挑战。所以,如何保证用户高品质的音视频体验?传输将会是一个重要环节。算法
网络中常见的问题有丢包、抖动、拥塞、延时。如下将分别介绍这些问题对视频体验带来的影响。服务器
视频帧每每是拆成一个个分组包进行传输,当网络发生丢包时,接收端没法成功组帧,不只影响这一帧的数据解码,从这一帧开始的整个GOP都将没法解码显示,用户看到的画面将出现卡顿,直到完整的I帧到达接收端才能恢复画面。网络
抖动一样是形成卡顿的杀手锏,抖动分为发送数据抖动、网络传输抖动、接收丢包恢复抖动。在端到端全链路上,任何环节都会引入抖动而影响画面的流畅性。接收端的Jitter Buffer缓冲区负责消除抖动,提供稳定的解码帧率,可是Jitter Buffer是牺牲延时做为代价的。性能
网络发生拥塞时,音视频的播放状况将变得更加恶劣,拥塞形成的直接影响是突发丢包或者突发抖动,若是不及时预测拥塞的发送下降发送数据量,接收端将会出现卡顿、延时大、画质差等等问题。编码
发生丢包、抖动、拥塞时每每会伴随着延时的增大,ITU StandardG.114对延时的定义是,端到端延时大于400ms时绝大数的交互体验都将不能接受。spa
咱们用QoE表示用户在接收端的主观体验,而QoS是指经过一些量化指标衡量网络的传输质量并提供优质网络的服务。设计
那么对抗以上这些网络问题,QoS都有哪些武器呢?视频
FEC是经常使用的抗丢包手段,又叫前向纠错码,是在发送端额外发送一些冗余数据,用于抵抗网络丢包。当接收端检测到媒体数据发生丢包时,就能够利用接收到的冗余数据进行丢包恢复。FEC的优势是丢包恢复延时低,缺点是冗余数据占用额外带宽,在带宽受限场景会挤压视频原始码率,致使画质变低。影响FEC的丢包恢复能力除了冗余数据数量以外,还跟分组大小有关,分组越大,抗丢包能力越强,可是对应的丢包恢复延时也会变大。开发
分组大小与抗丢包能力示意
FEC的编解码算法有XOR、RS等,衡量FEC算法的指标主要有计算性能、抗丢包能力、恢复延时。其中基于柯西矩阵的RS(里德-所罗门码)是目前比较流行的FEC算法。该算法结合合适的分组策略在以上三个指标上都有较好的表现。对于不一样的应用场景也有不一样的FEC算法有更好的表现,好比喷泉码、卷积码等等,喷泉码结合接收端反馈机制对无线信道等丢包波动大的场景有较好的表现。
总的来讲,FEC是一种用码率流量交换抗丢包能力的技术,相比重传FEC的优势是恢复延时低。FEC技术的关键点是如何设计合理的冗余策略和分组大小,达到抗丢包能力、视频码率、恢复延时三者的有效平衡。
有别于FEC的抗丢包技术,重传不须要浪费太多的码率,只有当接收端检测到丢包时经过反馈给发送端丢包信息(NACK)才进行相应数据的重传,接收端每隔1个RTT对同1个包发起重传请求,直到成功接收到相应的数据包。重传最大的好处是码率利用率高,缺点是会引入额外的丢包恢复抖动从而拉大延时,显然,网络RTT越大重传的恢复效果越差。
考虑到双向丢包的场景,对于同一个包,接收端能够以1/2 RTT间隔发送重传请求,以应对重传请求包可能丢失的状况。发送端对同一个seq的包响应间隔按照RTT间隔控制,防止重传码率过多浪费。发送和接收按照以上间隔处理重传请求和重传响应,能够在码率和抗丢包能力上达到有效的平衡,实现收益最大化。一个好的重传策略设计还须要考虑是否须要容忍乱序,合理控制重传码率。
接收侧一个重要环节是Jitter Buffer。Jitter Buffer的做用是以最低的缓冲延时代价消除数据抖动,提供流畅的播放帧率。由于视频是按帧解码播放,因此Jitter Buffer的延时计算也是按视频帧为最小计算单元,而不是按视频包,输入Jitter Buffer的参数是每一帧视频数据的抖动。形成帧抖动的因素有不少,有采集抖动、编码抖动、发送抖动、网络抖动、丢包修复引入的抖动等,总之,在解码以前的任何环节引入的数据抖动会汇总到Jitter Buffer模块处理抖动消除。
有效发挥重传的抗丢包能力须要有Jitter Buffer的拉伸策略加以配合。由于重传只是保证数据可以到达接收端,此外接收端还须要有足够大的Jitter Buffer等待这些晚到的数据帧,不然即使重传到达接收端的数据因为滞后性缘由将被丢弃。
重传结合Jitter Buffer拉伸策略是一种用延时交换抗丢包能力的技术,其中影响这种交换性价比的关键因素是RTT,RTT越小重传收益越大,反之收益越差,更多须要FEC实现抗丢包。
除了重传、FEC等常规手段以外,长期参考帧技术即选择参考帧技术,是一种网络模块和编码器共同配合完成的技术。在RTC场景下通常的编码参考策略是向前一帧参考,由于参考的距离越近压缩效果越好,出于实时的考虑编码只有I帧和P帧,没有B帧。而长期参考帧是一种可跨帧的参考帧选择策略,这种策略打破了传统的向前一帧的参考的规则,能够更加灵活地选择参考帧。
长期参考帧策略的目的是在有丢包的场景下,接收端不须要等待丢包恢复也能继续显示画面,其最大的好处是低延时,不须要等待重传恢复,可是带来了压缩率的牺牲,在相同码率下表现为图像质量的牺牲,可是这种牺牲和收益的交换在某些场景下是值得的。此外,常态的长期参考帧技术在抵抗突发丢包能力上有很大提高,当网络忽然出现丢包,FEC和重传的当即恢复效果通常是比较差的,尤为是有基础RTT的网络。而长期参考帧能够饶过丢失的帧,利用丢失帧以后任何一个恢复的帧进行解码显示,从而提高突发丢包时的流畅性。
根据长期参考帧的特色和目的,实现长期参考帧技术应用须要有接收端侧反馈信息,编码器根据接收端反馈的帧信息选择参考帧编码,在有丢包的场景下,接收端经过短时的帧率牺牲将很快恢复画面。因为存在接收反馈,高RTT时反馈延时较大将会致使参考距离变大,而参考距离超出了编码器的编码缓冲限制将会致使编码找不到参考帧,因此长期参考帧比较适合低RTT场景。在多人会议场景中,下行人数太多也会制约长期参考帧的参考帧选择。
综合来看,长期参考帧适合1V1的通讯场景,适合低RTT伴随丢包或者拥塞的弱网场景,这样的场景下长期参考帧比传统的向前一帧参考有更好的实时性和流畅性,同时结合重传和FEC的抗丢包贡献,其抗弱网能力将大大提高。
长期参考帧比较适合1V1的场景,而多人场景时,须要大小流和SVC发挥做用。
大小流是指上行同时传输两条不一样分辨率的流,媒体服务器能够根据下行实际的带宽状况转发相应质量的流,若是带宽足够转发高质量的大流,带宽不足转发低质量的小流。这种大小流机制的好处以下: 1)无需调节源端码率就能向媒体服务器提供两种规格的视频码率; 2)在下行接收者有不一样的带宽时,可灵活转发,避免只有一个编码源相互影响的状况。
SVC跟大小流的特色同样,区别在于SVC提供了不一样帧率的可选规格,媒体服务能够选择不一样的SVC层进行转发,经过下降帧率达到下降码率的目的。
在带宽不足时,不一样用户对清晰优先和流畅优先的需求不同,SVC和大小流提供了灵活的机制知足不一样应用的需求。
咱们把咱们的应用场景简单地分为两大类,通讯场景和直播场景。通讯场景简单的好比视频会议、主播连麦交流,在线面试等等,这种交互性的应用场景对实时性要求较高,它的特色是低延时、流畅优先。而直播场景好比主播直播卖货,老师在线授课,这种场景的特色是大部分时间都是主播或者老师一我的在讲,所以它的特色是高延时、清晰优先。在这两种场景下有不一样的策略倾向,通讯场景更多的是用FEC,重传做为辅助,提高实时性。直播场景更可能是用重传,FEC做为辅助,提高清晰度。
本文主要介绍了对抗弱网的基本QoS策略,除了以上技术以外还有不少模块涉及到延时、清晰、流畅三个维度的平衡。不多有一种技术能作到天衣无缝,鱼和熊掌不可兼得,咱们要作的平衡策略就是取长补短,趋利避害,在不一样的网络条件下,不一样的应用场景下,结合每种技术的自身特色,将其进行组合打出一套组合拳,实现受益最大化。