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 值.