Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.9k views
in Technique[技术] by (71.8m points)

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
");
        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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
等待大神解答

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...