跳到主要内容

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