当前位置: 首页 > 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.rkmt.cn/news/1506573.html

相关文章:

  • Mimics-医学影像三维重建入门指南
  • 2026上海本地土壤检测农田土壤检测哪家强?TOP 正规机构榜单 + 联系方式 - 鉴安检测
  • 2026朔州市民优选 5 家水质检测服务机构 饮用水污水废水检测实地走访测评整理 - 中安检测集团
  • 如何快速构建企业级设计系统?这200+顶尖案例给你完整答案
  • 用Python+Matplotlib手把手教你画标准差椭圆:从协方差矩阵到可视化实战
  • 别再只用单色了!ECharts 5.4 饼图渐变配色实战:从调色板到自定义函数
  • 2026黔南电能质量评估权威机构排行 TOP 谐波检测 + 电压波动 + 能效测评 附电话地址 - 中检检测集团
  • GR3-Fourier V9.3 工业级未公开底层机密密本文展示了多个嵌入式系统底层硬件驱动和配置参数表的技术实现:1. 矢量角度锁相环的汇编级实现,包含角度平滑算法;2. 电源管理IC的寄存器读写操
  • 2026成都苹果手机维修机构选择白皮书:技术维度与安全标准指南
  • 不要做外挂,做出来你也卖不掉
  • 告别手动建模!用Python脚本5分钟搞定Gmsh复杂几何网格生成
  • 2026齐齐哈尔企业业主高频选择的 5 家危房检测房屋结构安全鉴定机构实地测评整理 - 科信检测
  • 如何快速免费下载iOS应用?终极命令行工具ipatool全指南
  • 5个步骤轻松实现PC版微信QQ防撤回:告别“对方已撤回一条消息“的终极指南
  • 2026绍兴市民优选 5 家水质检测服务机构 饮用水污水废水检测实地走访测评整理 - 中安检测集团
  • 2026日照电能质量评估权威机构排行 TOP 谐波检测 + 电压波动 + 能效测评 附电话地址 - 中检检测集团
  • 计算机毕业设计之基于协同过滤个性化学习纪录片推荐平台
  • 汽车冲压钢铝混线解决方案:9000T+1600S双料检测国产替代落地案例
  • 植筋胶厂家哪家好?工程采购3个避坑要点与推荐 - 速递信息
  • 三步打造专业级音乐播放器:foobox美化方案全面指南
  • 2026宿迁市民优选 5 家水质检测服务机构 饮用水污水废水检测实地走访测评整理 - 中安检测集团
  • 传统模型评测遇挑战,推理预算应成人工智能评测核心参数!
  • 混合检索实战:融合全文搜索与向量排序
  • 2026香港公屋全屋定制哪家经验多?业内人掏心窝测评:弄懂这三大底层逻辑,不花一分冤枉钱
  • Windows音频切换神器:AudioSwitch让你告别繁琐的系统设置
  • 显卡驱动清理终极指南:3步解决90%显卡问题
  • 告别闭集限制:手把手教你用OVSeg和Mask-adapted CLIP实现开放词汇图像分割
  • 从Halcon的.om3文件到C#窗体:一步步教你用ActiViz.NET显示三维点云(避坑VS版本与位数问题)
  • 京东物流200公斤跨省多少钱?教你省下一半运费 - 快递物流资讯
  • 计算机毕业设计之基于协同过滤算法的短视频推荐系统