基于延迟的带宽评估
Posted on Fri 18 March 2022 in webrtc
概述
基于延迟的控制的算法主要分为四个部分:
- pre-filtering 预先过滤
- arrival-time filter 到达时间过滤器
- over-use detector 过度使用检测器
- rate-control 速率控制器
1. 到达时间模型
两个包发送的间隔 T(i) – T(i-1) 和接收的间隔 t(i) – t(i-1) 在理想情况下是相同的,实际上会有不同. 也就是说包的到达时间并未保持稳定的速度。 在计算的时候可以用以帧分组,对两个组的到达时间进行计算。
- 发送时间间隔与到达时间间隔之间的延时的观测公式,称为单向延迟变化
还可将数据包组之间的延迟变化建模为
这里的 w(i) 是一个随机过程 W 的采样,它是一个连接容量,当前交叉流量和当前比特率的函数,我们将 W 建模为一个白高斯过程。如果我们过度使用了传输通道,则 w(i) 的平均值就会增大,如果网络路径中的拥塞队列已经清空了,这个 w(i) 的平均值就会减小,否则 w(i) 的平均值为零。
由此,我们可以将w(i) 分解为它的平均值加上一个偏差
v(i) 表示网络抖动和其他没有被这个模型捕捉到的延迟
2. Pre-filtering 预先过滤
预滤波旨在处理由信道中断引起的延迟瞬变。 在中断期间,由于与拥塞无关的原因,在网络缓冲区中排队的数据包会在中断结束时突发传送。
预过滤将突发到达的数据包组合并在一起。 如果满足以下两个条件之一,则数据包将合并到同一组中:
- 在一个 burst_time 间隔内发送的数据包序列构成一个组。
- 具有小于 burst_time 的到达间隔时间和小于0 的组间延迟变化d(i) 的数据包被认为是当前数据包组的一部分。
在 RTCP Sender Report 中有成对的 NTP timstamp 和 RTP timestamp, 这样就可以把 RTP 包中的 timestamp 转换为 NTP timstamp。 但是这个是与媒体采集和回放相关的时间戳,并不是包发送的时间,我们需要把发送时间通过 RTP 包头的扩展 abs_send_time 发到接收方去。
接收端控制器是一种基于延迟的拥塞控制算法,通过下面的公式来计算 \(A_r\)
3. 到达时间滤波器 arrival time filter
根据到达时间模型,我们可以通过 Kalman Filter 或者 Trendline Filter 来求得网络排队延迟 m(i)
其中
- q(i) 为状态噪声 u(i) 方差的期望,推荐值是 10^-3
- u(i) 是指状态噪声, 把它建模为具有零均值和方差的高斯统计模拟的平稳过程
- v(i) 是指测量噪声,它是具有方差 var_v = E{v(i)^2} 的零均值高斯白测量噪声
注:
- 中心化(又叫零均值化):是指变量減去它的均值。其实就是一个平移的过程,平移后所有数据的中心是(0,0)
- 标准化(又叫归一化): 是指數值減去均值,再除以标准差。
GCC v1 中使用卡尔曼滤波器递归地更新这个估计值 m_hat(i), 在 GCC v2 中则以 Trendline Filter 使用最小二乘法以线性回归来估计
z(i) = d(i) - m_hat(i-1)
m_hat(i) = m_hat(i-1) + z(i) * k(i)
e(i-1) + q(i)
k(i) = ----------------------------------------
var_v_hat(i) + (e(i-1) + q(i))
e(i) = (1 - k(i)) * (e(i-1) + q(i))
var_v_hat(i) = max(alpha * var_v_hat(i-1) + (1-alpha) * z(i)^2, 1)
alpha = (1-chi)^(30/(1000 * f_max))
4. 过度使用检测器 The over-use detector
每次接收到视频帧 \(t_i\) 时,过度使用检测器都会产生一个信号 s,该信号基于排队延迟 \(m(t_i)\) 和阈值 \(\gamma\) 来驱动 FSM (下面的有限状态机) 的状态 \(\sigma\),算法 1 详细显示了 s 是如何生成的 :
当 \(m(t_i) > \gamma\) 时,算法通过增加帧间隔时间 \(\Delta T\) 的变量 \(t_{OU}\) 来跟踪在这种情况下花费的时间。 当 \(t_{OU}\) 达到 \(\bar{t}_{OU}=100ms\) 且 \(m(t_i) > m(t_{i-1})`\) 时,产生过度使用信号。
另一方面,如果 \(m(t_i)\) 减小到 \(\gamma\) 以下,则产生未充分利用信号,而当 \(-\gamma \leq m(t_i) \leq \gamma\) 时触发正常信号。
- 算法: Over-use Detector pseudo-code 过度使用检测器的伪代码
5. Rate controller
The rate control is split in two parts,
- controlling the bandwidth estimate based on delay
- controlling the bandwidth estimate based on loss
- The state transitions (with blank fields meaning "remain in state")
+----+--------+-----------+------------+--------+
| \ State | Hold | Increase |Decrease|
| \ | | | |
| Signal\ | | | |
+--------+----+-----------+------------+--------+
| Over-use | Decrease | Decrease | |
+-------------+-----------+------------+--------+
| Normal | Increase | | Hold |
+-------------+-----------+------------+--------+
| Under-use | | Hold | Hold |
+-------------+-----------+------------+--------+
Parameters settings
+-----------------+-----------------------------------+-------------+
| Parameter | Description | RECOMMENDED |
| | | Value |
+-----------------+-----------------------------------+-------------+
| burst_time | Time limit in milliseconds | 5 ms |
| | between packet bursts which | |
| | identifies a group | |
| q | State noise covariance matrix | q = 10^-3 |
| e(0) | Initial value of the system | e(0) = 0.1 |
| | error covariance | |
| chi | Coefficient used for the | [0.1, |
| | measured noise variance | 0.001] |
| del_var_th(0) | Initial value for the adaptive | 12.5 ms |
| | threshold | |
| overuse_time_th | Time required to trigger an | 10 ms |
| | overuse signal | |
| K_u | Coefficient for the adaptive | 0.01 |
| | threshold | |
| K_d | Coefficient for the adaptive | 0.00018 |
| | threshold | |
| T | Time window for measuring the | [0.5, 1] s |
| | received bitrate | |
| beta | Decrease rate factor | 0.85 |
+-----------------+-----------------------------------+-------------+
Table 1: RECOMMENDED values for delay based controller