1 描述

它是一个I/O 和muxing/demuxing库,处理各种媒体容器格式库,主要包括两大功能:demuxing ,如将一个媒体文件拆分成音视频流, muxing,如将音视频数据写入一个媒体文件中。同时它还具有I/O module 可支持各种协议,如文件,tcp,http等等。muing 由AVInputFormat 结构体去描述,相反地,demuxing 由AVOutputFormat 去描述。

AVFormatContext 它是整个AVFormat 的上下文, 所有有关demuxing/muxing 都包含这结构体中。其中最重要的三个成员是:

1 struct AVInputFormat *iformat;/ struct AVOutputFormat *oformat;//muxing/demuxing 上下文

2 AVStream **streams;//存在音视频流

3 AVIOContext *pb;//读取媒体数据。

2 解复用器

解复用器读取媒体文件,并将其分割成数据块(视频/音频/字幕),a packet 包含一个或者多个已编码音视频单元,通过avformat_open_input() 去打开这文件,通过av_read_frame() 去读取数据包,最后通过avformat_close_input去关闭清除。如下表为FFMPEG Demuxing 部分开出来的API ,其定义是在avformat.h 文件中,实现在utils.c 文件中。如下表为demuxing 部分开出的API。在avformat_open_input() 之后,也能读出一些mediainfo 信息,但是要获取更多更完整的mediainfo 信息需要通过avformat_find_stream_info(), 前者只会读取文件头,后者还会解码一些帧。

int av_read_frame(AVFormatContext *s, AVPacket *ptk)  这函数作用是得到stream 的下一帧,如果读取成功将返回0 ,失败或者流结束返回负值, 其中流结束返回的负值是AVERROR_EOF。

3 复用器

复用器接收AVPacket 数据,并将其写入到指定的容器格式,avformat_write_header() 用于写文件头,av_write_frame()/av_interleaved_write_frame() 写数据packet, av_write_tailer() 用于完成文件。

Muxers 以AVPackets 形式接收数据,并写入指定的容器格式。其API 定义与avformat.c,实现位于util.c 中.如下表为muxing 部分开出的API。

本文福利, 免费领取C++音视频学习资料包、技术视频/代码,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,编解码,推拉流,srs)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

4 metadata信息

metadata是描述媒体文件的一些特有信息,比如音乐专辑信息,艺术家等等。被允许在muxing/demuxing 去设置/获取。AVFormatContext,AVStream,AVChapter,和AVProgram         可通过AVDictionary API 设置获取。

5 I/O read/write

ffmpeg 不但可以读取本地文件,同时它还可以读取网络文件,市面上常见的流媒体协议它都支持(如rtmp,rtsp,http等)。同各种容器的媒体文件demuxers一样,不同的协议底层都需有相应的文件去实现,ffmpeg 有对各种协议进行封装,avio.h开出的API 我们可以无感的读取各种协议的数据,如果我们使用ffmpeg 去播放media 的话,关于I/O 操作API 我们都接触不到,因为ffmpeg 内部已经帮我们做好了。AVFormatContext 中有个AVIOContext 结构体,它里面增加I/O读取buff 的管理,在AVIOContext 中的URLContext 成员,对应的就是具体的文件协议,比如rtmp,http,file hls,tcp 等等。它们之间的关系如下图所示:

6 core functions

列出一些查询libavformat 功能,申请core结构体的API。

7 utility functions

描述一些与muxing/demuxing 有关的一些工具函数。在实际编程中,av_dump_format()还是用的比较多的, 比如demux 编程中, 我们初始化程序后,通过av_dump_format() 获取获取当前media 的info ,还是检查是否有初始化成功。

本文福利, 免费领取C++音视频学习资料包、技术视频/代码,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,编解码,推拉流,srs)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

FFmpeg 之 AVFormat相关推荐

  1. FFMPEG 之 AVFormat

    1 描述 它是一个I/O 和muxing/demuxing库,处理各种媒体容器格式库,主要包括两大功能:demuxing ,如将一个媒体文件拆分成音视频流, muxing,如将音视频数据写入一个媒体文 ...

  2. 解密FFmpeg播放track mode控制

    上一篇文章(http://www.cnblogs.com/yangdanny/p/4421130.html)我们解决了在FFmpeg下如何处理H264和AAC的扩展数据,根据解出的NALU长度恢复了H ...

  3. FFMPEG结构体分析之AVFormatContext

    它是FFMPEG解封装(flv,mp4,rmvb,avi)功能的结构体. 接口定义文件路径ffmpeg\libavformat\avformat.h, 看完该结构体的定义,就一句感慨,尼玛好长 /** ...

  4. ffmpeg学习笔记-native原生绘制

    上次已将ffmpeg的动态库编译出来了,并且使用了ffmpeg的转码功能,成功将mp4格式视频转化为yuv视频,这篇文章基于上次测试的demo,使用surfaceview显示解码完成的像素数据 布局设 ...

  5. Windows FFMPEG开发环境配置

    1.去FFMPEG网站上下载Dev版本的库,里面有我们需要的头文件和lib文件,然后下载Shared版本的库,里面有我们需要的dll文件 http://ffmpeg.zeranoe.com/build ...

  6. 详细介绍Qt,ffmpeg 和SDl 教程之间的联系

    Qt与 ffmpeg 与 SDl 教程是本文要介绍的内容,从多个角度介绍本文,运用了qmake,先来看内容. 1.  注释 从" #" 开始,到这一行结束. 2.  指定源文件 1 ...

  7. FFmpeg的C++封装:FFmpegWrapper

    下面介绍的API已过时,请下载最新版本的源代码,并参考其注释.新版本主要由John编写,在旧版本的基础上做了很多改进. 什么是FFmpeg? FFmpeg是一套完整的录制.转换.流化音视频的解决方案, ...

  8. 从零开始学习音视频编程技术(七) FFMPEG Qt视频播放器之SDL的使用

    从零开始学习音视频编程技术(七) FFMPEG Qt视频播放器之SDL的使用 原文地址:http://blog.yundiantech.com/?log=blog&id=10 前面介绍了使用F ...

  9. 从零开始学习音视频编程技术(四) FFMPEG的使用

    零开始学习音视频编程技术(四) FFMPEG的使用 原文地址:http://blog.yundiantech.com/?log=blog&id=7 音视频开发中最常做的就是编解码的操作了,以H ...

最新文章

  1. 进一步掌握linux吧
  2. ArcGIS JS API中切换页面后组件报Tried to register widget with id== but that id is already registered
  3. 使用jQuery清空表单
  4. flex file 文件上传 带参数 php,php+flex打造多文件带进度超级上传
  5. Vue2.0以后,有哪些变化
  6. ★LeetCode(669)——修剪二叉搜索树(JavaScript)
  7. (三)、一步一步学GTK+之布局
  8. C语言随机读写数据文件(二)
  9. 根据 List 元素中的某个字段大小排序
  10. 如何实现和提升软件易用性
  11. 华东师范大学软件工程专硕考研398分复习经验总结
  12. Docker基础之containerd的shim
  13. HDFS与HBASE的动态节点的扩容(增删)小白级(一)
  14. vue3 setup语法糖与原始写法对比
  15. BurnInTest测试固态硬盘详解
  16. java后端返回二进制图片 前端进行展示 详解
  17. TIA博途中变长数组的介绍与使用入门示例
  18. dubbo源码之拦截调用
  19. ​ 斯科特·马特森​与MIMO发明者谈话节选
  20. 子曾经曰过,南风,已在创作的路上了

热门文章

  1. Angular入门教程
  2. CSGO连接到任意服务器失败问题的解决方案(超详细)
  3. android 定位权限权限的获取
  4. 混沌加密学习0.1——2023.4.27
  5. SAP请求TR管理小技巧(持续更新)
  6. Dependency Injection2
  7. LLVM RISCV编译器编译QuickStart
  8. PL/SQL 查询的字段显示不全
  9. c语言200例 016 水池注水问题
  10. 「NOI2016」循环之美 解题报告