跳到主要内容

8.4. Parameter Set Considerations (参数集考量)

8.4. Parameter Set Considerations (参数集考量)​

H.264 参数集 (parameter sets) 是视频编解码器的基本组成部分, 对其运行至关重要 (见第 1.2 节). 鉴于其特性及其对解码过程的重要性, 丢失或错误传送的参数集很难在接收端就地掩盖. 引用损坏的参数集通常会对解码过程造成致命后果. 损坏可能源于参数集 NAL 单元的错误传输或丢失, 也可能源于参数集更新的时机不当. 参数集更新指在图像参数集或序列参数集标识符保持不变的情况下, 改变了图像参数集或序列参数集中至少一个参数. 因此, 下列建议作为 RTP 发送方实现者的指南.

参数集 NALU 可通过三种不同原则传送:

A. 在实际 RTP 会话之前, 通过会话控制协议 (带外).

B. 在 RTP 会话进行期间, 通过会话控制协议 (带外).

C. 在 RTP 会话进行期间, 在 RTP 分组流的有效载荷内 (带内).

建议在会话控制协议内实现原则 A 与 B. 可按 SDP Offer/Answer 模型及本文前述章节所述方式使用 SIP 与 SDP. 第 8.2.2 节详细讨论了在 SDP Offer/Answer 中借助媒体类型参数 sprop-parameter-sets, sprop-level-parameter-sets, use-level-src-parameter-sets 与 in-band-parameter-sets 进行参数集带内或带外传送的规则. 本节给出原则 A 与 B 在会话控制协议内应如何实现的指南, 与具体协议无关. 本规范定义的 RTP 载荷格式支持原则 C. 在诸如 Topo-Video-switch-MCU [29] 等拓扑中, 采用原则 C 可能更为合适.

若使用参数集的带内信令, 图像与序列参数集 NALU 应使用可靠的 RTP 投递方式在 RTP 载荷中传送 (见下文), 因为任一类参数集的丢失都很可能使相应 RTP 分组流的大部分无法解码.

若使用参数集的带内信令, 发送方应考虑差错特性, 并采用机制以提高参数集被正确接收的概率. 提高正确接收概率的机制包括分组重复, FEC 与重传. 使用不可靠的带外控制协议具有与带内信令类似的缺点 (可能丢失), 还可能带来同步困难 (见下文). 因此不建议采用.

在会话生存期内, 可使用原则 B 与 C 添加或更新参数集. 要求在被引用的 NAL 单元之前, 解码器已具备相应参数集. 更新或添加参数集可能引发更多问题, 因此应考虑下列建议.

  • 添加或更新参数集时, 应谨慎确保任一参数集在使用之前已送达. 添加新参数集时, 使用此前未使用的参数集标识符. 带外信令与带内业务之间常常没有同步. 若使用带外信令, 建议发送方在信令协议确认投递完成之前, 不要开始发送需要新增或更新参数集的 NALU.

  • 更新参数集时, 应考虑下列同步问题. 在接收端覆盖某一参数集时, 发送方必须确保网络或接收端缓存中的任何 NALU 都不再需要该参数集. 否则可能用错误的参数集解码. 为减轻该问题, 建议要么仅覆盖长时间未使用的参数集 (以确保相关 NALU 均已消费), 要么改为添加新参数集 (可能对视频编码效率产生不利影响).

资料性说明: 在 Topo-Video-switch-MCU [29] 等部分拓扑中, 整组参数集可能来自多个源, 各源可能使用非唯一的参数集标识符. 此时, 若带外信道没有其他机制保证参数集唯一性, 报价 (offer) 可能覆盖既有参数集.

  • 在多方会话中, 只要可能, 参与者必须将来自不同源的参数集与源标识关联, 例如通过带外传送的参数集, 因为不同源通常使用独立的参数集标识符取值空间.

  • 在同一会话中同时使用原则 B 与 C 添加或修改参数集, 可能因控制信道与 RTP 信道缺乏同步而导致参数集不一致. 因此, 除非能够提供充分同步, 否则不得在同一会话中同时使用原则 B 与 C.

在某些场景 (例如仅使用与本载荷格式规范中 H.241 对应子集时) 或拓扑中, 无法采用带外参数集传送. 此时参数集必须带内传送. 此时与非参数集数据的同步是隐含的, 但必须考虑丢失可能.

应使用上文讨论的机制降低丢失概率. 若检测到参数集丢失, 可通过解码器刷新点规程恢复, 例如使用 RTCP 反馈 Full Intra Request (FIR) [30]. 资料性第 8.5 节给出两个解码器刷新点规程示例.

  • 若最初用原则 A 提供参数集, 随后又在带内 (原则 C) 添加或更新, 则更新带外传送的参数集存在风险. 若接收方错过部分带内更新 (例如因丢失或较晚加入), 这些接收方会尝试用过期参数解码码流. 因此建议在带外与带内参数集之间划分参数集 ID.