首页 > 解决方案 > FFMPEG,C++,内存泄漏,我做错了什么?

问题描述

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

如果我只是运行这个

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

它只会增长'n增长'n增长......所以我错过了什么?

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

标签: c++memory-leaksffmpeg

解决方案


从文档:

如果 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 的工作项目。


推荐阅读