NAL的启示码是0x000001,注意是3个字节,在实际情况下我们看到常是4个字节,0x00000001,这是做过字节对齐之后得出的结果,并不是什么错误。Spec中是这样写的,在某些类型的介质上,为了寻址方便,要求数据流在长度上对齐,或者必须是某个常数的倍数,H264建议在启示码前添加若干字节的0来填充。
防止竞争,为了避免start code和数据相同,在数据部分遇到0x000000/1/2/3,编码器在最后一个字节前插入一个新的字节0x03,在解码的时候,如果遇到0x000003,要将0x03删除,称为脱壳操作。
某些字段的意义:
Forbidden_zero_bit:该bit必须是0,如果不是0就出错了。
如果NALU对应的Slice为一帧的开始,则用4字节表示,即0x00000001;否则用3字节表示,0x000001
0000 0000 0000 0000 0000 0000 0000 0001
0010 0111 0100 0010 1110 0000 0010 1000
1000 1101 0110 1000 0000 0101 0000 0000
0101 1011 1010 0001 0000 0000 0000 0000
0000 0011 0000 0000 0000 0001 0000 0000
0000 0000 0000 00110000 0000 0011 0010
0000 1111 0001 0100 0010 0010 1010 0000
0000 0000 0000 0000 0000 0000 0000 0001
0010 1000 1100 1110 0000 0011 1101 0010
0100 1000
这是SPS+PPS+Slice Header的一段code,可以解码试试,跟StreamEye解码出来是不是一样。注意颜色标注部分要做脱壳操作,将0x03删除