首页 > WebRTC > WebRTC研究:AlrDetector
2019
11-04

WebRTC研究:AlrDetector

在WebRTC GCC(Google Congestion Control)中,有一个叫做AlrDetector(Application limited region detector)的模块。该模块利用某段时间值,以及这段时间发送的字节数判断当前输出网络流量是否受限。这些限制主要跟应用程序本身输出网络流量的能力有关,例如编码器性能,不能编码出设置的目标码率。下面举个简单例子说明下。

假设我们经过带宽预测后,获取到一个目标码流target_bitrate_bps,此时我们程序需要按照该码率大小进行数据发送,但是一切都不是那么完美,例如编码器。编码器由于各种问题,编码出的数据码率低于target_bitrate_bps,使得数据发送码率低于要求,带宽利用率不足,发送码率占最大预算码率值比例低于某个值的话Alr(Application limited region)就会被触发了,恢复到某个值以上,Alr会停止。

下面说下AlrDetector的工作流程。
1)首先是在构造函数初始化相关参数配置,相关参数如下:

IntervalBudget::can_build_up_underuse_初始化为trueIntervalBudget根据输入的评估码率,计算当前还能发送多少数据。

2)设置带宽预测得到的码率:

3)发送数据时调用:

通过IntervalBudget::budget_ratiostart_budget_level_ratio以及stop_budget_level_ratio对比,设置AlrDetector的状态。

IntervalBudget::budget_ratio表示剩余要发送的数据占最大预算发送数据max_bytes_in_budget_的比例,定义如下:

max_bytes_in_budget_按500ms时间窗口计算得到:

可知如果IntervalBudget::budget_ratio大于start_budget_level_ratio,即剩余数据还有很多,发送码率低了,带宽没充分利用,Alr触发了,小于stop_budget_level_ratio时,alr_started_time_ms_重置,Alr停止。

4)通过获取AlrDetector::alr_started_time_ms_判断当前Alr是否触发,调用函数如下:

最后编辑:
作者:Jeff
Avatar
管理员——代码为剑,如痴如醉

留下一个回复

你的email不会被公开。

This site uses Akismet to reduce spam. Learn how your comment data is processed.