当前位置: 代码迷 >> 综合 >> H264/AVC 句法
  详细解决方案

H264/AVC 句法

热度:45   发布时间:2023-12-21 07:16:39.0

在编码器输出的码流中,数据的基本单位是句法元素,每个句法元素由若干比特构成,它表示某个特定的物理意义,例如:宏块类型、量化参数等。句法表示句法元素的组织结构。


句法元素的分层结构

码流是由一个个句法元素依次衔接组成的,码流中除了句法元素并不存在专门用于控制或同步的内容。264中,句法元素被组织成有层次地结构,分别描述各个层次的信息,如下所示:

264中,句法元素共被组织成序列、图像、片、宏块、子宏块五个层次。句法元素的分层结构有助于节省码流(例如将不同片的公共信息抽取出来,形成图像一级的句法元素,在片级仅携带该片自身独有的句法元素。)

264的分层结构相比于之前的标准有所改进,主要是优化了传输中的错误掩藏,在有误码发生时可以提高图像重建的性能。在以往的标准中,分层的组织结构如下所示,他们类似TCP/IP协议的结构,每一层都有头部,然后在每层的数据部分包含该层的数据。

上面这种结构中,每一层的头和数据形成了管理与被管理的强依赖关系,头部的句法元素是该层数据的核心,一旦头部丢失,数据部分的信息几乎不可能再被正确解码出来。尤其在序列层及图像层。

264中,分层结构最大的不同是取消了序列层和图像层,将原本属于序列和图像头部的大部分句法元素游离出来形成序列和图像两级参数集,其余的部分则放入片层。参数集是一个独立的数据单位,不依赖于参数集外的其他句法元素。此外,同一个序列参数集可以被多个序列中的图像参数集引用;同一个图像参数集可以被多个图像引用。在参数集内容需要更新时,才会发送新的参数集。这样依赖,参数集可以被多次重发或者采用特殊技术加以保护。

264还建议,使用不同的信道传输参数集和参数集外部的句法元素。即使用更安全的、成本更高的通道来传输参数集,使用成本低的信息传输其他句法元素,只需要保证片层中的某个句法元素需要引用某个参数集时,那个参数集已经到达解码器,也就是参数集在时间上必须先被传送。

由于取消了图像层,对于传输的每个片,都要指明需要引用的参数集的编号、图像的编号等基本信息。这虽然降低了编码效率,但能使得通信的鲁棒性大大增强。

总体来看,264句法的分层结构是这样子的:

网络抽象层(NAL)由一系列NAL单元组成;序列参数集(SPS)和图像参数集(PPS)是NAL单元,它们向解码器发送某些公共控制参数的信号;编码视频数据在视频编码层(VCL) NAL单元中进行传输,称为编码片;在片层,每个片由一个片头和片数据组成;片数据是一系列被编码的宏块(MB)和跳过宏块指示符(Skip indication),表示某些宏块位置不包含数据;宏块又包含类型、预测信息、已编码块图案CBP(指明哪些亮度和色度块包含非零残差系数)、量化参数、残差数据。


句法的表示方法

264中,句法元素的名称是由小写字母和一系列的下划线组成,而变量名称是大小写字母组成,中间没有下划线。例如:pic_width_in_mbs_minus1是句法元素,表征图像的宽度,以宏块为单位。PicWidthInSamplesL表示图像的亮度分量的宽,以像素为单位。

264中定义了以下几种描述子,用于从比特流中提取句法元素:

264中使用的句法表如下所示(以宏块层句法为例),C字段表示该句法元素的分类(这为片分区服务);Descriptor指定对应句法元素的描述子。