FFMpeg中apiexample.c例子分析——解码分析 收藏

我们直接从 video_decode_example() 函数开始讲,该函数实现了如何去解码一个视频文件,以 .mpeg 文 件为例。

  ( 1 )将缓存的末尾清 0 ,从而确保读操作不会越界导致破坏 mpeg 流。

     uint8_t inbuf[INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE];

     memset(inbuf + INBUF_SIZE, 0, FF_INPUT_BUFFER_PADDING_SIZE);

    可见,我们所分配的缓存,除了存放数据外,最后部分还预留了一小段空间。

  ( 2 ) avcodec_find_decoder() 函数用于查找与 codec ID 相匹配的已注册的解码器。

  ( 3 ) avcodec_alloc_context() 函数用于分配一个 AVCodecContext 并设置默认值, 如果失败返回 NULL ,并可用 av_free() 进行释放。

  ( 4 ) avcodec_alloc_frame() 函数用于分配一个 AVFrame 并设置默认值,如果失败返回 NULL , 并可用 av_free() 进行释放。

  ( 5 ) avcodec_open() 函数用给定的 AVCodec 来初始化 AVCodecContext 。

    对于一些编解码器,像 msmpeg4 和 mpeg4 ,其宽度和高度必须要初始化,因为这些信息在码流( bitstream )中是没有的。 avcodec_open() 会帮我们把宽度和高度设置好。

  ( 6 )打开文件 fopen 。

  ( 7 )循环解码。

来源:(http://blog.sina.com.cn/s/blog_4e87ac6e0100a60g.html ) - FFMpeg中apiexample.c例子分析——解码分析_eNsEmpire_新浪博客

  ( 7.1 )读取文件 fread(inbuf, 1, INBUF_SIZE, f );

    注意 1 :一些编解码器是基于流的(像 mpegvideo , mpegaudio ),这是使用它们的唯一一种方法,因为在解析它之前,你不知道压缩数据的大小。

    但是,一些其他编解码器(像 msmpeg4 , mpeg4 )是基于帧的,所以对于某一帧,你必须调用这些编解码器来处理所有数据。你也必须在初始化这些编解 码器前,先把宽度和高度设置了。

    注意 2 :一些编解码器允许原始参数(像帧大小,采样率)在任何一帧被改变。我们虽然已对此做了处理,但你也 要重视起来。

    这儿,我们用一个基于流的解码器( mpeg1video ),所以我们把数据输到解码器,看它是否可以解码一帧。

  ( 7.2 ) avcodec_decode_video() 函数用于解码一个视频帧 , 从 inbuf_ptr 到 picture, 所采用的编解码器是 c 。

  ( 7.3 )写入文件。

  ( 8 )解码延时的帧,再写入文件。

    一些解码器,像 MPEG ,传输 I 帧和 P 帧时,都会有一帧的延时。所以我们必须要获取视频的最后一帧数据。

  ( 9 )释放资源。

     fclose(f);

     avcodec_close(c);

     av_free(c);

     av_free(picture);

FFMpeg中apiexample.c例子分析——解码分析相关推荐

  1. FFMpeg中apiexample.c例子分析——编码分析

    FFMpeg中apiexample.c例子分析--编码分析apiexample.c例子教我们如何去利用ffmpeg库中的api函数来自己编写编解码程序. (1)首先,main函数中一开始会去调用avc ...

  2. FFmpeg的H.264解码器源代码简单分析:宏块解码(Decode)部分-帧间宏块(Inter)

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  3. FFmpeg的H.264解码器源代码简单分析:宏块解码(Decode)部分-帧间宏块(Inter)...

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  4. FFMpeg的output_example.c例子分析

    该例子讲了如何输出一个libavformat库所支持格式的媒体文件. (1)av_register_all(),初始化libavcodec库,并注册所有的编解码器和格式. (2)guess_forma ...

  5. FFmpeg的H.264解码器源代码简单分析:宏块解码(Decode)部分-帧内宏块(Intra)

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  6. 【七】【vlc-android】vlc的decoder控制层传输数据与ffmpeg音频解码模块decoder层进行解码的数据交互流程源码分析

    [以mp4文件格式和AAC.H264编码的本地文件为例展开分析] 由第六章节可知音频解码器的加载方式与视频解码器也是类似的. 通过此前分析过的模块加载方式,可找到ffmpeg解码和编码模块的初始化加载 ...

  7. ffmpeg中av_log的实现分析

    [时间:2017-10] [状态:Open] [关键词:ffmpeg,avutil,av_log, 日志输出] 0 引言 FFmpeg的libavutil中的日志输出的接口整体比较少,但是功能还是不错 ...

  8. 【FFMPEG源码分析】ffmpeg中context与AVClass,AVOption之间的关系

    通过前面三篇文章的分析大致了解了ffmpeg中demuxer/decoder模块的内部大致结构和数据处理流程.在阅读源码的过程中经常会看到XXXContext,AVClass xxx_class, A ...

  9. FFmpeg的H.264解码器源代码简单分析:宏块解码(Decode)部分-帧内宏块(Intra)...

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

最新文章

  1. 移动端导航页面html,swiper4实现移动端导航切换
  2. Hadoop源代码分析 - MapReduce(转载)
  3. 批量镜像locator(比如表情模板)
  4. C/S+P2P网络模型(二)--上传下载文件
  5. 7-69 字母图形 (15 分)
  6. volatile与synchronized的区别
  7. 给定一个排序后的数组,包含n个整数,但这个数组已被旋转过多次,找出数组中的某个元素...
  8. 鸿蒙应用案例:Ability应用与管理
  9. json for java
  10. Windows Phone开发手记-WinRT下启动器替代方案
  11. 基于jQuery的窗口插件:jMessageBox
  12. php相册上传和删除吗,php上传与删除图片的简单范例
  13. ExtJS2.0开发与实践笔记[4]——Ext中的动画处理
  14. STL中的lower_bound()函数和upper_bound()
  15. iPhone的mysql客户端_苹果系统Sequel Pro—MySQL客户端工具一个大坑
  16. 单例模式之懒汉式(线程安全)
  17. 计算机小喇叭找不到,电脑右下角小喇叭不见了(解决方案)
  18. ZBrush自定义笔刷
  19. windows+ffmpeg+qsv实现inter核显加速视频解码编码
  20. 主板维修从入门到精通

热门文章

  1. Bishops Alliance—— 最大上升子序列
  2. poj2594(二分图,最小路径覆盖变形)
  3. 使 Framework 2.0 的程序集不用安装 Framework 就可以运行的工具免费发布了
  4. css3自适应布局单位vw,vh
  5. Swift傻傻分不清楚系列(十二) 属性
  6. iOS sha1加密算法
  7. 一篇能加深理解linux 虚拟文件系统的博文
  8. 20155204 2016-2017-2 《Java程序设计》第8周学习总结
  9. DB2 数据库清表语句
  10. “北航Clubs” Alpha版发布!