c++ - FFMPEG,C++,内存泄漏,我做错了什么?
问题描述
所以我构建了这个应用程序,它使用 IP 摄像机 rtsp 提要并用它做一些有趣的事情,但是我有一个小的内存泄漏,我现在才确定。
如果我只是运行这个
while (av_read_frame(input_format_context, &input_packet) >= 0) {}
它只会增长'n增长'n增长......所以我错过了什么?
我正在使用 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 的工作项目。
推荐阅读
- sql - 在 vb.net web 中显示 sql server 行而不刷新以前的行
- spring-cloud - 如何使用 Spring Cloud Stream 3.x 的新功能绑定样式设置拆分器?
- c# - 使 Visual Studio 警告缺少等待运算符
- javascript - 如何在 JavaScript 中重置和更新对象值
- laravel - 如何在 laravel 中使用 slug 获取下一条和上一条记录
- node.js - 如何从 JavaScript 调用 Amazon Fraud Detector?
- html - 右对齐文本的省略号
- python - 使用 BeautifulSoup 在 Python 中按元素抓取 HTML
- javascript - 谁在 Nodejs 中遵循建议功能?
- python - 将别名组合到自己的组中