跳到主要内容

7.2.2. De-Interleaving Process (去交错过程)

7.2.2. De-Interleaving Process (去交错过程)

接收端存在两种缓冲状态: 初始缓冲 (initial buffering) 与播放中缓冲 (buffering while playing). 初始缓冲在 RTP 会话初始化时发生. 初始缓冲结束后开始解码与播放, 进入播放中缓冲模式.

无论处于何种缓冲状态, 接收端均按如下方式将到达的 NAL 单元按接收顺序存入去交错缓冲. 聚合数据包中的各 NAL 单元分别单独存入去交错缓冲. 为每个 NAL 单元计算并存储 DON (decoding order number, 解码顺序号) 的值.

下文借助以下函数与常数描述接收端操作:

  • 函数 AbsDON 在第 8.1 节规定.

  • 函数 don_diff 在第 5.5 节规定.

  • 常数 N 为可选的 sprop-interleaving-depth 媒体类型参数 (见第 8.1 节) 的值加 1.

初始缓冲持续到以下任一条件满足为止:

  • 去交错缓冲中存在 N 个或以上 VCL NAL 单元 (VCL NAL units).

  • 若出现 sprop-max-don-diff, 且 don_diff(m,n) 大于 sprop-max-don-diff 的值, 其中 n 对应已收 NAL 单元中 AbsDON 最大者, m 对应已收 NAL 单元中 AbsDON 最小者.

  • 初始缓冲持续时间大于或等于可选的 sprop-init-buf-time 媒体类型参数的值.

从去交错缓冲移出的 NAL 单元按如下方式确定:

  • 若去交错缓冲中至少有 N 个 VCL NAL 单元, 则按下文规定的顺序从去交错缓冲移出 NAL 单元并送交解码器, 直至缓冲中仅剩 N-1 个 VCL NAL 单元.

  • 若出现 sprop-max-don-diff, 则将所有满足 don_diff(m,n) 大于 sprop-max-don-diff 的 NAL 单元 m 从去交错缓冲移出并按下文规定的顺序送交解码器. 其中, n 对应去交错缓冲内 NAL 单元中 AbsDON 最大者.

NAL 单元送交解码器的顺序规定如下:

  • 令 PDON 为变量, 在 RTP 会话开始时初始化为 0.

  • 对每个关联有 DON 取值的 NAL 单元, 按下式计算 DON 距离 (DON distance). 若该 NAL 单元的 DON 大于 PDON, 则 DON 距离等于 DON 减 PDON; 否则 DON 距离等于 65535 减 PDON 加 DON 再加 1.

  • NAL 单元按 DON 距离升序送交解码器. 若多个 NAL 单元的 DON 距离相同, 可以按任意顺序送交解码器.

  • 当已有期望数量的 NAL 单元送交解码器后, 将 PDON 设为最后送交解码器的那个 NAL 单元的 DON 值.