跳到主要内容

1. Introduction (简介)

1. Introduction (简介)

本备忘录为被称为ITU-T建议H.264 [1] 和ISO/IEC国际标准14496-10 [2] 的视频编码标准 (两者也被称为高级视频编码 (Advanced Video Coding, AVC)) 指定了RTP负载规范。在本备忘录中, 名称H.264用于指代编解码器和标准, 但本备忘录同样适用于编码标准的ISO/IEC对应版本。

本备忘录废止RFC 3984。RFC 3984的变更总结在第14节。与RFC 3984的向后兼容性问题在第15节讨论。

1.1. The H.264 Codec (H.264编解码器)

H.264视频编解码器具有非常广泛的应用范围, 涵盖所有形式的数字压缩视频, 从低比特率互联网流媒体应用到HDTV广播和几乎无损编码的数字电影应用。与当前的技术水平相比, H.264的整体性能可实现50%或更多的比特率节省。例如, 数字卫星电视质量据报道可在1.5 Mbit/s下实现, 而当前MPEG 2视频的运行点约为3.5 Mbit/s [10]。

编解码器规范 [1] 本身在概念上区分了视频编码层 (Video Coding Layer, VCL) 和网络抽象层 (Network Abstraction Layer, NAL)。VCL包含编解码器的信号处理功能, 如变换、量化和运动补偿预测等机制, 以及环路滤波器。它遵循当今大多数视频编解码器的一般概念, 即基于宏块的编码器, 使用帧间预测与运动补偿以及残差信号的变换编码。VCL编码器输出片 (slices): 一个包含整数个宏块的宏块数据和片头信息 (包含片中第一个宏块的空间地址、初始量化参数和类似信息) 的比特串。片中的宏块按扫描顺序排列, 除非使用片组的语法指定了不同的宏块分配。帧内预测仅在片内使用。更多信息参见 [10]。

NAL编码器将VCL编码器的片输出封装到网络抽象层单元 (Network Abstraction Layer Units, NALUs) 中, 这些单元适合在分组网络上传输或用于面向分组的复用环境。H.264的附录B定义了一个封装过程, 用于通过面向字节流的网络传输此类NALUs。在本备忘录的范围内, 附录B不相关。

在内部, NAL使用NAL单元。NAL单元由一个单字节头部和负载字节串组成。头部指示NAL单元的类型、NAL单元负载中 (潜在的) 比特错误或语法违规的存在, 以及有关NAL单元对解码过程的相对重要性的信息。此RTP负载规范设计为不感知NAL单元负载中的比特串。

H.264的主要特性之一是完全解耦片和图片的传输时间、解码时间以及采样或呈现时间。H.264中指定的解码过程不感知时间, H.264语法不携带诸如跳过帧数 (这在早期视频压缩标准中以时间参考的形式很常见) 之类的信息。此外, 存在影响许多图片的NAL单元, 因此本质上是无时间的。因此, 对于采样或呈现时间未定义或在传输时未知的NAL单元, RTP时间戳的处理需要一些特殊考虑。

1.2. Parameter Set Concept (参数集概念)

H.264的一个非常基本的设计概念是生成自包含的数据包, 使得RFC 4629 [11] 的头部复制或MPEG-4 Visual的头部扩展码 (Header Extension Code, HEC) [12] 等机制变得不必要。这是通过将与多个片相关的信息与媒体流解耦来实现的。这种更高层的元信息应该可靠地、异步地、提前于包含片数据包的RTP数据包流发送。(对于没有适合此目的的带外传输通道的应用, 也提供了带内发送此信息的规定。) 更高级别参数的组合称为参数集。H.264规范包括两种类型的参数集: 序列参数集和图片参数集。活动序列参数集在整个编码视频序列中保持不变, 活动图片参数集在编码图片内保持不变。序列和图片参数集结构包含诸如图片大小、采用的可选编码模式以及宏块到片组映射等信息。

为了能够更改图片参数 (例如图片大小) 而无需同步地向片数据包流传输参数集更新, 编码器和解码器可以维护多个序列和图片参数集的列表。每个片头包含一个码字, 指示要使用的序列和图片参数集。

这种机制允许将参数集的传输与数据包流解耦, 并通过外部方式 (例如, 作为能力交换的副作用) 或通过 (可靠或不可靠的) 控制协议传输它们。甚至可能它们从未被传输, 而是由应用设计规范固定。

1.3. Network Abstraction Layer Unit Types (网络抽象层单元类型)

有关NAL设计的教程信息可以在 [13]、[14] 和 [15] 中找到。

所有NAL单元由单个NAL单元类型八位字节组成, 该八位字节也作为此RTP负载格式的负载头部。NAL单元负载的描述如下。

NAL单元类型八位字节的语法和语义在 [1] 中指定, 但NAL单元类型八位字节的基本属性总结如下。NAL单元类型八位字节具有以下格式:

   +---------------+
|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+
|F|NRI| Type |
+---------------+

NAL单元类型八位字节的组成部分的语义, 如H.264规范中所指定, 简要描述如下。

F: 1比特 forbidden_zero_bit。H.264规范将值1声明为语法违规。

NRI: 2比特 nal_ref_idc。值00表示NAL单元的内容不用于重建用于帧间预测的参考图片。这样的NAL单元可以在不影响参考图片完整性的情况下被丢弃。大于00的值表示需要解码NAL单元才能维持参考图片的完整性。

Type: 5比特 nal_unit_type。此组件指定NAL单元负载类型, 如 [1] 的表7-1以及本备忘录稍后部分所定义。有关所有当前定义的NAL单元类型及其语义的参考, 请参阅 [1] 的7.4.1节。

本备忘录引入了新的NAL单元类型, 这些类型在第5.2节中介绍。本备忘录中定义的NAL单元类型在 [1] 中被标记为未指定。此外, 本规范扩展了F和NRI的语义, 如第5.3节所述。