说说项目中遇到的两点失误:

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解码 需要注意的内存泄漏问题的更多相关文章

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

    靠,内存泄漏好严重.开始怀疑是自己代码问题,调试了半天,又反复改写和优化代码,还是泄漏严重. 拿网上现成的FFMPEG H264编码的范例来测试,同样泄漏很严重. 百度了一下,有很多人遇到同样的问题, ...

  2. FFMPEG解码流程

    FFMPEG解码流程:  1. 注册所有容器格式和CODEC: av_register_all()  2. 打开文件: av_open_input_file()  3. 从文件中提取流信息: av_f ...

  3. FFmpeg解码H264及swscale缩放详解

    本文概要: 本文介绍著名开源音视频编解码库ffmpeg如何解码h264码流,比较详细阐述了其h264码流输入过程,解码原理,解码过程.同时,大部分应用环境下,以原始码流视频大小展示并不是最佳方式,因此 ...

  4. 调不尽的内存泄漏,用不完的Valgrind

    调不尽的内存泄漏,用不完的Valgrind Valgrind 安装 1. 到www.valgrind.org下载最新版valgrind-X.X.X.tar.bz2 2. 解压安装包:tar –jxvf ...

  5. (转)FFMPEG解码流程

    http://www.douban.com/note/228831821/ FFMPEG解码流程:     1. 注册所有容器格式和CODEC: av_register_all()     2. 打开 ...

  6. Android 内存泄漏优化汇总

    android内存泄漏优化摘要 博客分类: android android内存溢出OutOfMemoryError . android移动应用程序的内存分配一般是8凯瑟琳约,不正确地假定处理内存处理非 ...

  7. 最新FFMPEG解码流程

    FFMPEG解码流程: 1. 注册所有容器格式和CODEC:  av_register_all() 2. 打开文件:                    av_open_input_file() 3 ...

  8. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——解码篇:(一)用ffmpeg解码视频

    一.概述 myRTSPClient(RTSPClient)获取音视频数据之后,接下来的工作便是将音视频数据交给解码器去解码(ffmpeg),ffmpeg解码之后于是便有了呈现在终端用户(USER)面前 ...

  9. FFmpeg源代码简单分析:内存的分配和释放(av_malloc()、av_free()等)

    ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...

随机推荐

  1. Appium——主从控制执行

    1.客户端(Eclipse)机器A, 服务端(appium.Genymotion)机器B 2.设置Appium,Server Address为192.168.17.123,重新启动Appium 3.在 ...

  2. LabelFunction 允许在显示数据以前进行处理

    <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...

  3. KMPlayer 一打开总是出现右面的窗口 导航区 怎样设置不会自动打开

    两步骤第一,右键-外观-标致-管理 删除默认标致 第二,打开hosts文件,位置在 C:\Windows\System32\drivers\etc 在最下面一行加入 127.0.0.1 player. ...

  4. ActiveMQ 学习

    链接:  http://www.cnblogs.com/zhuxiaojie/p/5564187.html#autoid-1-0-0

  5. APP-5-百度电子围栏

    1.代码部分 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <me ...

  6. NSTimer内存泄漏

    用NSTimer调用 timer = [NSTimer scheduledTimerWithTimeInterval:timerInterval target:self selector:@selec ...

  7. jquery接触初级-----juqery DOM操作 之二

    DOm 操作之: 1.1  children(),这个函数只是查找元素的子元素,而不考虑其他后代元素 <body> <p title="请选择你最喜欢的水果"&g ...

  8. unzip解压带密码的压缩包

    // 解压 String pw = "123456"; String cmd = "unzip -P " + pw + " /root/lianlia ...

  9. python __dict__

    dict 以key-value 的形式存储着本对类/模块的: 模块的__dict__ 属性: 存储了模块的 name (这个也是模块的一个单独的键,即:在Bx.py 中引入Ax.py 那么,在Bx中, ...

  10. EF 1

    安装框架: 在NuGet中安装ef框架,命令:Install-package EntityFramework 数据迁移: 在程序包管理器控制台,执行语句. 初始化: 1.Enable-Migratio ...