关于FFmpeg编码时,avcodec_receive_packet返回-11的解决办法

最近写了一个实时音视频通信的Demo,但是在整个demo运行后发送端渲染画面与接收端渲染画面之间延迟有3s左右。之后,通过在每个阶段打印完成时间戳,发现编码阶段竟花费了2-3s才有数据回调。通过持续定位最终发现问题出在:

avcodec_receive_packet();

通过debug,发现此函数在最初一直返回-11,导致编码堵在此处无法继续向下运行。返回-11的原因是由于此时编码器需要新的输入数据才能返回输出。虽然并不影响整体编码,但在实时音视频通信中肯定是不可取的。
查阅资料最后发现解决办法非常简单,只需要在编码器参数设置时,加上这一句:

av_opt_set(m_avCodecContext->priv_data, “tune”, “zerolatency”, 0);

这句代码作用是告诉编码器不用等待缓冲区填满,接收到数据即开始编码。
至于详细的分析流程,可以查阅此篇文章:从ffmpeg源代码分析如何解决ffmpeg编码的延迟问题(如何解决编码 0 延时)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值