实时音视频抗弱网技术揭秘

柯于刚 百度开发者中心 4天前
图片
本文由百度智能云-视频云技术架构师——柯于刚 在百度开发者沙龙线上分享的演讲内容整理而成。内容从抗弱网技术意义出发,梳理抗弱网的概念与方法,结合百度RTC抗弱网过程中遇到的问题,重点分享抗弱网技术优化的探索与实践。希望本次分享能够让开发者对抗弱网技术有一个全面的认识,并掌握一定的webRTC优化方法。
文:柯于刚
整理:百度开发者中心
视频回放:https://developer.baidu.com/live.html?id=9

本次分享的主题是:实时音频抗弱网技术揭秘,内容主要分为以下三个方面:
  • RTC抗弱网技术的意义
  • RTC抗弱网技术解析
  • 百度RTC抗弱网实践与探索


01

抗弱网技术的意义


图片
一个云服务的发展都会经历「能用」、「好用」到「大规模使用」的阶段,直播、点播、 CDN等云服务都经历过这些阶段。

类似地,RTC 正处于从「能用」走向「好用」这一过程中,需要持续地提升视频观看体验,提供标准化实时服务,抗弱网技术是这一阶段的关键技术。

另一方面,不同于RTMP、RTSP 等「尽力而为」的网络协议,它们只解决网络问题;RTC 是一个面向视频交付的协议,联动传输和编解码,形成可靠的视频交付,抗弱网技术是实现全场景交付的关键支撑性技术。


02

RTC抗弱网技术解析

抗弱网技术涉及的环节和常用手段

1. 抗弱网涉及的环节
图片
最典型的RTC系统结构通常包括两个部分:平台侧和终端
而平台侧通常又分以下两部分:
  • 用户端接入, 包括信令和媒体。
  • 服务间流的中转和控制,包括媒体分发、调度。
抗弱网除涉及这些环节外,还需要面临常态化的低质量网络和突发性的不稳定网络的问题。

2. RTC抗弱网的技术手段
图片

抗弱网的技术手段可以归纳为2个层面,包含4个方法
「2个层面」网络层面音视频流层面
「4个方法」包括:
(1)自适应方法。自适应地对带宽评估、合理使用带宽,自适应调整编码码率。
(2)纠错方法。针对丢包、丢帧等情况,在网络数据包、视频音频层面上纠错恢复数据。
(3)缓存方法。针对网络抖动、设备不稳定、设备性能等问题,动态调整视频、音频的缓存区。
(4)调度方法。尽可能地将用户调度到最好的接入点,或实现最优的服务器间内容转发,从而降低延时和提升稳定性。

WebRTC抗弱网技术简介

图片
WebRTC 提供了一系列好用的组件和一套低延时音视频框架,涵盖了编码、发送、接收和解码四个环节。
绝大部分自研系统的架构也与此类似,但会在具体实现过程中对算法做相应的调整。

编码环节就发送方而言,根据其网络情况自适应地采用合适的码率;采用Simulcast、SVC技术,满足接收方选择带宽匹配的音视频流。

发送环节:首先进行带宽估计和分配。如果发生了数据错误,采用RTX 重传和FEC纠错。此外采用 PACING实现网络的平滑发送,数据发送优先级。

接受环节:与发送方就带宽估计、重传等配合,发送 NACK 请求重传数据包,发送RTCP 反馈指示接收情况,通过视频、音频动态缓存平滑适应网络的抖动。

解码环节:实现错误隐藏,在数据出错之后尽可能提升用户体验,实现稳定的帧输出。

传统的流媒体协议主要作用在网络层面,没有实现网络和编解码环节的联动,而WebRTC 综合这两个环节,大大提升对弱网的适应性。

抗弱网技术总览


图片

我们对RTC抗弱网进一步归纳:在带宽评估、带宽分配、带宽使用、缓存、解码渲染等阶段,综合解决丢包、延时、乱序抖动、限速、突变等网络质量问题。
  • 带宽估计阶段,采用基于丢包、基于时延、基于 ACK 带宽的评估方法;
  • 带宽分配阶段,动态地分配视频、音频的编码码率, FEC 前向纠错、重传纠错的带宽。
  • 带宽使用阶段,采用 Nack、Sack、FEC 实现数据纠错,采用 Pacing实现发送优先级,平滑数据发送;
  • 缓存解码渲染阶段,WebRTC 中提供了面向视频的 JitterBuff 和面向音频的 NetEQ,适应网络的抖动、修补数据的残缺、将网络数据包转换成音频帧或视频帧。

关键技术解析

1. 带宽评估——TCC基本理解
图片

TCC 是一种带宽评估技术,其输入为接收情况反馈,输出是评估带宽值。采用三种方法评估带宽:丢包估计、延时估计、确认带宽估计,最后以最小值作为评估出的带宽。

  • 丢包估计:统计流丢包率的大小,在上次评估的带宽基础上,判断是增加带宽还是降低带宽,或者维持不变。
  • 延时估计:采用 Aimd 实现和式的增加带宽,乘式的降低带宽。具体实现方式:持续计算发送端和接收端连续两个包组之间的差值之差,作为输入值拟合线性回归线计算得到斜率,根据斜率判定网络是拥塞、轻载、稳定,基于ACK带宽估计的值做Aimd调节。
  • 确认带宽估计:基于FeedBack接收反馈,采用贝叶斯评估接收方到码率,该值作为延时估计的带宽基值。
    最后,对丢包估计得出的带宽值和由 Aimd 处理后的时延估计结果取最小值,作为最终的带宽评估结果。

2. TCC的优缺点
图片
TCC技术的设计优点包括:
  1. 采用「丢包+延时」网络拥塞检测方法,实现了边界性的保护。

  2. 面向视频应用,考虑未充分使用的带宽、已确认的带宽,并检测估计出的带宽是否有效。


TCC 技术的不足之处在于:
  1. 所有估计强烈依赖反馈,接收端会影响发送端。

  2. 发送方的丢包、延时拥塞估计都基于统计实现,反映灵敏度低。

  3. 未覆盖高乱序抖动等场景。


3. 带宽分配
图片

带宽分配最典型的应用场景是对视频、音频、容错带宽分配。就音频而言,其带宽主要包含音频的原始码率和重传纠错预留的带宽。

大部分的带宽将分配给视频,视频的带宽分为三部分:
  • 视频原始码率

  • 前向纠错的 FEC带宽

  • 视频重传所需要带宽


需要指出的是,重传带宽不是预分配得到的,而是根据实际使用统计得出。在具体实现中有一些修正,例如:视频 FEC 带宽加上重传带宽不超过视频总带宽的一半。
在这默认的设置,WebRTC 的抗丢包率约为20-30%,可改变 nack+fec 的带宽分配比例提升抗丢包率。

4. 带宽使用——NACK+重传
图片
带宽使用主要涉及重传和 FEC 两个场景。如上图所示,发送端的 host1 丢掉了 101、102 两个包。

接收方发现丢包的时机可能有两个:
  • 在接收 103 号包时,基于包序规则发现丢掉了前两个包,因此重新对发送方申请发送 101 和 102 号包。

  • 如果重新请求后经过了 RTT+退避期的时间仍然没有收到这两个包,则会超时请求重传。

发送方收到NACK的请求之后,也会采取一定的措施控制。如:同一个RTP包,在两次重传间会隔1倍的RTT,这种方式避免短时间多次发送导致的带宽浪费。

5. 带宽使用——前向纠错FEC
图片

WebRTC前向纠错 FEC 经历了从 UlpFEC 到FlexFEC 的发展。
简单理解,UlpFEC基于行的生成纠错包,如果连续丢掉了两个包就很难恢复。
FlexFEC 采取了行列交织生成纠错包,即使连续丢包也有可能恢复,但也会引入更多的计算开销。
FEC 在随机丢包(丢包率成正态分布)中较为容易恢复,现实应用中丢包未必这样,恢复的效果有一定的降低。

启用 FEC 首先是发送端和接收端协商SDP ,依据网络状况确定是否启用,然后确定FEC 参数,每个 FEC 包由多少数据包生成、行列矩阵的组成,以及使用带宽比例,再后通过xor计算生成 FEC 包,记录依赖包的关系,最后恢复出丢失的原始 RTP 包。

6. 视频缓存与解码——JitterBuff基本理解
图片
JitterBuff 的输入为RTP 包,输出为视频帧,它实现了以下功能:
  • 一套动态缓存机制,处理丢包、超时、乱序、延迟、帧残缺等异常情况。
  • 一套将 RTP 包解码成帧的控制机制,确定还原帧的时机、参考关系。
  • 计算网络抖动延时,通过卡尔曼滤波,预测包到达的时间,实现出帧的平滑稳定。

7. 音视频缓存与解码——NetEQ基本理解
图片
NetEQ 被用于实现音频的动态缓存,计算网络抖动,实现 RTP 包的缓存、去重、排序、纠错等功能。
NetEQ 采用直方图估算网络抖动,通过峰值检测应对突发变化情况。当缓存中数据不足时,降低出帧的频率;当缓存中数据过多时,提升出帧频率,从而实现均匀出帧。对于空帧,NetEQ 会根据前帧和后帧拟合出补偿帧。
需要补充的是,Opus 编码格式下开启 DTX 的帧内 FEC 后,抗弱网的能力会大大提升。


03

百度RTC抗弱网实践与探索

百度RTC抗弱网总览

图片
RTC是一种低延时技术,不止用于实时通信中,也可以被用于低延时直播等场景,以获得更好的弱网适应性。
RTC 抗弱网技术主要被应用于 1对1、N对N,以及流场景下。抗弱网技术是一个系统工程,不仅考虑媒体层面,还需要从接入、调度、用户体验的角度考虑如何抗弱网。

媒体抗弱网实践

图片

百度在媒体抗弱网有丰富的实践和探索,主要包含以下,
  • 带宽估计阶段首先判断丢包的类型,确定对带宽的调整方案,提升抗乱序抖动、提升对网络变化感知的灵敏度。
  • 带宽分配阶段我们以音视频清晰和流畅为目标导向,对丢包率、延时、抖动的统计,预测恢复效果,动态调整 ARQ、FEC,以及编码带宽配比。
  • 带宽使用阶段精细地优化重传,优化接收方发起重传的时机和发送方发送数据包的时机,避免重传风暴,保证重传的有效性。在重传 Nack 请求丢失时,及早发现并尽可能快速恢复。此外,还重点优化音频的连续丢包问题,在编解码环节采用多码流的Simulcast和SVC技术。
  • 缓存\解码\渲染阶段我们优化视频、音频 JitterBuff,更好适应抖动、乱序等场景,值得注意的是,目前的 WebRTC协议是端到端的,然而商业系统往往经过 SFU服务器中转,使用场景就发送了变化,原有机制就不适应了,需要JitterBuff做调整。


其它技术实践


1. 带宽估计TCC优化——增强丢包抗性
图片
为增强对丢包的抗性,我们将丢包的情况分为拥塞丢包、非拥塞丢包和偶发丢包
非拥塞丢包场景下,个体的避让对整体信号质量的影响有限,为了保证视频的流畅,
不能降低带宽,反而需要发送更多的数据包,将更多的带宽分配给纠错。只有在拥塞丢包才需要降低带宽,偶发丢包是非持续的网络信号抖动,无需降低带宽。

2. 带宽估计TCC优化——增强乱序抖动抗性
图片
Webrtc带宽估计对乱序抖动的适应性较差,分别调整DelayBWE和LossBWE以提升对乱序抖动的容忍度,避免将乱序误判为丢包,避免过度重传。

3. 带宽估计TCC优化——提升拥塞灵敏度
图片
在带宽估计中,为了提升探测拥塞的灵敏度,在发送端增加类似于 TCP 拥塞窗口机制,动态地调整发送窗口,能够灵敏地感知到发送方带宽拥塞。

4. 百度在媒体抗弱网的优化方案
图片
弱网包含了丢包、延时、抖动、乱序以及突发等因素,每个因素又区分上下行网络,也会区分推流和拉流方。因此,要求抗弱网覆盖场景十分之多。
如上图所示,我们提取出各类维度上关键路径上的场景,针对每场景验证抗弱网算法是否有效,并且在线上进行 A/B 验证,反复迭代,逐渐得到理想的算法和效果。

5. Wifi+4G同传,抗弱网另辟蹊径的方法
图片
如今,手机/电脑等终端往往可以同时使用 4G 和WiFi 网络。我们采用双网同传技术,持续检测 4G 和 WiFi 的网络质量,在 WiFi 信号较差时及时使用 4G 信号作为补偿,强化音频传输,补充视频传输带宽不足,保证数据传输连续性。

6. 分发与调度——虚拟低延迟分发网
图片
  • 分发与调度环节中,我们试图得到服务器之间的最优分发路径,不断检测部署的云节点、公网的边缘节点之间的连通性,挑选出较优的连接,形成虚拟的低延时中转网络。优先使用事先挑选出的虚拟中转网络的低延迟链路。
  • 为了降低服务器网络波动对实时通信结果的影响,在实际分发时会建立多条冗余备路,随时自动切换,并采用重传、FEC纠错等手段规避分发不稳定性。

以上是老师的全部分享内容,有问题欢迎在评论区提出。

 往期推荐 

🔗

音视频终端引擎优化实践
“智感超清”之HDR技术落地实践

图片

微信扫一扫
关注该公众号