常用结构体汇总
FFmpeg里面最常用的数据结构,按功能可大致分为以下几类(以下代码行数,以branch: origin/release/3.4为准):
封装格式
- AVFormatContext - 描述了媒体文件的构成及基本信息,是统领全局的基本结构体,贯穿程序始终,很多函数都要用它作为参数;
- AVInputFormat - 解复用器对象,每种作为输入的封装格式(例如FLV、MP4、TS等)对应一个该结构体,如libavformat/flvdec.c的ff_flv_demuxer;
- AVOutputFormat - 复用器对象,每种作为输出的封装格式(例如FLV, MP4、TS等)对应一个该结构体,如libavformat/flvenc.c的ff_flv_muxer;
- AVStream - 用于描述一个视频/音频流的相关数据信息。
编解码
- AVCodecContext - 描述编解码器上下文的数据结构,包含了众多编解码器需要的参数信息;
- AVCodec - 编解码器对象,每种编解码格式(例如H.264、AAC等)对应一个该结构 体,如libavcodec/aacdec.c的ff_aac_decoder。每个AVCodecContext中含有一个AVCodec
- AVCodecParameters - 编解码参数,每个AVStream中都含有一个AVCodecParameters,用来存放当前流的编解码参数
网络协议
- AVIOContext - 管理输入输出数据的结构体;
- URLProtocol - 描述了音视频数据传输所使用的协议,每种传输协议(例如HTTP、RTMP)等,都会对应一个URLProtocol结构,如libavformat/http.c中的ff_http_protocol
- URLContext - 封装了协议对象及协议操作对象。
数据存放
- AVPacket - 存放编码后、解码前的压缩数据,即ES数据;
- AVFrame - 存放编码前、解码后的原始数据,如YUV格式的视频数据或PCM格式的音频数据等;
上述结构体的关系图如下所示(箭头表示派生出):