NAL
通过其一个 header+ data 形成一串数据流。
forbidden = b[0] >>7 & 0x01;
reference = b[0] >>5 & 0x03;
nal_type = b[0] & 0x 1f;
[7, 6, 5, 4, 3,2, 1, 0](1byte) + Data
SODB, RBSP, EBSP
ITU-h264规定,
用0x000001(三个字节)作起始码。其实单纯的data数据被称为SODB,
由于操作上的需要,SODB完全是BIT格式的,即“1111110000。。。”
为了实现对字节的操作, 有时候需要给SODB补位,以达到一个字节的目
的,故RBSP就诞生了。补位的操作是在SODB的最后加1,如果位数不够,
续继续补0,直到为8位。
为了防止起始位0x00 00 01与原有RBSP中的数据0x00 00 01 产生混乱,
扫描起点之后的所有数据,发现0x 00 00 01 以及 0x 00 00 02 , 0x 00 00 03,
0x00 00 00 这样的数据,均给前插0x03, 故:
0x 00 00 00 就成为 0x 00 00 03 00 (区分)
0x 00 00 01 -------〉0x 00 00 03 01 (区分)
0x 00 00 02 -------〉0x 00 00 03 02 (保留)
0x 00 00 03 -------〉0x 00 00 03 03 (区分)
----------------------------------------------------------------------------------------------------
从上可以看到,简单读取过来的h264的数据,通过起始位0x00 00 01 或者 0x 00 00 00 01
得到EBSP,首先要去掉0x03得到RBSP, RBSP 要去掉拖尾数得到SODB