海思芯片H265编码丢帧问题解决

           

目录

  GOP概念

  海思几种GOP模式

NormalP 模式 GOP

 DualP 模式 GOP 结构

问题复现场景

问题复现步骤

编码器状态

问题解决 

总结


 在前述的文章(H265编码丢帧问题分析_h265视频模糊问题如何分析-CSDN博客)中,我们讲述了 海思H265丢帧问题的分析,本文 描述此问题的解决。

  GOP概念

   Group of Pictures 

GOP ( Group of Pictures) 是一组连续的画面,由一张 I 帧和数张 B / P 帧组成,是视频图像编码器和解码器存取的基本单位,它的排列顺序将会一直重复到影像结束。

I 帧是内部编码帧(也称为关键帧),P帧是前向预测帧(前向参考帧),B 帧是双向内插帧(双向参考帧)。简单地讲,I 帧是一个完整的画面,而 P 帧和 B 帧记录的是相对于 I 帧的变化。如果没有 I 帧,P 帧和 B 帧就无法解码。

  海思几种GOP模式

NormalP 模式 GOP


每个 P 帧参考一个前向参考帧。也没有B帧。参数设置

s32IPQpDelta,意思是I和P帧之间 QP值的差值。

 推荐设为 3,值越大 I 帧越大, I 帧质量越好,质量越好,则码率越高。


 

 DualP 模式 GOP 结构

SP 指特殊的 P 帧,这里简称 SP 帧,该帧 Qp 值推荐小于其他 P 帧 Qp 值,

u32SpInterval=0 指不支持 SP 帧。

 DualP 模式下 P 帧参考就近的两个前向参考帧,能够利用更多参考帧的时域相关性提升编码压缩性能。主要应用在运动且有低延时要求的场景, DualP 压缩性能低于 BipredB 模式但高于 NormalP 模式。 DualP 由于两个参考帧均使用前向参考帧,因此不存在编码和解码延时

 目前我们采用 NormalP 模式 GOP

问题复现场景

问题复现步骤

1) 海思编码守护进程启动,等待业务APP的交换信息

2)业务APP将待编码的图片的宽高尺寸等信息告知海思芯片。海思据此初始化编码器。

3)业务APP开始下发编码信息,编码芯片开始工作。

4)杀掉业务APP,而后再次重新启动。

根据前述文章分析,我们得知,在步骤4时,编码器编码出去的图像缺少了I帧,导致后续P帧不能被正确解析。

编码器状态

猜测编码器在多次业务运行时处于如上的状态:

我们GOP由30帧图像构成,在第一次业务运行完毕时,图像实际只有70帧,这导致最后的GOP实际只输出了10帧,而编码器期望输出30帧后,再输出下一次的I帧。

问题解决 

通过上述分析,我们只需要在业务APP再次运行时,通知编码器,让其下一帧输出I帧,这样重新开始一个GOP,保证编码组的完整性就可以解决问题。

海思手册提供如下接口完成此功能,在每次业务APP时,通知编码进程调用此接口。

HI_MPI_VENC_RequestIDR

如果通道未创建, 则返回失败。
接受 IDR 帧请求后, 当 bInstant =0 时,则在帧率控制的下一帧编出 IDR 帧,
当bInstant =1 时,则立即编出 IDR 帧,不受帧率控制约束。
IDR 帧请求,只支持 H.264/H.265 编码协议。
由于此接口不受帧率控制影响,每调用一次即编出一个 IDR,调用频繁会影响码
流帧率和码率的稳定,使用时需要注意。
当 GOP 模式为 Smartp 或 B 帧模式下,请求 IDR 帧会延时生效
 s32Ret = HI_MPI_VENC_RequestIDR(g_VencChn, 0); //下一帧编码为IDR帧
		         if(HI_SUCCESS != s32Ret)
		         {
			          printf("HI_MPI_VENC_RequestIDR err 0x%xn",s32Ret);
		         }

最终呈现如下的效果,即每次开始的编码输出都是完整的GOP。 

总结

GOP作为编解码的独立单元,其由I B P构成,I帧作为关键帧,缺少I帧,其后续P帧浪费了。

 对于不同GOP的具体编码时延及对解码器的要求,后续再整理输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

proware

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值