参考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. 静态代理和动态代理(jdk/cglib)详解

    1.静态代理模式 代理模式上,基本上有Subject角色,RealSubject角色,Proxy角色.其中:Subject角色负责定义RealSubject和Proxy角色应该实现的接口:RealSu ...

  2. TD课程通的使用体验

    这个软件一点进去便是石家庄铁道大学,但是那张图片可以尽量的缩小一点比例,可以选择部分,至少能够让人了解到这是什么,另外,可以添加注册功能,或者是使用学号什么的来登录,亦或者手机号码等,整体的展示效果还 ...

  3. 攻防世界-web(进阶)-NewsCenter

    打开文件发现有个搜索框,考虑是XSS或SQL注入,输入弹框语句不显示考虑到SQL注入,抓包将抓包信息保存为txt,用sqlmap爆破. 输入:sqlmap -r “sql.txt”,输出如下数据库版本 ...

  4. 解析Class文件之创建InstanceKlass对象

    ClassFileParser::parseClassFile()方法会将解析Class文件的大部分结果保存到instanceKlass对象中.创建instanceKlass对象的代码如下: int ...

  5. 0x01 基本算法-位运算 a^b

    #include<bits/stdc++.h>using namespace std;int power(int a, int b, int p){    int ans = 1%p;   ...

  6. graphics.h源代码下载

    graphics.h源代码下载 /*graphics.h DefinitionsforGraphicsPackage. Copyright(c)BorlandInternational1987,198 ...

  7. leetcode刷题记录——链表

    使用java实现链表 单向链表 双向链表 单向循环链表 双向循环链表 题目记录 160.相交链表 例如以下示例中 A 和 B 两个链表相交于 c1: A: a1 → a2 c1 → c2 → c3 B ...

  8. CentOS ISO 下载地址

    x86_64:https://wiki.centos.org/Download ARM:http://mirror.nsc.liu.se/centos-store/altarch/ http://dl ...

  9. 2020.5.24 第四篇 Scrum冲刺博客

    Team:银河超级无敌舰队 Project:招新通 项目冲刺集合贴:链接 目录 一.每日站立会议 1.1 会议照片 1.2 项目完成情况 二.项目燃尽图 三.签入记录 3.1 代码/文档签入记录 3. ...

  10. C# Mongo DB 修改多层嵌套集合中的字段

    C# Mongo DB 修改嵌套集合中的字段 虽然c#的mongo 驱动很强大,而且还支持linq,但是一些复杂的操作语句还是比较困难 这里我用Bson实现功能 这是模型(我这里有多层嵌套) publ ...