音视频提取功能组件EasyStreamingServer读取本地文件出现内存泄露问题如何修复?

EasyStreamingServer是一种支持文件,RTSP,RTMP,HTTP等各种流媒体协议的音视频提取功能组件,支持H.264,H.265,PCM,AAC等各种音视频编码格式输出,支持Windows,Linux ,Android,iOS,ARM等各种平台。

当TSINGSEE青犀视频研发人员通过EasyStreamingServer读取本地文件时,出现了内存泄露问题。

问题分析

使用EasyStreamingServer读取本地文件时,我们看到内存一直在增长,对比拉取网络流,如RTSP流,内存消耗相对稳定,未出现内存泄露。

在拉取本地文件时,内存如下

由上可以看到,内存消耗一直在增长。但是拉RTSP流就未出现如此增长的情况。

从代码逻辑来看,文件与RTSP流不同的是,使用了av_bitstream_filter_filter,问题也就是出现在此地方。av_bitstream_filter_filter会重新分配内存,需要在使用后及时释放,否则就会出现内存泄露问题。

通过以上分析,我们可以推断是在EasyStreamingClient中使用av_bitstream_filter_filter后未及时释放内存导致的内存泄漏。

我们可以通过增加如下代码解决内存泄露问题:

if (m_vbsf_h264_toannexb != NULL)
{
	av_free(packet.data);
	packet.data = NULL;
}

再次测试后,我们没有再发现内存泄漏的问题,所以在此可以给大家提醒,如果使用av_bitstream_filter_filter,则一定要及时释放内存。

 
原文地址:https://www.cnblogs.com/TSINGSEE/p/13743883.html