概念目录
一、H.264 格式特征
1.H.264 的层次
H.264 标准中提出了视频编码的两个层次:负责对视频内容进行描述和压缩冗余信息量的视频编码层 VCL(Video Coding Layer)和保证数据在网络上被恰当传输的网络抽象层 NAL(Network Abstraction Layer)。两层之间的通信由基于分组方式的 NAL 单元实现,即将视频信息量化为编码后封装入 NAL 单元再通过 VCL层进行传输。
VCL规定视频编码的算法,有效地描述视频内容,NAL对网络传输的规范加以规定,以恰当的打包和传送数据的方式,完成视频在不同网络上的传输,满足各类网络的要求。如图2.1所示。
上图是 NAL 单元序列的结构。其中 RBSP 是编码负载,包括了码流的实质信息内容,如视频的全局参数,如视频分辨率,编码和采样格式,或者视频内容的数据如片组边界,预测残差等。而 NAL header 标示了 RBSP 的数据类型。在接收端,接受到所有的 NAL 单元之后,剩下的 RBSP 数据就是视频的码流。在 VCL 层中,每个比特位都属于某个句法元素,隶属于不同层次结构的句法元素可用于表达各层结构中的信息。
在编码器输出的码流中,数据的基本单位是句法元素,每个句法元素由若干比特组成,它表示某个特定的物理意义,例如:宏块类型、量化参数等。句法表征句法元素的组织结构,语义阐述句法元素的具体含义。所有的视频编码标准都是通过定义句法和语义来规范编解码器的工作流程。
句法的分层结构
在H.264中,分层结构最大的不同是取消了序列层和图像层,并将原本属于序列和图像头部的大部分句法元素游离出来形成序列和图像两级参数集(SPS、PPS),其余的部分则放入片层。参数集是一个独立的数据单位,不依赖于参数集外的其他句法元素。
一个完整的视频由一个视频序列头和一个视频序列尾和若干个 GOP(图像组)组成,一个GOP 由一个 I 帧和若干个 P 帧和 B 帧组成,每一帧又可以分为图像头部和若干宏块组,宏块组分为宏块组头部和若干宏块,每个宏块分为亮度宏块和色度宏块。H.264 编码方式将帧图像划分为三类,分别是I 、P 、B ,其中 I 采用帧内预测模式技术进行操作,而P 、 B 采用帧内或帧间预测模式技术进行操作。因此 H.264 编码器在编码的过程中首先需要先选定一种预测模式,其次针对这种预测模式生成一个预测宏块并计算该预测模式所对应的模式代价,然后选取最优模式代价的预测模式当作正在操作宏块的预测模式,最后再继续完成后续操作。
如上图所示 H.264 中句法元素被组织成序列,图像帧,片/片组,宏块,子块五个层次。每个层次中的头部参数集规定了数据的存储格式,存储顺序等信息,一旦头部参数集发生错误,码流中的数据信息将无法被成功解码。H.264 中最重要的两个参数集分别是序列参数集(SPS)和图像参数集(PPS),序列参数集包括了视频图像序列的所有参数,如视频尺寸,IPB 帧分布和顺序,IDR 帧位置等,而图像参数集包含了图像的片和片组中的相关参数,如宏块的映射模式,各预测块的预测模式,量化步长等。一般来说,在每个视频流中,序列参数集和图像参数集只出现一次,也就意味着视频的参数设置在每个视频流中是保持不变的。
2.H.264档次
H.264主要有四个档次,包括2003年5月推出的基本档次、主要档次、扩展档次,以及2004年7月增补的高级档次。每个档次详细规定了所采用的编码工具,支持一组特定的编码功能和一类特定的应用,通过设置不同的参数(如编码比特率、帧等),可以得到不同等级的编码器性能。
本文实验使用基本档次,其目标是在大多数网络条件和环境下,达到最小的编码复杂度,可以提供灵活性以及高鲁棒性,利用I/P片来支持帧内/间编码,支持基于上下文的自适应变长编码(CAVLC)的熵编码。主要应用在无线通信、视频会议、可视电话等一些实时视频通信中。