关于ffmpeg库 使用av_frame_free之类操作后内存不会减少的现象

出现的问题:
最近使用ffmpeg+qt制作音视频播放器的解码模块时出现了内存占用过高的情况,想通过av_frame_free等操作减少内存内存占用,但内存上涨之后调用这类操作内存占用并不会减少.

原因:
内存占用没减少的原因并不是因为av_frame_free操作未生效,实际上,如果不调用free指令,内存是会不断上升的,调用清理内存的指令的话内存在上涨到一定程度时就不会上涨了.
因为ffmpeg内部分配内存和清理内存时采用了 “缓存池” 的机制,内存不够时会增加池的大小,而调用者欲释放内存时,池并不会立即实际释放内存,而是将其加入池中,因此才会出现内存可以增加,但不会减少的情况.

更加详细的分析可以参考这篇文档:
FFmpeg视频播放的内存管理

解决方法:

  • 关于我遇到的问题,我的解决办法是尽量降低同时出现在内存中的缓存的数量,抑制池的扩张.
  • 另外,上面的文档中还提到avcodec_free_context可以让池释放掉实际占用的内存.

不清楚是否还有其他释放池内存的机制,如果后续了解到再补充.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值