h264编码与emulation prevention防止竞争不符

发布于 2022-09-12 13:11:56 字数 13993 浏览 47 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文