在硬编解码的时候画质十分模糊,后面解析h264出来看,发现I帧不像我设置那样去对齐。
我设置gop=50,但是出来的gop不一定是50
1、反复确认了参数是没问题的
2、将muxing的生成frame的功能替换我的解码帧
3、将代码抽象为demo,对比测试muxing
百思不得其解,办法总比困难多,最终测试了几天,把缩放改为了sws后,I帧间隔居然正常了。终于可以把问题归到硬缩放里了。
最终经过提醒,发现是对keyframe的设置有问题。由于我的软缩放代码是这样写的:
sws_scale(ctx, inframe->data, inframe->linesize,0, pIvfmt.height, outframe->data, outframe->linesize);
outframe->key_frame = inframe->key_frame;
if (outframe->key_frame == 1)
outframe->pict_type = AV_PICTURE_TYPE_I;
else
outframe->pict_type = AV_PICTURE_TYPE_P;
所以在写硬缩放的时候,也是这样写的:
filter->GetFrame(&outframe);
outframe->key_frame = inframe->key_frame;
if (outframe->key_frame == 1)
outframe->pict_type = AV_PICTURE_TYPE_I;
else
outframe->pict_type = AV_PICTURE_TYPE_P;
采用了缩放前的key_frame参数,设置了pict_type出现问题。
只要硬缩放不采用缩放前的key_frame参数即可。但是软缩放是否要采用,这个我还不是很明确,反正现在运行还没问题>.<
总结:程序编解码的时候,应该是不用刻意去采用操作前对象的key_frame赋值给操作后的对象。否则容易出现I帧不对齐的问题。