H264
H264结构中,一个视频图像编码后的数据叫做一
帧
,一帧由一个
片(slice)
或多个片组成,一个
片
由一个或多个
宏块(MB)
组成,一个宏块由
16x16的yuv
数据组成。宏块作为H264编码的基本单位。
一个宏块由一个
16×16
亮度像素和附加的一个
8×8 Cb
和一个
8×8 Cr
彩色像素块组成,我们常见的
YUV
格式
I420
。
SODB(数据比特串)
最原始的编码数据,即VCL数据;
RBSP(原始字节序列载荷)
在
SODB
的后面填加了结尾比特(RBSP trailing bits 一个bit“1”)若干比特“0”,以便字节对齐;
EBSP( 扩展字节序列载荷)
在
RBSP
基础上填加了仿校验字节(0X03)它的原因是:在
NALU
加到
Annexb
上时,需要添加每组NALU之前的开始码
StartCodePrefix(0x00000001 or 0x000001)
,如果该NALU对应的
slice
为
一帧
的开始则用
4位字节
表示,
0x00000001
,否则用3位字节表示
0x000001
(是一帧的一部分)。另外,为了使
NALU主体
中不包括与
开始码
相冲突的,在编码时,每遇到两个字节连续为0,就插入一个字节的
0x03
。解码时将0x03去掉。也称为
脱壳操作
。
注:
0x00
表示
16
进制2位,则2进制的八位(
8bit = 1byte
)。即一个字节。所以
0x00 00 00 01
是4位字节,
0x00 00 01
是3位字节。
数据构成 NAL
NAL (Network Abstract Layer)
, 即网络抽象层。
一般来说编码器编出的首帧数据为
PPS
与
SPS
,接着为
I帧
,然后是
P帧
编码器将每个
NAL
各自独立、完整地放入一个分组,因为分组都有头部,解码器可以方便地检测出
NAL
的分界,并依次取出
NAL
进行解码。
起始码、