编解码技术:H264 - 基础概念
帧 & 场
视频的一场或一帧可用来产生一个编码图像。通常,视频帧可分成两种类型:连续或隔行视频帧。
在电视中,为减少大面积闪烁现象,把一帧分成两个隔行的场。
显然,这时场内邻行之间的时间相关性较强,而帧内邻近行空间相关性强,因此活动量较小或静止的图像宜采用帧编码方式,对活动量较大的运动图像则宜采用场编码方式。
宏块、条带
一个编码图像通常划分成若干宏块组成,一个宏块由一个 16×16 亮度像素和附加的一个 8×8 Cb 和一个 8×8 Cr 彩色像素块组成。每个图象中,若干宏块被排列成条带的形式。
I 条带只包含 I 宏块,P 条带可包含 P 和 I 宏块,而 B 条带可包含 B 和 I 宏块。
I 宏块利用从当前条带中已解码的像素作为参考进行帧内预测(不能取其它条带中的已解码像素作为参考进行帧内预测)。
P 宏块利用前面已编码图象作为参考图象进行帧内预测,一个帧内编码的宏块可进一步作宏块的分割:即 16×16、16×8、8×16 或 8×8 亮度像素块(以及附带的彩色像素);如果选了 8×8 的子宏块,则可再分成各种子宏块的分割,其尺寸为 8×8、8×4、4×8 或 4×4 亮度像素块(以及附带的彩色像素)。
B 宏块则利用双向的参考图象(当前和未来的已编码图象帧)进行帧内预测。
档次和级
H.264 规定了三种档次,每个档次支持一组特定的编码功能,并支持一类特定的应用。
- 基本档次:利用 I 条带和 P 条带支持帧内和帧间编码,支持利用基于上下文的自适应的变长编码 进行的熵编码(CAVLC)。主要用于可视电话、会议电视、无线通信等实时视频通信;
- 主要档次:支持隔行视频,采用 B 条带片的帧间编码和采用加权预测的帧内编码;支持利用基于 上下文的自适应的算术编码(CABAC)。主要用于数字广播电视与数字视频存储;
- 扩展档次:支持码流之间有效的切换(SP 和 SI 条带)、改进误码性能(数据分割),但不支持 隔行视频和 CABAC。
VCL 和 NAL
制订 H.264 的主要目标有二个:
- 高的视频压缩比,当初提出的指标是比 H.263,MPEG-4,约为它们的 2 倍,现在都已基本实 现;
- 良好的网络亲和性,即可适用于各种传输网络。
为此,H.264 的功能分为两层,即视频编码层(VCL)和网络提取层(NAL,Network Abstraction Layer)。
VCL 数据即编码处理的输出,它表示被压缩编码后的视频数据序列。在 VCL 数据传输或存 储之前,这些编码的 VCL 数据,先被映射或封装进 NAL 单元中。
每个 NAL 单元包括一个原始字节序列负荷(RBSP)、一组对应于视频编码数据的 NAL 头信息。
NAL 单元序列的结构见下图:
参考资料
- [1] 《 T-REC-H.264-201906-I.pdf 》
- [2] 《 新一代视频压缩编码标准 -- H264/AVC(第二版)》