参考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. Go之Gorm和BeegoORM简介及配置使用

    简介 ORM Object-Relationl Mapping, 它的作用是映射数据库和对象之间的关系,方便我们在实现数据库操作的时候不用去写复杂的sql语句,把对数据库的操作上升到对于对象的操作 G ...

  2. MyBatis使用LocalDateTime遇到的一系列问题

    问题 在Mybaits中传入参数为LocalDateTime,查询发现结果集为空,插入时发现时间相差13小时 测试 新建工程,新建测试库(主要此处新工程使用的JDBC为mysql-connector- ...

  3. Android 开发学习进程0.16 layout_weight属性 R文件关联XML Module

    layout_weight属性 layout_weight属性我们常常用到,但有时候会发现它还有一些奇怪的属性,比如大多数使用时会把宽度设置成0,但要是宽度不设置成0会有什么效果? layout_we ...

  4. C++置换的玩笑

    小蒜头又调皮了.这一次,姐姐的实验报告惨遭毒手. 姐姐的实验报告上原本记录着从 1 到 n 的序列,任意两个数字间用空格间隔.但是“坑姐”的蒜头居然把数字间的空格都给删掉了,整个数字序列变成一个长度为 ...

  5. 简单解析PAT、PMT的程序

    刚开始学习有关TS.PAT.PMT方面的内容,参考了别人的一些程序,然后写了一个简单的解析TS的小程序.如果有地方错误,请发邮件给我843036544@qq.com. #include<stdi ...

  6. Spring注解驱动开发02(作用域和懒加载)

    Spring中bean的作用域 默认情况下,Spring只为每个在IOC容器里声明的bean创建唯一一个实例,整个IOC容器范围内都能共享该实例:所有后续的getBean()调用和bean引用都将返回 ...

  7. Linux内核之 内存管理

    前面几篇介绍了进程的一些知识,从这篇开始介绍内存.文件.IO等知识,发现更不好写哈哈.但还是有必要记录下自己的所学所思.供后续翻阅,同时写作也是一个巩固的过程. 这些知识以前有文档涉及过,但是角度不同 ...

  8. Ncdu强大的磁盘查看命令

    简介 项目地址: https://dev.yorhel.nl/ncdu Ncdu (NCurses Disk Usage) 是一个基于 Ncurses 库的 du 命令的界面.它通过大家熟知的 du ...

  9. badger 一个高性能的LSM K/V store

    原文:https://colobu.com/2017/10/11/badger-a-performant-k-v-store/ github地址:https://github.com/dgraph-i ...

  10. pandas参数设置小技巧

    在日常使用pandas的过程中,由于我们所分析的数据表规模.格式上的差异,使得同样的函数或方法作用在不同数据上的效果存在差异. 而pandas有着自己的一套参数设置系统,可以帮助我们在遇到不同的数据时 ...