WebRTC中Pacing等模块需要按照指定的码率发送报文,保证码率稳定,会用到IntervalBudget
这个类,这个类是控制码率平稳的核心。本篇将介绍IntervalBudget
这个类。
1. ✨IntervalBudget原理
IntervalBudget
顾名思义,就是一段时间内的发送码率预算。 IntervalBudget
根据时间流逝增加budget,报文发送后减少budget,每次发送报文前判断剩余budget是否足够,如果不足则取消本次发送。
举个例子 :
- 当前目标码率设置为1000kbps,剩余预算100bytes。
- 距离上次更新相隔50ms,那么budget就多了
1000kbps*50/8=600bytes
, 剩余100+600=700bytes
; - 如果当前发送一个1000bytes的报文,先判断是否有剩余budget,当前700bytes肯定有剩余,因此可以发送,并减少budget,剩余
700-1000=-300bytes
。
IntervalBudget
这个类比较小,因此这里直接贴上其声明:
class IntervalBudget {
public:
explicit IntervalBudget(int initial_target_rate_kbps);
IntervalBudget(int initial_target_rate_kbps, bool can_build_up_underuse);
// 设置目标发送码率