FFmepg AV_CODEC_FLAG_GLOBAL_HEADER


以下为转载内容(http://blog.51cto.com/fengyuzaitu/2058061)

http://blog.csdn.net/passionkk/article/details/75528653指出了在实时视频传输时,需要发送

SPS/PPS数据,必须设置
       param.b_repeat_headers = 1;  // 重复SPS/PPS放到关键帧前面
种种情况下,codec中不能设置AV_CODEC_FLAG_GLOBAL_HEADER标志,从上面的代码,就可以知道
如果设置了videosteam 的codec中设置了AV_CODEC_FLAG_GLOBAL_HEADER就会导致x264_param_t参数中的b_repeat_header赋值为0,
这样每个关键帧前面就不会添加SPS/PPS,如果在探测码流的时候,无法获取正确的SPS/PPS,就会导致解码失败。
0x00000001或者0x000001是起始码,0x67是sps的开头,0x68是pps的开头。

 

如果AVCodecContext中设置了AV_CODEC_FLAG_GLOBAL_HEADER标志,对于生成的视频文件(如mp4),在windows操作系统下,并以图标的方式查看该视频文件时,视频文件的图标将是视频文件的第一帧,从而起到预览的作用该变量主要出现在该函数的以下两个地方
1    if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER)
        x4->params.b_repeat_headers = 0;
说明
b_repeat_headers的意思是将SPS/PPS添加到每一个关键帧之前,0代表不添加
如果设置了videosteam 的codec中设置了AV_CODEC_FLAG_GLOBAL_HEADER就会导致x264_param_t参数中的b_repeat_header赋值为0,
这样每个关键帧前面就不会添加SPS/PPS,如果在探测码流的时候,无法获取正确的SPS/PPS,就会导致解码失败。
0x00000001或者0x000001是起始码,0x67是sps的开头,0x68是pps的开头。

你可能感兴趣的:(FFmpeg)