记使用ffmpeg播放视频,内存不断增加的解决过程

 一、 播放视频的程序中涉及内存管理的大概有3部分

1)用av_read_frame从buffer中获取数据

while(bStart)
{
    pAvPkt=(AVPacket *)malloc(sizeof(AVPacket));
    memset(pAvPkt,0,sizeof(AVPacket));
    av_init_packet(pAvPkt);

    if(av_read_frame(pFormatContext,pAvPkt)<0)
    {
        av_free_packet(pAvPkt);
        av_free(pAvPkt);
    }
   //挂载队列
  .................
}

2)用avcodec_decode_video2解码数据av_frame_alloc,退出队列,最后播放完av_free_frame

3)av_image_alloc和sws_getContext()初始化数据,然后sws_scale(),最后显示完后sws_freecontext()

二、测试

内存增加怎么解决,就是一部分一部分的屏蔽测试。

测试的顺序是3)、2)、1),

测试3)、2)是一样的,内存在缓慢的增加

测试1)时,也是在缓慢地增加,但是把

pAvPkt=(AVPacket *)malloc(sizeof(AVPacket));

放在while循环外,发现内存不在增加,由此想到应该是哪里没有释放啦

三、解决方案

最后竟然的发现是pAvPacket没有free

在 av_free_packet(pAvPkt);  之后添加

free(pAvPkt);

最终测试10多个小时,没有明显增加,解决

四、后记

         在这个问题上耗费了很多时间,不应该这样。吃一暂长一智,一定要注意malloc的话,一定要手动free,不管什么情况

   

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值