基于延迟的带宽评估

Posted on Fri 18 March 2022 in webrtc

概述

基于延迟的控制的算法主要分为四个部分:

  1. pre-filtering 预先过滤
  2. arrival-time filter 到达时间过滤器
  3. over-use detector 过度使用检测器
  4. rate-control 速率控制器

1. 到达时间模型

两个包发送的间隔 T(i) – T(i-1) 和接收的间隔 t(i) – t(i-1) 在理想情况下是相同的,实际上会有不同. 也就是说包的到达时间并未保持稳定的速度。 在计算的时候可以用以帧分组,对两个组的到达时间进行计算。

  • 发送时间间隔与到达时间间隔之间的延时的观测公式,称为单向延迟变化
\begin{equation*} d(i) = t(i) – t(i-1) – (T(i) – T(i-1)) \end{equation*}

还可将数据包组之间的延迟变化建模为

\begin{equation*} d(i) = w(i) \end{equation*}

这里的 w(i) 是一个随机过程 W 的采样,它是一个连接容量,当前交叉流量和当前比特率的函数,我们将 W 建模为一个白高斯过程。如果我们过度使用了传输通道,则 w(i) 的平均值就会增大,如果网络路径中的拥塞队列已经清空了,这个 w(i) 的平均值就会减小,否则 w(i) 的平均值为零。

由此,我们可以将w(i) 分解为它的平均值加上一个偏差

\begin{equation*} d(i) = m(i) + v(i) \end{equation*}

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\)

\begin{equation*} A_{r}(t_{i})=\cases{\eta A_{r}(t_{i-1}) & ${\rm Increase}$\cr \alpha R(t_{i}) & ${\rm Decrease}$\cr A(t_{i-1}) & ${\rm Hold}$} \end{equation*}

3. 到达时间滤波器 arrival time filter

根据到达时间模型,我们可以通过 Kalman Filter 或者 Trendline Filter 来求得网络排队延迟 m(i)

\begin{equation*} m(i+1) = m(i) + u(i) \end{equation*}
\begin{equation*} q(i) = E{u(i)^2} \end{equation*}
\begin{equation*} d(i) = m(i) + v(i) \end{equation*}

其中

  • 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\) 时触发正常信号。

remote rate controller finite state machine

remote rate controller finite state machine

  • 算法: Over-use Detector pseudo-code 过度使用检测器的伪代码
over-use detector pseudo code

over-use detector pseudo code

5. Rate controller

The rate control is split in two parts,

  1. controlling the bandwidth estimate based on delay
  2. 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