FFmpeg的H264编码有内存泄漏吗??!!!

来源:互联网 发布:多台网络打印机服务器 编辑:程序博客网 时间:2024/06/06 07:13

原文来自于:

 点击打开链接ffmpeg解码H264内存问题

靠,内存泄漏好严重。开始怀疑是自己代码问题,调试了半天,又反复改写和优化代码,还是泄漏严重。

拿网上现成的FFMPEG H264编码的范例来测试,同样泄漏很严重。

 

百度了一下,有很多人遇到同样的问题,他们说是编码库本身的内存泄漏。。。。, 无语,操,那FFMPEG的H264编码还能用吗!!!! 抓狂!!!!


------此处省略一万字!!!

--------ffmpeg怎么可能解码h264还会内存泄露,肯定是自己用法不当 造成的, 对自己说.......

------------


-----------------

-----------------------唉.不知道问题解决没有......----------------------------先记录再说....

问题起因是.....(我的方案是从rtsp上获取数据转为AVPacket 后)

-----调用这个 函数....avcodec_send_packet -----这个一点问题没有...

于是 ,,我接下来,可是编码得到一帧数据,(即  得到一个 AVFrame),

-----

我开始调用------

avcodec_receive_frame()

--------就是在这里,,,内存一点点 的上升.........




好再我 在网上找到这样一说法,说是这样的......于是 ,,,,呼呼

当我们使用ffmpeg对视频进行解码时,必须注意AVPacket正确用法,否则容易造成内存泄漏。

我们一般会按下列顺序初始化AVPacket 

AVPacket avpkt;

av_init_packet(&avpkt);

此处调用av_parser_parse2(Parse a packet)

len = av_parser_parse2(_parser, context, &avpkt.data, &avpkt.size,

inbuf+offset, fullSize,

pts, dts, AV_NOPTS_VALUE);

注意av_parser_parse2每次调用会重新给avpkt->data分配内存,用完后一定要调用

av_packet_unref(&avpkt);//pkt重复使用时,需要调用释放部分内存


也就是说:

解码时,av_init_packet调用一次就够,(avpkt 作为类成员 )av_packet_unref需要av_parser_parse2操作完成不再使用后重复调用。

其中还有个av_free_packet(&avpkt),但这东西如何av_packet_unref执行了再执行av_free_packet会崩溃,搞不懂,干脆就不调用了,也没发现内存异常..

地址链接:点击打开链接