当前位置: 首页 > 科技观察

弱网对抗的RTC冗余策略

时间:2023-03-17 13:33:28 科技观察

1.背景在当今社会,实时音视频通话已经成为人们生活和工作的重要组成部分,比如商务会议、亲友聊天等,在通话过程中,总会出现这样意想不到的情况:也许你坐在飞驰的高铁上——信号时好时坏;或者你开会离开办公室——网络从wifi切换到4G……实现高质量的实时音视频通话需要搭建一座“桥梁”,让人们不分远近,而这个“桥梁”需要卓越的“基础技术”,确保网络传输的稳定性和可靠性。网络传输链路存在很多不稳定情况,导致发送的数据包出现丢包、延迟或抖动等情况。不稳定的原因有很多。通信双方在物理空间上存在一定距离。传输过程由许多设备处理。传输中途出现线路硬件故障、软件驱动限制或链路数据拥塞。数据包在接收端无法接收或延迟。我们可以使用一些简单、基础的工具来检测网络是否有波动,比如ping命令或者Iperf工具,可以帮助统计丢包、延迟、单向抖动等。我们使用ping命令向远程主机发送ICMP报文,远程主机会回复你。在此过程中,如果你发送的ICMP报文丢失,或者远程服务器回复的报文丢失,命令行界面,对应的icmp_seq会显示超时未收到,这种情况直接反映丢包.pingvsiPerf带宽分配和冗余策略是弱网防御的核心模块。随着算法的演进和迭代,我们可以保证大部分在线场景下的高质量音视频体验。对于一些小概率或者特殊的场景,比如突发断网、拥塞恢复、PPT翻页等,我们也引入了多种冗余策略来满足流畅性、恢复效率和低延迟的要求。2.常用的数据包恢复技术通常,如果数据包在网络传输链路中丢失,恢复数据包的方法主要有两种:一种是发送方使用接收方通知或超时机制重发数据包;另一种是根据接收到的其他冗余数据包,在接收端恢复数据包。第一个是众所周知的自动重复请求(ARQ)技术。不同于TCP协议中的ACK响应机制,实时音视频场景使用的是NACK否定响应机制。接收端检查包序号的连续性,并主动通知发送端丢失的包信息,以便重发。这种方式的优点是在低延时场景下恢复效率高,带宽利用率好,但是在高延时场景下效果相对较差,存在重传风暴。第二种是ForwardErrorCorrection(FEC),即前向纠错编码,一种通过冗余发送来对抗网络丢包的技术。其主要技术原理是组编码和组内冗余恢复。假设每组由k个媒体包和r个冗余包组成,一组中的k+r个数据包中的任意k个包都可以用来重构k个原始媒体包。这种方法的优点是冗余决策是根据先验知识做出的,不受延迟的影响。3.冗余策略在上述基本的丢包恢复技术下,为了在各种场景下最大化整体抵抗弱网的能力,需要对带宽分配和抗丢包技术的组合配置进行一系列的优化,从而实现抗丢包能力、端到端时延、卡顿率、冗余率的平衡,达到“消耗最小,体验最优”。下面详细介绍一下我们在这方面所做的几项优化。3.1自适应调整策略冗余策略大致可以分为两类,一类是前向冗余,一类是被动冗余。根据前面的描述,我们知道前向冗余的优点是不需要交互,更适用于高延迟的环境。缺点是占用带宽太多。被动冗余的优点是按需发送,占用带宽少。缺点是高延迟场景效果会急剧下降。我们的冗余策略是找到一个平衡点,通过调整被动冗余和前向冗余策略的比例,在保证丢包恢复率(比如99.5%)的前提下,尽可能的降低冗余比例,以最小化抗丢包恢复时间。因此,我们可以将当前问题抽象为如下数学场景:假设m个媒体包,在重传k次后,接收到i个包的概率记为:P(m,i,k)假设n个冗余包,概率为接收端收到j个数据包记为:P(n,j,0)根据目前的FEC算法,接收端只需要收到任意m个概率为:NackFEC算法是基于大于99的恢复概率%来计算需要配置的最小FEC冗余n。基于上述模型,在m(平均帧分组大小)、k(时间范围内允许的重传次数)中,i、j是可选参数。只要我们将n从0代入,并且上面求和的结果大于99%,我们就可以将这个n作为FEC的冗余率。通过上面的算法,我们定义一个抗丢包恢复时间resend_delay,就可以得到被动重传的次数k。从参数k中,可以推断出仍需要实现99%恢复的FEC分数。以上是理论上的最优冗余率计算逻辑。通过算法的逻辑,我们可以得到一种自适应的冗余调整策略,从而得到最优的冗余比、最合适的时延损失和最好的丢包恢复率。3.2可靠重传策略在接收端的媒体缓存中,对于seq的latest和oldest范围内没有接收到的数据,接收端会发送Nack请求,然后发送端收到Nack请求并发送相应的包。在正常工作状态下,Pacer先发送RTX重传数据,再发送媒体数据,这样接收端较旧的丢失数据包总是可以先被恢复。但是在某些场景下,比如丢包比较大(70%以上的丢包率),或者带宽突然受限(4M--->300K),都会有大量的数据包被丢弃。这个数据包既包括原始数据包,也包括Nack重传数据包,会造成如下图所示的一些问题。如图所示,如果丢包恢复效果比较差,比如上面n+3帧已经发送了,但是n帧还没有被接收端接收到,这时候,丢包列表接收端生成的需要重传的nack_list会很长。对于发送端来说,由于媒体数据还在发送,理论上接收端会请求越来越多的nacks,从而形成nack风暴。Nack风暴不仅会导致大量的重传流量占用媒体带宽,降低带宽分配模块分配给媒体的比特率,还会造成Pacer拥塞,导致更大的端到端时延。同时,由于某一帧的媒体包没有被选择性重传,因此接收端需要解码的帧能够完全丢包恢复的概率较低。为了避免出现上述情况,我们引入了可靠重传模块:在检测到上述情况后,会及时暂停媒体传输,同时我们会尽量保证已经发生的帧数据已发送的可以完全恢复。我们通过TccAck和Nack请求的信息来判断某个数据包处于什么状态,然后统计当前发送的数据中有多少帧没有被完全ACK。如果这个数字太大,媒体发送会暂停(同时编码器也会暂停)。暂停媒体传输后,按照帧从旧到新的顺序,将pacer预算分配给优先级最高的帧,并主动发送这些帧中未被ACK的数据。通过上面的方法,我们有效的解决了目标场景卡住时间长或者卡太多的问题。3.3拥塞恢复场景下FEC码率的快速抑制我们的FEC使用loss来计算FEC冗余率。为了防止抖动引起的剧烈变化,对这个损失值进行了平滑处理。但是,对于某些场景,比如带宽突然下降到较低水平的场景,当拥塞状态解除后,网络丢包就会消失。这时候我们就需要快速抑制FEC码率,让出带宽给媒体,让画质尽快得到提升。利用上述状态机,在收到拥塞解除信号后(拥塞状态解除,瞬时tccloss变为0),如果smoothloss没有变为0,则可以利用瞬时loss快速取消FEC冗余。3.4空闲带宽利用优化在共享场景下,冗余策略将遇到进一步的挑战。比如当PPT不翻页时,需要给视频免费带宽。但是共享流在翻页时很快就会占用带宽。这样会导致翻页时视频码率波动较大。如果总体可用带宽较低,您会看到视频质量发生显着变化-速度不流畅和延迟增加。如图所示,在PPT翻页场景下,视频会使用屏幕未使用的带宽。对于静止图像,视频使用了大部分原本共享的预算。一旦PPT翻页,共享码率瞬间提升,但如果不及时降低视频编码率,就会导致pacer模块拥塞,导致丢帧、卡顿。针对这种场景,我们优化了带宽分配策略:在slow-up和fast-down带宽分配过程中,每个媒体流使用的上层传输的idlebitrate缓慢增加,快速减少,以防止高优先级比特流过快放弃空闲带宽,导致低优先级比特流的分配码率波动较大。关键帧检测当某个媒体流开始接收到关键帧时,减少该流放弃的空闲带宽量,从而降低整体输出码率的波动。峰值检测采用300ms的统计窗口来判断峰值。当有较大的峰值数据时,降低流的带宽以降低整体输出比特率的波动。4、优化效果在上述冗余策略的优化下,飞书会议整体冗余率大幅降低(部分增加是由于原算法冗余不足,大量卡顿。算法后优化后,整体冗余率调整到最佳值)。同时,在保证音视频整体效果的前提下,进一步降低了端到端的整体延迟,提升了飞书会议的整体音视频体验。算法优化大大降低了低延迟场景的冗余率,高延迟场景的冗余率也趋于理论上的合理值。解决了原有算法在高丢包场景下的问题,大大提升了高延迟、高丢包率的弱网场景下的体验。解决场景,网络状态变化过程中的收敛速度,提升变化过程中的音视频体验。与同类产品相比,我们优化算法的冗余度明显低于同类产品,在流畅度对齐的情况下消耗的带宽更少。尤其是在高丢包、高时延场景下,我们的冗余率仅相当于同类产品的40%。5.未来展望通过这些优化的冗余策略,飞书会议在弱网场景下的卡顿率、端到端时延、冗余率等指标都得到了极大的优化。在此基础上,未来我们将进一步加大对极弱网支持、带内冗余联动策略、智能场景识别等方面的投入,提升飞书会议在各种弱网场景下的客户端体验。5.1极端场景抗弱网络能力支持增加对极高丢包、极高时延、丢包+时延、低带宽+高丢包等场景的支持,配合冗余策略和带宽分配策略,实现极弱网络场景下的最佳音视频体验。5.2带内冗余联动下的抗弱网策略冗余策略,除了前面提到的非音视频编码的带外冗余(Nack,FEC等),还包括音频的带内冗余和视频编码。与带外冗余相比,带内冗余往往结合编码本身的特点,以较少的冗余码率代价来达到更高的抗弱网效果。我们的冗余策略也将进一步结合并最大限度地利用带内冗余算法,进一步提高抵抗弱网的能力,降低整体延迟和带宽占用。5.3场景识别下的抗弱网络策略优化后续我们还将对当前网络环境进行识别,获取当前网络场景,从而进一步预测性下发冗余策略和编码策略。比如我们识别当前场景是高铁场景,那么在生成冗余策略的时候可以偏向于抵抗连续丢包的策略,或者可以提前增加默认的前向冗余来增加对突发弱包的抵抗力网络。根据识别场景的特点,可以在弱网实际发生前和弱网发生后进行不同的策略。