h264编码与emulation prevention防止竞争不符
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\n");
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><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>##<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>##<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>##{}{}{}{}{}{}{}{}{}<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>##<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>#<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>#<1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1><1>
0x000003出现后下一字节确实是0x00、0x01、0x02、0x03中的一种。
但疑惑的是:
1.超过3个连续的0,这和防止竞争机制不符?
2.超过3个连续的0后一个字节为0x01,如果这是起始码,那这个起始码是0x000001还是0x00000001?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论