记录解决项目中视频编解码实际问题时需要掌握的一些H264协议细节。
Picture Management
基本概念
宏块(Macro Block)
一个编码图像首先需要被划分为多个块(4x4像素)才能进行处理,显然宏块应该是整数个块组成,通常宏块大小为16x16个像素。宏块分为I、P、B三种。
- I宏块: 只能使用当前片(slice)中已经解码后的像素作为参考进行帧内预测(intra prediction)。
- P宏块: 可以使用前面解码的图像作为参考进行帧内预测。
- B宏块: 使用前后的参考图像进行帧内预测。
片(slice)
一帧视频图像可以编码成一个或者多个片,每个片包含整数个宏块。片的目的是为了限制误码的扩散和传输,使编码片之间互相保持独立。片共有5种类型:
- I slice: 只包含I宏块。
- P slice: 包含p和I宏块。
- B slice: 包含B和I宏块。
- SP slice: 用于不同编码流之间的切换。
- SI slice: 特殊类型的编码宏块。
片组成示意图如下:片头规定了片的类型、属于哪个图像、有关参考图像信息等。片的数据包含了一系列宏块和不编码数据。