参考https://blog.csdn.net/leixiaohua1020/article/details/14214705

AVFormatContext: 用来存储视音频封装格式(flv,mp4,rmvb,avi)中包含的所有信息 很多函数都要用到它作为参数。

AVFormatContext结构体如下所示(显示部分成员,后续深入添加):

typedef struct AVFormatContext {

    const AVClass *av_class;    //包含AVCodecContext, AVFormatContext 

    /**
* The input container format.
*
* Demuxing only, set by avformat_open_input().
*/
ff_const59 struct AVInputFormat *iformat; //AVInputFormat:封装格式(flv、mkv、avi等),调用avformat_open_input()时,该成员就会被初始化 ff_const59 struct AVOutputFormat *oformat; //输入的封装格式(生成视频),调用avformat_write_header()时,该成员就会被初始化 unsigned int nb_streams; //AVFormatContext中的流个数,一般为2,如果要设置,则只能通过avformat_new_stream()来设置 AVStream **streams; //输入视频的AVStream流数组,通过avformat_open_input()来初始化流信息 #if FF_API_FORMAT_FILENAME attribute_deprecated
char filename[]; //输入输出文件名路径,通过avformat_open_input()和avformat_write_header()来设置
#endif char *url; //输入或输出URL,与filename字段不同,此字段没有长度限制。通过avformat_open_input()和avformat_write_header()来设置 /**
* Position of the first frame of the component, in
* AV_TIME_BASE fractional seconds. NEVER set this value directly:
* It is deduced from the AVStream values.
*
* Demuxing only, set by libavformat.
*/
int64_t start_time; //第一帧的时间位置,一般为0 int64_t duration; //输入视频总时长,以微妙为单位,换算以秒为单位: duration/AV_TIME_BASE /**
* Total stream bitrate in bit/s, 0 if not
* available. Never set it directly if the file_size and the
* duration are known as FFmpeg can compute it automatically.
*/
int64_t bit_rate; //输入视频的码率,单位为bit/s unsigned int packet_size;
int max_delay; const uint8_t *key;
int keylen; unsigned int nb_programs;
AVProgram **programs; enum AVCodecID video_codec_id; //需要强制设置的视频编码id,默认为0,自动设置 enum AVCodecID audio_codec_id; //需要强制设置的音频编码id,默认为0,自动设置 enum AVCodecID subtitle_codec_id;//需要强制设置的字幕编码id,默认为0,自动设置 AVDictionary *metadata; //整个文件的元数据,可以通过通过av_dict_get()函数获得视频的原数据,AVDictionary包含两个成员key和value
//使用循环读出
//(需要读取的数据,字段名称,前一条字段(循环时使用),参数)
//while(m=av_dict_get(pFormatCtx->metadata,"",m,AV_DICT_IGNORE_SUFFIX)){
// key.Format(m->key);
// value.Format(m->value);
// qDebug()<<"key-value:"<<key<<"\t:"+value+"\r\n" ;
//} int64_t start_time_realtime; //流的实际启动时间,以微秒为单位 int probe_score; //格式探测得分,100是最大的分数,这意味着FFmpeg确信格式是真实的 AVCodec *video_codec; //用户设置的强制视频解码器,如果用户未设置,就为NULL AVCodec *audio_codec; //用户设置的强制音频解码器 AVCodec *subtitle_codec; //用户设置的强制字幕解码器 ... ...
} AVFormatContext;

其中iformat成员就是指向视频/音频流的封装格式(flv、mkv、avi等)具体结构体的指针.

该成员的AVInputFormat结构体如下所示(显示部分成员,后续深入添加):

typedef struct AVInputFormat
{ const char *name; // 封装格式的名字, 比如,“mov” “mp4” 等。 const char *long_name; ///封装格式的长名字
//标示具体的format对应的Context 的size,如:MovContext。 const char *extensions; //扩展名,如果定义了, 则不执行探测视频格式, 通常不使用扩展格式猜测,因为不可靠
//具体的操作函数
int(*read_probe)(AVProbeData*); int(*read_header)(struct AVFormatContext *,AVFormatParameters *ap); int(*read_packet)(struct AVFormatContext *, AVPacket *pkt); int(*read_close)(struct AVFormatContext*); struct AVInputFormat *next; } AVInputFormat

2.AVFormatContext和AVInputFormat的更多相关文章

  1. ffmpeg结构体以及函数介绍(一)

    本文对在使用ffmpeg进行音视频编解码时使用到的一些函数做一个简单介绍,我当前使用的ffmpeg版本为:0.8.5,因为本人发现在不同的版本中,有些函数名称会有点小改动,所以在此有必要说明下ffmp ...

  2. FFmpeg源代码简单分析:avformat_open_input()

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

  3. (转)FFmpeg源代码简单分析:avformat_open_input()

    目录(?)[+] ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结 ...

  4. 音视频处理之FFmpeg封装格式20180510

    一.FFMPEG的封装格式转换器(无编解码) 1.封装格式转换 所谓的封装格式转换,就是在AVI,FLV,MKV,MP4这些格式之间转换(对应.avi,.flv,.mkv,.mp4文件). 需要注意的 ...

  5. [转载] ffmpeg函数介绍

    本文对在使用ffmpeg进行音视频编解码时使用到的一些函数做一个简单介绍,我当前使用的ffmpeg版本为:0.8.5,因为本人发现在不同的版本中,有些函数名称会有点小改动,所以在此有必要说明下ffmp ...

  6. ffmpeg函数介绍

    本文对在使用ffmpeg进行音视频编解码时使用到的一些函数做一个简单介绍,我当前使用的ffmpeg版本为:0.8.5,因为本人发现在不同的版本中,有些函数名称会有点小改动,所以在此有必要说明下ffmp ...

  7. ffmpeg处理rtmp/文件/rtsp的推流和拉流

    ffmpeg处理rtmp/文件/rtsp的推流和拉流   本demo演示了利用ffmpeg从服务器拉流或本地文件读取流,更改流url或文件类型名称发送回服务器或存到本地的作用. 由于本程序只写了3个小 ...

  8. FFmpeg 常用API

    一.通用API 1.1 av_register_all() 初始化 libavformat 和注册所有的复用器.解复用器和协议处理器.如果不调用这个函数,可以调用下面的三个函数来选择支持的格式. 注册 ...

  9. 11.QT-ffmpeg+QAudioOutput实现音频播放器

    1.前言      由于QAudioOutput支持的输入数据必须是原始数据,所以播放mp3,WAV,AAC等格式文件,需要解封装后才能支持播放.      而在QT中,提供了QMediaPlayer ...

随机推荐

  1. Java Redis系列3(Jedis的使用+jedis连接池技术)

    Jedis的使用 什么是Jedis? 一款Java操作redis数据库的工具 使用步骤 1.下载redis所需的java包 2.使用步骤 import org.junit.Test; public c ...

  2. C#LeetCode刷题-二分查找​​​​​​​

    二分查找篇 # 题名 刷题 通过率 难度 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组的中位数(Median of Two Sorted Arrays)-该题未达最优解 30 ...

  3. IDEA 非常重要的一些设置项 → 一连串的问题差点让我重新用回 Eclipse !

    开心一刻 建筑行业内,我看过的最凶残笑话(IT行业内好一致!) 上联:一天晚上两个甲方三更半夜四处催图只好周五加班到周六早上七点画好八点传完九点上床睡觉十分痛苦 下联:十点才过九分甲方八个短信七个电话 ...

  4. Android 开发学习进程0.19 webview 的使用

    Android 中的webview android 中的webview是可以在app内部打开HTML等的网页,不必再打开浏览器,有两种实现方法,即webviewclient webChromeclie ...

  5. 源码剖析Springboot自定义异常

    博主看到新服务是封装的自定义异常,准备入手剖析一下,自定义的异常是如何进行抓住我们请求的方法的异常,并进行封装返回到.废话不多说,先看看如何才能实现封装异常,先来一个示例: @ControllerAd ...

  6. ES6系列之项目中常用的新特性

    ES6系列之项目中常用的新特性 ES6常用特性 平时项目开发中灵活运用ES6+语法可以让开发者减少很多开发时间,提高工作效率.ES6版本提供了很多新的特性,接下来我列举项目中常用的ES6+的特性: l ...

  7. 前端vue2-org-tree实现精美组织架构图

    最近遇到开发组织架构的需求,与以往开发的组织架构不同,不光要展示人名,还要显示职务(或者子公司名称).对应的头像等,并且要考虑,如果用户未上传头像,需使用默认头像(男.女.中性),(⊙o⊙)…要尊重尊 ...

  8. Android PopupWindow显示之后所在的Activity结束的时候出现短暂黑屏问题

    在当前Activity弹出PopuoWindow后,点击取消弹窗,然后结束当前Activity时会出现短暂黑屏现象.这是由于设置背景透明度时候造成的. //设置添加屏幕的背景透明度 public vo ...

  9. SpringSecurity权限管理系统实战—七、处理一些问题

    目录 SpringSecurity权限管理系统实战-一.项目简介和开发环境准备 SpringSecurity权限管理系统实战-二.日志.接口文档等实现 SpringSecurity权限管理系统实战-三 ...

  10. 「查缺补漏」巩固你的RocketMQ知识体系

    Windows安装部署 下载 地址:[https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.5.2/rocketmq-all-4.5.2-bin- ...