ffmpeg这么强大,这么广泛应用的开源软件,肯定不会存在内存泄漏问题,一定是自己使用不当导致的。
经过测试发现每次录制视频文件后,进程的内存就会涨几百KB到几MB,这个问题困扰了很久,命名pkt每次都通过av_packet_unref(&pkt)进行释放了,为什么还会有内存泄漏呢?
我的调用顺序是这样的:
- AVPacket pkt;
- while(true)
-
- {
- av_init_packet(&pkt);
- if(av_read_frame(ifmt_ctx_v, &pkt) >=0)
- {
- //处理逻辑
- }
- av_free_packet(&pkt);
- av_packet_unref(&pkt);
- }
问题就出在了反复调用av_init_packet(&pkt),此函数只需要调用一次即可,否则会导致内存泄漏。正确的调用方式如下:
- AVPacket pkt;
- av_init_packet(&pkt);
-
- while(true)
- {
-
- if(av_read_frame(ifmt_ctx_v, &pkt) >=0)
- {
- //处理逻辑
- }
- av_free_packet(&pkt);
- av_packet_unref(&pkt);
- }