流媒体学习之路(BBR算法应用)——BBR算法简介
——
我正在的github给大家开发一个用于做实验的项目 —— github.com/qw225967/Bifrost
目标:可以让大家熟悉各类Qos能力、带宽估计能力,提供每个环节关键参数调节接口并实现一个json全配置,提供全面的可视化算法观察能力。
欢迎大家使用
——
文章目录
前段时间进行弱网优化相关的工作,因此对BBR算法进行了较为详细的调研在此记录一下。
一、弱网优化简介
目前用户的网络环境相比过去十年已经有了较大的改善。但是针对移动网络以及其他弱网环境,我们仍需想办法让我们的服务做到处变不惊。也就是在任何环境下,都能提供流畅的画面播放(针对音视频传输方面)。
目前常使用的是RTP协议来进行音视频的传输,而这个协议是基于UDP的,因此引入了很多保证网络传输质量的模块。针对音视频传输常用的拥塞控制算法有:webrtc中的transport-cc、quic中的bbr等,这两种算法都是基于延迟进行带宽估计的。而媒体数据传输对实时性有极高的要求,同时需要保证数据的连续性。因此不仅要关注传输过程中丢包的情况,还需要应对延迟增大的问题。
弱网优化这个命题非常大,因为应对弱网的方法是多样的。例如:补包策略(ACK、NACK等)、前向纠错(FEC)、码率自适应等。补包与前向纠错都有各自的优缺点,补包策略是最简单有效的抗弱网方式。

1.1 补包
简单来说就是当网络传输时发送丢包,我们立即通知对方进行补发的一种机制。这种方式将会消耗较多的带宽资源。
1.2 前向纠错
前向纠错的方式则是通过提前封装冗余包来抵抗网络的丢包问题,当对端接收时发生丢包,那么可以根据冗余包的数据进行恢复,实现抗弱网。
1.3 自适应
自适应方法的关键就是对带宽的预估以及对输出码率的调整,除了要对网络状况有一个准确的估计之外,还需要找到一个合适的码率输出值。我们需要进行大量的实验来保证用户体验,需要考虑是牺牲帧率还是牺牲分辨率来降低码率。
事实上,所有抗弱网实践中,我们都不可能依靠某一个方法达到最佳效果,因此大部分厂商在实现时所有场景都会用到。下面,我们聚焦在带宽估计的部分,来分析一下quic中的BBR算法在RTC中的应用。
二、BBR算法
自1980年代,TCP的拥塞控制算法现世到如今,网络环境发生了巨大的变化。原先基于数据损耗的拥塞算法已经无法满足当前的传输控制需求。因此谷歌提出了一种基于带宽瓶颈计算数据往返时间来实现的拥塞控制算法(BBR——Bottleneck Bandwidth and RTT)。该算法通过安全而又直接的带宽检测迅速获得当前链路的带宽值、rtt。同时,一改旧拥塞算法的损耗参考思路,在拥塞发生时BBR算法依然可以插手cwnd的调整,有效解决了硬着陆的问题。
2.1 算法组成
BBR算法的组成其实非常简单,主要由以下五个部分组成:
1.即时速率的计算
带宽计算是整个BBR算法的基准,其中即时带宽统计的方法是具有里程碑意义的。它突破旧算法的信令参考,不再关心数据内涵。化繁为简转而关注数据量本身,无论是SACK、RACK、RTO都不再是其关注的重点,使得整个检测流程变得更直接更高效。
2.RTT的跟踪
RTT与上述的带宽可以有效的描述当前链路的最大容量。BBR算法探测的是RTT的最小值,它无时无刻都在尝试达到这个链路的最大容量,因此展现出了极高的带宽利用率。
3.BBR pipe状态机的维持
BBR算法根据互联网的拥塞行为有针对性地定义了4中状态,即STARTUP,DRAIN,PROBE_BW,PROBE_RTT。BBR通过对上述计算的即时

本文详细介绍了BBR算法在流媒体传输中的应用,特别是在RTC场景中的弱网优化。BBR通过即时带宽估算和状态机控制实现高效带宽利用和低延迟。在RTC的音视频混合场景中,BBR的带宽抢占能力和准确反馈有助于提升下行网络的稳定性。作者分享了实现中对BBR算法的适配策略,包括ACK策略、丢包补偿和发送数据策略,以应对不同网络条件下的传输挑战。
最低0.47元/天 解锁文章
1667

被折叠的 条评论
为什么被折叠?



