H264的句法和语义(一)

来源:互联网 发布:xampp linux 编辑:程序博客网 时间:2024/05/19 17:52

1. 句法

在编码器输出的码流中,数据的基本单元句法元素,每个句法元素由若干比特组成,它表示某个特定的物理意义,例如:宏块类型、量化参数等。句法表征句法元素的组织结构,语义阐述句法元素的具体含义。所有的视频编码标准都是通过定义句法和语义来规范编解码的工作流程。

1.1 句法元素的分层结构

编码器输出的比特码流中,每个比特都隶属于莫格句法元素,也就是说,码流有一个个句法元素依次衔接组成的,码流中除了句法元素并不存在用于控制或同步的内容。在H264定义的码流中,句法元素被组织成有层次的结构,分别描述各个层次的信息。如下如:


句法元素的分层结构有助于更有效地节省码流。例如,在一个图像中,经常会在各个片之间有相同的数据,如果每个片都同事携带这些数据,势必会造成码流的浪费。更为有效的做法是将该图像的公共信息抽取出来,形成图像一级的句法元素,而在片级只携带该片自身独有的句法元素。在H264中,句法元素共被组织成序列、图像、片、宏块、子宏块五个层次。

H264的分层结构是经过精心设计的,与以往的视频编码标准相比有很大的改进,这些改进主要针对传输中的错误掩藏,在有误码发生时可用提高图像重建的性能。在以往的标准中,分层的组织结构下图,他们如图TCP/IP协议的结构,每一层都有头部,然后在每层的数据部分包含该层的数据。


在这样的结构中,每一层的头部和它的数据部分形成管理与被管理的强依赖关系,头部的句法元素是该层数据的核心,而一旦头部丢失,数据部分的信息几乎不可能再被正确解码出啦。尤其在序列层及图像层,由于网络MTU(最大传输单元)大小的限制,不可能将整个层的句法元素全部放入同一个分组中,这个时候如果头部所在的分组丢失,该层其他分组即使能被正确解释也无法解码,造成资源浪费。

在H264中,分层结构最大的不同是取消了序列层和图像层,并将原来本属于序列和图像头部的大部分句法元素游离出来形成序列和图像两级参数集,其余的部分则放入片层。参数集是一个独立的数据单位,不依赖与参数集外的其他句法元素。图描述了参数集与参数集外句法元素的关系,在图中我们可以看到,参数集只是在片层句法元素需要的时候被引用,而且,一个参数集并不对应某个特定的图像和序列,同一个序列参数集可以被多个序列中的图像参数集引用,同理,同一个图像参数集也可以被多个图像引用。只在编码器认为需要更新参数集的内容时,才会发送新的参数集。在这种机制下,由于参数集是独立的,可以被多次重发或者采用特殊技术加以保护。

在图2的描述中,参数集与参数集外部的句法元素处于不同信道中,这是H264的一个建议,我们可以使用更安全但成本更昂贵的通道来传输参数集,而使用成本低但不够可靠的信道传输其他句法元素,只需要保证片层中的某个句法元素需要引用某个参数集是,那个参数集已经达到解码器,也就是参数集在时间上必须先被传送。当然,在条件不允许的情况下,我们也可以采用妥协的办法:在同一个物理信道中传输所有的句法元素,但专门为参数集采用安全可靠的通信协议,如TCP。当然,H264也运行我们为包括参数集合在内的所有句法元素指定同样的通信协议,但这时所有参数集必须被多次重发,以保证解码器最终至少能接收到一个。才参数集合片使用同个物理信道的情况下,图2中的信道1和信道2应该被理解为逻辑上的信道,因为从逻辑上看,参数集与其他句法元素还是处于各自彼此独立的信道中。

H264在片层增加了新的句法元素指明所引用的参数集的编号,同事因为取消了图像层,片成为了信道2中最上层的独立的数据单元,每个片必须自己携带关于所属图像的编号、大小等基本信息,这些信息在同一个图像的每个片中都必须是一致的。在编码时,H264的股份要求将参数集、片这些独立的数据单元尽可能各自完整第放入一个分组中被传送。

从表面上看来,H264关于参数集合片层的结构增加了编码后数据的冗余度(比如参数集必须多次重发,有如每个片都必须携带一部分相同的关于整个图像的信息,而这些数据完全是重复的),降低了编码效率,但这些技术的采用使得通信的鲁棒性大大增强。当数据传输中出现丢包,能够将使错误限制在最小范围,防止错误的扩散,解码后对错误的掩藏和恢复也能起到很好的作用。一个片的丢失将不会影响其他片的解码,还可以通过该片前后的片来恢复该片的数据。




H264 中句法元素的分层结构

H264片层以下的句法元素的结构大体上和以往标准类似,但在相当多的细节上有所改进,所有的改进的目的不外乎两个:在错误发生时防止错误扩散、减少冗余信息提供编码效率。这两者往往是矛盾的,H264在这两者上的取舍显得颇具匠心,6.3语义一节和第七章解码原理中将深有体会。

上图所示的码流的结构是一种简化的模型,这个模型已经能够正确工作,但还不够完善,不适合复杂的场合。在复杂的通信环境中,除了片和参数集外还需要其他的数据单位来提供额外的信息。下图描述了在复杂通信中的码流中可能出现的数据单位。前文所述,参数集科研被抽取出来使用其他信道。


(这里的数据单位是指可以被独立放入一个分组传输的句法元素集合)

H264 码流中的数据单位

在图7.4中我们看到,一个序列的第一个图叫做IDRInstantaneous Decoding Refresh,即时解码刷新),IDR图像都是I图像。H264引入IDR图像是为了解码得重同步,当解码器解码到IDR图像时,立即将参考帧对了清空,将以解码得数据全部输出或抛弃,重新查找参数集,开始一个新的序列。这样如果在前一个序列的传输中发生重大错误,如严重的丢包,或其他原因引起数据错位,在这里可以获得重新同步,IDR图像之后的图像永远不会引用IDR图像之前的数据来解码。

要注意IDR图像和I帧的区别,IDR图像一定是I帧,但I图像不一定是IDR图像。一个序列中可以有很多的I图像,I图像之后的图像可以引用I图像直接的图像做运动参考。

在上图中,除了参数集与片外还有其他的数据单位,这些数据单位可以提供额外的数据或同步信息,这些数据单位也是一系列句法元素的集合。他们在解码过程中不是必需的,但却可以适当提高公布性能或定义图像的复杂特征。

1 0