h264编码防止竞争机制如果检测出有连续两个0x00字节且后一位为0x00、0x01、0x02、0x03,就需要在两个0x00后插入一个0x03,则在NAL数据内肯定不会存在NAL起始码0x000001。
分析了一段h264视频数据的编码感觉对不上。
h264视频数据链接
链接: https://pan.baidu.com/s/1Tsmm...
提取码: 4a4b
FILE *bits = NULL;
if (NULL == (bits = fopen(fn, "rb")))
{
printf("open file error
");
exit(0);
}
int len = 0;
unsigned char check_buf[512]={0};
while(!feof(bits)){
check_buf[len++] = fgetc(bits);
if(0x00 == check_buf[len-1]){
check_buf[len++] = fgetc(bits);
if(0x00 == check_buf[len-1]){
check_buf[len++] = fgetc(bits);
if(0x00 == check_buf[len-1])
{
check_buf[len++] = fgetc(bits);
while(0x00 == check_buf[len-1]){
printf("{}"); //连续的多个00
check_buf[len++] = fgetc(bits);
}
printf("<%d>",check_buf[len-1]);
assert(0x01 == check_buf[len-1]); //0x00 00 00 01
}
else if(0x01 == check_buf[len-1]){
printf("[0x00 00 01]"); //0x00 00 01
}else{
printf("#");//0x00 00 **
check_buf[len++] = fgetc(bits);
if( check_buf[len-2] == 3 &&
!(check_buf[len-1] == 0 ||
check_buf[len-1] == 1 ||
check_buf[len-1] == 2 ||
check_buf[len-1] == 3)
){
printf("[%d,%d]",check_buf[len-2],check_buf[len-1]);
}
}
}
}
len = 0;
}
最后打印出来的结果如下:
说明:
<1> :0x00000001
{}<1> :0x0000000001
{}{}<1> :0x000000000001
......
[0x 00 00 01] :0x000001
# :0x0000** //**为任意数字
#[3,*] :0x000003** //**为0x00、0x01、0x02、0x03之外的任意数字
<1><1><1><1>#{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}<1><1><1>{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}<1><1><1><1><1>{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}<1>{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>#{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>#{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>#{}{}{}{}<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>##<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>#<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>#{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}<1><1><1><1><1><1><1><1><1><1><1>#<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>###{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>###{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>#{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>###{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>###<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>#{}{}{}{}{}{}{}{}{}{}{}<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>##<1><1><1>#<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>###<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>##{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>#<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>###<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>###{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>##<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>##<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>##<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>#<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>#<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>#<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>##<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>##<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>###{}{}{}{}{}{}{}{}{}<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>#<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>##<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>##{}{}{}{}{}{}{}{}{}{}{}{}{}{}<1><1><1><1><1><1><1&g
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…