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);
}