FFMPEG中最关键的结构体,主要用于解协议,解封装,解码以及存数据。
解协议(http,rtsp,rtmp,mms):
AVIOContext,URLProtocol,URLContext主要存储视音频使用的协议的类型以及状态。URLProtocol存储输入视音频使用的封装格式。每一种协议都对应一个URLProtocol结构。
解封装(flv,avi,rmvb,mp4):
AVFormatContext主要存储视音频封装格式中包含的信息;AVInputFormat 存储输入音视频使用的封装格式,每种音视频封装格式都对应一个AVInputFormat 结构
解码(h264,mpeg2,aac,mp3,ogg等):
每个AVStream存储一个视音频流的相关数据;每个AVStream对应一个AVCodecContext,存储该视音频流使用解码方式的相关数据;每个AVCodecContext中对应一个AVCodec,包含该视音频对应的解码器。每个解码器都对应一个AVCodec结构。
存数据:(主要是包packet和frame)
数据中每个packet可能包含多个frame,需要通过解码将packet中frame提取出来。视频每个frame都是一帧,音频要好几个frame
解码前的数据为:AVPacket;
解码后的数据为:AVFrame
关系如图:(引用雷神的图)
参考雷神的博客:**《FFMPEG中最关键的结构体之间的关系》**