[记录一个bug]硬编解出现I帧不对齐的情况[已解决]

在硬编解码的时候画质十分模糊,后面解析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帧不对齐的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值