使用ffmpeg解码 需要注意的内存泄漏问题
说说项目中遇到的两点失误:
1. AVFrame结构,av_frame_alloc申请内存,av_frame_free释放内存。容易混淆的是av_frame_unref,它的作用是释放音视频数据资源,而av_frame_free是释放所有资源,包括音视频数据资源和结构体本身的内存。可以从源码中看到,av_frame_free函数体内是先调用了av_frame_unref释放数据缓存,再free本身结构体内存。
2. AVPacket结构,比较神奇的是,av_read_frame执行过程中,内部为形参pkt自动申请一块缓存用来存储音视频数据,而释放资源却由我们自己调用av_free_packet来释放缓存。从源码分析得知,当av_read_frame返回值不小于0时,内部会进行缓存操作,需要外界释放;当返回值小于0时,内部会进行缓存并释放,或者不进行缓存,由数据本身损坏或正常结束来决定。
相关源码可以参看:
https://github.com/FFmpeg/FFmpeg/blob/master/libavutil/frame.c
https://www.ffmpeg.org/doxygen/0.6/avpacket_8c-source.html
https://ffmpeg.org/doxygen/trunk/libavformat_2utils_8c-source.html
https://www.ffmpeg.org/doxygen/2.7/libavcodec_2utils_8c_source.html
使用ffmpeg解码 需要注意的内存泄漏问题的更多相关文章
- FFmpeg的H264编码有内存泄漏吗??!!!
靠,内存泄漏好严重.开始怀疑是自己代码问题,调试了半天,又反复改写和优化代码,还是泄漏严重. 拿网上现成的FFMPEG H264编码的范例来测试,同样泄漏很严重. 百度了一下,有很多人遇到同样的问题, ...
- FFMPEG解码流程
FFMPEG解码流程: 1. 注册所有容器格式和CODEC: av_register_all() 2. 打开文件: av_open_input_file() 3. 从文件中提取流信息: av_f ...
- FFmpeg解码H264及swscale缩放详解
本文概要: 本文介绍著名开源音视频编解码库ffmpeg如何解码h264码流,比较详细阐述了其h264码流输入过程,解码原理,解码过程.同时,大部分应用环境下,以原始码流视频大小展示并不是最佳方式,因此 ...
- 调不尽的内存泄漏,用不完的Valgrind
调不尽的内存泄漏,用不完的Valgrind Valgrind 安装 1. 到www.valgrind.org下载最新版valgrind-X.X.X.tar.bz2 2. 解压安装包:tar –jxvf ...
- (转)FFMPEG解码流程
http://www.douban.com/note/228831821/ FFMPEG解码流程: 1. 注册所有容器格式和CODEC: av_register_all() 2. 打开 ...
- Android 内存泄漏优化汇总
android内存泄漏优化摘要 博客分类: android android内存溢出OutOfMemoryError . android移动应用程序的内存分配一般是8凯瑟琳约,不正确地假定处理内存处理非 ...
- 最新FFMPEG解码流程
FFMPEG解码流程: 1. 注册所有容器格式和CODEC: av_register_all() 2. 打开文件: av_open_input_file() 3 ...
- 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——解码篇:(一)用ffmpeg解码视频
一.概述 myRTSPClient(RTSPClient)获取音视频数据之后,接下来的工作便是将音视频数据交给解码器去解码(ffmpeg),ffmpeg解码之后于是便有了呈现在终端用户(USER)面前 ...
- FFmpeg源代码简单分析:内存的分配和释放(av_malloc()、av_free()等)
===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...
随机推荐
- 1. ibatis 查询的sql列存在相同的列名
如果SQL语句存在两个相同的查询列名,则映射时,取第一个列名的值进行映射 <?xml version="1.0" encoding="UTF-8" ?&g ...
- requestAnimFrame动画兼容性封装
window.requestAnimFrame=function(){ return window.requestAnimationFrame ||window.webkitRequestAnimat ...
- 读取配置文件properties的几种方式
介绍几种读取方式:参考:https://www.cnblogs.com/sebastian-tyd/p/7895182.html .基于ClassLoder读取配置文件 注意:该方式只能读取类路径下的 ...
- smarty获取php中的变量
{$smarty}保留变量不需要从PHP脚本中分配,是可以在模板中直接访问的数组类型变量,通常被用于访问一些特殊的模板变量.例如,直接在模板中访问页面请求变量.获取访问模板时的时间邮戳.直接访问PHP ...
- 深度学习原理与框架-Tensorflow基本操作-变量常用操作 1.tf.random_normal(生成正态分布随机数) 2.tf.random_shuffle(进行洗牌操作) 3. tf.assign(赋值操作) 4.tf.convert_to_tensor(转换为tensor类型) 5.tf.add(相加操作) tf.divide(相乘操作) 6.tf.placeholder(输入数据占位
1. 使用tf.random_normal([2, 3], mean=-1, stddev=4) 创建一个正态分布的随机数 参数说明:[2, 3]表示随机数的维度,mean表示平均值,stddev表示 ...
- html 自定义属性的获取和应用
在html 中,我们可以给元素设置自定义属性,格式: data-属性="属性值",可以设置一个,也可以设置多个 1.获取元素属性的常规方法:直接获取元素,然后使用getAttri ...
- CSS VISUAL RULES
CSS VISUAL RULES Review Visual Rules Incredible work! You used CSS to alter text and images througho ...
- redisclient can not connect
假如采用传统请执行一下命令: systemctl stop firewalld systemctl mask firewalld 并且安装iptables-services: yum install ...
- 深入jUI(DWZ)
-----------------------------------------------------------------------------主页面index.html <html& ...
- [Nginx]实战Nginx:Nginx的一些介绍
------------------------------------------------------------------------------------------------ 首先列 ...