以下为转载内容(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的开头。