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

FFMPEG, C++, Memory leak, what am I doing wrong?

本文关键字:错了 什么 泄漏 C++ 内存 FFMPEG      更新时间:2023-10-16

所以我构建了这个应用程序,它使用IP摄像机rtsp源并用它做有趣的事情,但是我有一个小的内存泄漏,我刚刚才确定。

如果我只是运行这个

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

它只会成长,成长...那么我错过了什么?

我使用的是 ffmpeg 的 Windows 端口,我的版本是 58.9.100.0 会不会是FFMPEG本身的泄漏?

来自文档:

如果 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。