FFMPEG,C ++,内存泄漏,我做错了什么?

问题描述 投票:-2回答:1

所以我已经构建了这个应用程序,它消耗了一个IP摄像头rtsp feed,并用它做了有趣的事情,但是我有一个很小的内存泄漏,我刚才刚刚固定下来。

如果我只是运行它

while (av_read_frame(input_format_context, &input_packet) >= 0) {}

它会随着成长而增长......那么我错过了什么?

我使用的是ffmpeg的Windows端口,我的版本是58.9.100.0这可能是FFMPEG本身的漏洞吗?

c++ memory-leaks ffmpeg
1个回答
0
投票

来自文档:

如果pkt-> buf为NULL,则数据包有效直到下一个av_read_frame()或直到avformat_close_input()。否则数据包无限期有效。在这两种情况下,必须在不再需要时使用av_packet_unref释放数据包。

像这样的东西?

 AVPacket *pPacket = av_packet_alloc();
 if (!pPacket)
 {
    logging("failed to allocated memory for AVPacket");
    return -1;
 }

 while (av_read_frame(pFormatContext, pPacket) >= 0)
 {
    auto  response = decode_packet(pPacket, pCodecContext, pFrame);
    if (response < 0)
        break;
    }

    av_packet_unref(pPacket);
  }

PS:不要成为货物崇拜的受害者,研究源代码。这绝不是一个完整的例子。有些工作项目使用ffmpeg。

© www.soinside.com 2019 - 2024. All rights reserved.