H264 的 NAL 的问题

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
 

你可能感兴趣的:(H264 的 NAL 的问题)