日常我们测试的时候,都喜欢在推流前保存h264裸流进行分析,但是这里将h264在H264BSAnalyzer分析的时候,有的是分析不出来的。
这个是因为如果在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代表不添加
如果在codec中设置了AV_CODEC_FLAG_GLOBAL_HEADER就会导致x264_param_t参数中的b_repeat_header赋值为0,
这样每个关键帧前面就不会添加SPS/PPS,如果在探测码流的时候,无法获取正确的SPS/PPS,就会导致H264BSAnalyzer解码失败。
尤其像推流rtmp,这个标志是需要设置的。所以如果要保存裸流查看,记得先不设置AV_CODEC_FLAG_GLOBAL_HEADER