视频云服务质量(Qos)之抗丢包策略
视频云服务质量(Qos)之抗丢包策略
在实时通信和流媒体传输中,服务质量(QoS)是确保数据传输稳定性和可靠性的关键。其中,抗丢包策略是QoS的重要组成部分,常见的策略包括NACK(Negative Acknowledgment)和TWCC(Transport Wide Congestion Control)。本文将详细介绍这两种机制的工作原理和应用场景。
NACK生成策略
NACK是一种反馈机制,当接收端检测到丢包时,会向发送端发送一个NACK消息,请求重新发送丢失的数据包。具体来说,NACK通过RTCP(Real-time Transport Control Protocol)包进行反馈,包类型为205,反馈类型为1。
如图所示,接收端在收到报文4之后发现报文2、3未到达,会将报文2、3放入丢失NACK列表。当超过一定乱序阈值,或者超过一定抖动时间(根据RTT计算),接收端会向发送端请求重传丢失的报文2、3。
对于NACK来说,需要维护一个NACK数组来存储NACK信息。NACK数组包含以下字段:
params
: NACK参数seqNum
: 丢包RTP序列号bornAt
: NACK信息生成时间tries
: 此NACK包发送次数lastNACKedAt
: 最后一次NACK的时间
SFU(Selective Forwarding Unit)在处理数据流时,会检查每个RTP包的序列号。如果发现序列号之间存在间隙,SFU会识别出这些潜在的丢包,并构建相应的NACK数据,存储在NACK数组中。一旦接收到NACK数组中序列号对应的RTP包,SFU会将对应的NACK数据从数组中移除。此外,SFU会定期检查NACK数组,如果数组中的元素保存时间超过了20毫秒的阈值,会主动向发送端发送NACK报文,并记录该RTP报文的尝试次数,最多不超过10次。
TWCC策略
TWCC是一种拥塞控制机制,旨在减少网络拥塞和丢包。它通过RTP传输层的扩展和RTCP反馈消息,基于丢包和延迟估算带宽占用是否有拥塞,从而调整媒体流的发送速率。TWCC主要的估算和决策在发送方,采用了线性回归和最小二乘法。
到达时间模型
在WebRTC中,可以通过延迟梯度来衡量网络状况。延迟梯度不是一个个包来计算的,而是通过将包分组,然后计算这些包组之间的延迟,这样做可以减少计算次数,同时减少误差。
recv delta
recv delta长度为一个字节或两个字节,是RTCP Feedback Message中的字段,记录每个包与之前收到的包的间隔时间。它是250us的倍数,reference_time是当前包组第一个packet到达的时间。
基于延迟的拥塞控制算法
TWCC的工作流程可以概括为以下几个步骤:
- 在发送端,每个RTP数据包都会被赋予一个独一无二的序列号(Seq)并记录发送时间send_time。
- 接收端在捕获到RTP数据包时,会记录每个包的到达时间arrive time。通过分析这些时间数据,接收端能够计算出数据包的到达时间间隔recv delta。然后,接收端会定期将这些数据汇总,并通过TWCC反馈包的形式发送回发送端。
- 发送端接收到TWCC反馈后,会利用这些延迟信息来评估当前的网络状况。发送端计算发送时间间隔send_delta=g(i)-g(i-1)(表示第i个报文的发送时间)。
- 计算当前时刻时延变化和累计时延变化。
- 将累积延迟变化进行指数平滑。
- 以到达时间为横轴,延迟变化为纵轴进行线性回归,计算其拟合出的趋势线的斜率。
- 将计算出来的斜率与一个动态阈值进行比较,来发现是否发生拥塞。如果观察到拥塞,此时发送端会相应地降低其数据发送速率。相反,则表明网络状况较为顺畅,发送端则可以适度增加发送速率,以优化传输效率。
- 根据以上检测结果,调整带宽估计速率,GCC采用AIMD算法。针对速率控制分为两部分,一个是基于丢包的带宽估计,一个是上述所说的基于延迟的带宽估计,最终会综合比较两者之间的值,取两者之间的最小值作为带宽估计结果。
总结
NACK与TWCC是QoS中的重要策略之一。NACK机制只重传丢失的数据包,这意味着它不需要像前向纠错(FEC)那样在发送端添加额外的冗余数据。因此,NACK在带宽使用上更为高效,减少了不必要的带宽消耗。通过及时重传丢失的数据包,NACK机制能够减少音频、视频通话中的卡顿和中断现象,从而提升用户的通话体验。
对于TWCC,其中的核心是带宽估计。带宽估计如图所示。
从图表中可以明显观察到,可用带宽与预估带宽之间展现出了高度的一致性。尽管在调整过程中偶尔会出现轻微的过冲现象,但TWCC策略以其出色的收敛能力迅速调整,确保了网络状态的稳定。这种快速收敛的能力主要得益于TWCC策略的延迟敏感性。TWCC通过接收端发送的RTCP包,例如TWCC报告,来实时监测并评估网络状况。这些反馈信息包括数据包的到达时间和丢包状态等关键指标,为TWCC提供了及时的拥塞检测能力。
这种机制使得TWCC能够及时捕捉到网络状态的变化,并迅速采取相应的拥塞控制措施。通过这种方式,TWCC能够避免网络拥塞的进一步恶化,提高通信的稳定性。正是基于TWCC策略的这些优势,我们在自主研发的SFU中主要采用TWCC策略。