当前位置: 首页 > news >正文

webrtc QOS-RemoteBitrateEstimator接收端带宽估计(1)

RemoteBitrateEstimator为webrtc的接收端带宽估计基类,它的主要职责是通过分析接收到的 RTP 数据包的到达时间、大小和序列号,估算当前网络下行链路的可用带宽,并将该估算值通过 RTCP 反馈包(REMB)发送给发送端,以便发送端调整视频码率。

RemoteBitrateEstimator是 WebRTC 接收端拥塞控制的大脑。它不直接发送数据,而是通过“监听” incoming 数据包的特征,推断网络的承载能力,并间接指导发送端“应该发多快”。它是实现自适应码率(Adaptive Bitrate)的关键组件之一,确保在网络波动时视频通话既能保持流畅又不造成严重拥塞。
注意:在现代 WebRTC 版本中,基于 REMB 的估计器正逐渐被基于 TWCC (Transport Feedback) 的发送端带宽估计(SendSideBandwidthEstimation)所取代或补充,因为后者能提供更精确的逐包延迟信息。但在许多兼容场景和音频流中,REMB 仍然在使用。

有四个派生类(WrappingBitrateEstimator,RemoteBitrateEstimatorAbsSendTime,RemoteBitrateEstimatorSingleStream和RemoteEstimatorProxy):

一, 继承关系

class RemoteBitrateEstimator : public CallStatsObserver, public Module {

1.1 继承自 Module:

• 这意味着它是一个周期性运行的模块。WebRTC 的主循环会定期调用其 Process() 方法(虽然在这个头文件中未显示,但这是 Module 接口的要求),用于执行超时检查、状态清理或定期计算。
• kProcessIntervalMs = 500: 建议的处理间隔为 500 毫秒。

1.2 继承自 CallStatsObserver:

它可以接收来自底层的统计信息或回调(如 RTT 更新等),尽管在这个特定接口中主要体现为对数据包的处理。

二、主要函数接口

2.1 IncomingPacket(...)

这是最核心的输入接口。每收到一个 RTP 包,上层(通常是 RtpVideoStreamReceiver 或 AudioReceiveStream)都会调用此方法。
• 参数:
1. arrival_time_ms: 包到达接收端的系统时间戳。这是计算**到达时间间隔(Inter-arrival Time)**的关键,用于检测网络抖动和拥塞。
2. payload_size: 有效载荷大小(不含头部)。用于计算比特率。
3. header: RTP 头部,包含 SSRC、序列号、时间戳等信息。
• 内部逻辑:
1. 记录数据: 将包的到达时间和大小存入内部缓冲区或滑动窗口。
2. 过用检测 (Over-use Detection): 这是带宽估计的核心算法(如 Google Congestion Control, GCC 的一部分)。它会分析到达时间的趋势。如果包到达的间隔逐渐变大(即延迟增加),说明网络队列在堆积,发生了“过用”(Over-use)。
3. 更新估计: 如果检测到过用,算法会降低带宽估计值;如果检测到空闲(Under-use),则可能增加估计值。

2.2 LatestEstimate(...)

供上层查询当前的带宽估算结果。
• 输出:
1. bitrate_bps: 估算出的可用带宽(bits per second)。
2. ssrcs: 参与此次估算的所有流的 SSRC 列表。因为 REMB 通常是对一组流(例如同一个 PeerConnection 下的所有视频流)进行联合估计。
• 返回值:

true 表示存在有效的估算值,false 表示尚未收集足够的数据或估算无效。

2.3 RemoveStream(uint32_t ssrc)

当某个媒体流停止接收(例如用户关闭了摄像头或离开了会议)时调用。
• 作用: 清理该 SSRC 相关的历史数据,防止旧数据干扰后续的带宽估算。
• 超时机制: kStreamTimeOutMs = 2000。如果一个流在 2 秒内没有新数据包,也可能被内部自动移除。


2.4 SetMinBitrate(int min_bitrate_bps)

设置估算带宽的下限。
• 作用: 即使网络状况极差,估算器也不会返回低于此值的带宽。这保证了视频流不会完全停止发送,至少维持一个最低的可观质量(或黑屏保活)。

三 协作类

3.1 RemoteBitrateObserver:


• 这是一个回调接口。当 RemoteBitrateEstimator 计算出新的带宽估计值时,它会通过 OnReceiveBitrateChanged 通知观察者。
• 观察者通常是 Call 类或传输控制器,它们负责根据这个新带宽值生成 RTCP REMB 包并发送出去。


3.2 TransportFeedbackSenderInterface:

• 虽然在这个头文件中定义,但它更多与现代的 TWCC (Transport-wide Congestion Control) 相关。传统的 REMB 估算器可能不直接使用它,但现代的带宽估计架构可能会结合两者。

四 工作原理简述 (GCC 算法背景)

RemoteBitrateEstimator是一个抽象类,但其典型实现(如 RemoteBitrateEstimatorSingleStream 或 InterArrival 基于的实现)通常遵循以下逻辑:
1. 到达时间滤波器: 使用卡尔曼滤波或其他算法平滑包的到达时间,消除噪声。
2. 延迟梯度计算: 计算连续包之间的到达时间差与发送时间差的偏差。
3. 状态机:
• Normal: 网络正常,带宽估计保持不变或缓慢增加。
• Overusing: 检测到延迟持续增加,判定网络拥塞,大幅降低带宽估计。
• Underusing: 检测到延迟减小或空闲,尝试线性增加带宽估计以探测可用容量。

http://www.jsqmd.com/news/994808/

相关文章:

  • Windows下Qt主程序同时调用MFC和Qt两类DLL的实操工程包
  • 智慧树刷课插件终极指南:5分钟实现自动化学习,彻底解放你的时间
  • Mimics-医学影像三维重建入门指南
  • 当ZYNQ的MDIO接口不够用?手把手教你用GPIO模拟管理多个PHY芯片(附完整C代码)
  • RTranslator离线翻译终极指南:5分钟快速部署,开启跨语言实时对话
  • 如何高效使用MTKClient:专业开发者联发科设备修复实战指南
  • 别再问“这游戏啥引擎做的”了,手把手教你用SteamDB一键查询(附实战案例)
  • 思维导图学软考:框架记忆为什么比死记硬背高效
  • 动态激励合约设计:通证经济的未来之路
  • 5个超实用技巧:解锁洛雪音乐桌面的跨平台音乐聚合体验
  • 2026泉州市民优选 5 家水质检测服务机构 饮用水污水废水检测实地走访测评整理 - 中安检测集团
  • OL2300 FSK发射器配置实战:从SPI寄存器到射频信号全解析
  • 从零实现Group Query Attention (GQA):原理剖析与PyTorch实战
  • 2026朔州市民优选 5 家水质检测服务机构 饮用水污水废水检测实地走访测评整理 - 中安检测集团
  • 2026上海本地土壤检测农田土壤检测哪家强?TOP 正规机构榜单 + 联系方式 - 鉴安检测
  • 如何快速构建企业级设计系统?这200+顶尖案例给你完整答案
  • 2026太原窗帘公司推荐榜:资质靠谱品牌汇总 - 速递信息
  • Nginx配置文件详解【20260611】002篇
  • 用Python+Matplotlib手把手教你画标准差椭圆:从协方差矩阵到可视化实战
  • 别再只用单色了!ECharts 5.4 饼图渐变配色实战:从调色板到自定义函数
  • 动态策略引擎:D3keyHelper如何彻底解放暗黑3玩家的双手
  • 微信聊天记录备份技术深度解析:从数据加密到本地备份的完整方案
  • 2026泰安市民优选 5 家水质检测服务机构 饮用水污水废水检测实地走访测评整理 - 中安检测集团
  • GR3六轴协作机械臂 本文档提供了机器人控制系统的底层参数配置与核心算法实现,包含18项关键技术细节:1)电流环PI自适应整定源码及触发条件;2)主轴共振抑制陷波参数;3)双闭环位置前馈控制参数;4)
  • 2026黔南电能质量评估权威机构排行 TOP 谐波检测 + 电压波动 + 能效测评 附电话地址 - 中检检测集团
  • GR3-Fourier V9.3 工业级未公开底层机密密本文展示了多个嵌入式系统底层硬件驱动和配置参数表的技术实现:1. 矢量角度锁相环的汇编级实现,包含角度平滑算法;2. 电源管理IC的寄存器读写操
  • 不要做外挂,做出来你也卖不掉
  • 2026成都苹果手机维修机构选择白皮书:技术维度与安全标准指南
  • Duix.Avatar:普通人如何用10秒视频创建专属AI数字人?完整实战指南
  • 如何快速免费下载iOS应用?终极命令行工具ipatool全指南