WebRTC服务质量(11)- Pacer机制(03) IntervalBudget

WebRTC服务质量(01)- Qos概述
WebRTC服务质量(02)- RTP协议
WebRTC服务质量(03)- RTCP协议
WebRTC服务质量(04)- 重传机制(01) RTX NACK概述
WebRTC服务质量(05)- 重传机制(02) NACK判断丢包
WebRTC服务质量(06)- 重传机制(03) NACK找到真正的丢包
WebRTC服务质量(07)- 重传机制(04) 接收NACK消息
WebRTC服务质量(08)- 重传机制(05) RTX机制
WebRTC服务质量(09)- Pacer机制(01) 流程概述
WebRTC服务质量(10)- Pacer机制(02) RoundRobinPacketQueue
WebRTC服务质量(11)- Pacer机制(03) IntervalBudget
WebRTC服务质量(12)- Pacer机制(04) 向Pacer中插入数据

一、前言:

先想想,我们其实已经有了目标码率了,为什么还要控制码率?

因为,我们获取的目标码率是以秒为单位的,比如每秒钟发送300k,这是我们通过webrtc的网络拥塞控制可以获得的。 但是,具体到每个时间分片,我们前面看了pacer是5ms作为一个时间分片,IntervalBudget就是控制每个时间分片内应该发送的数据大小。

二、概念:

IntervalBudget 是 WebRTC 中的一个数据流速率控制工具,目的是在固定时间间隔内,根据目标码率动态管理和分配可以发送的字节数(预算字节)。它类似一个预算系统,平衡上一时间间隔的欠载(underuse)和过载(overuse)情况,确保整体码率维持在目标值,同时允许一定程度的积累和补偿。

详细分主要作用是:

  1. 维持目标码率(target_rate_kbps 根据目标速率(如 300 kbps),动态调整每段时间的字节发送目标。
  2. 处理过载和欠载 若某次时间片中没有充分利用发送预算,是否允许将未用的预算累积到后续时间片(由 can_build_up_underuse 决定)。
  3. 预算限制 限制过载和欠载的值,最高不能超过特定的预算范围(max_bytes_in_budget_)。
  4. 字节消耗管理 随着数据发送,会减少预算,维持运行中实时的发送和控制。

三、类定义:

class IntervalBudget {
   
 public:
  explicit IntervalBudget(int initial_target_rate_kbps);
  IntervalBudget(int initial_target_rate_kbps, bool can_build_up_underuse);
  // 用于设置目标码率
  void set_target_rate_kbps(int target_rate_kbps);

  // TODO(tschumim): Unify IncreaseBudget and UseBudget to one function.
  // 用于计算我们这个时间分片,有多少数据可以发送
  void IncreaseBudget(int64_t delta_time_ms);
  void UseBudget(size_t bytes);

  size_t bytes_remaining() const;
  double budget_ratio() const;
  int target_rate_kbps() const;

 private:
  // 通过带宽评估算法评估出的目标码率(也就是1s内发送多少数据&#x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值