由于项目的需要,最近接触到FFmpeg,但是其中的结构体很多,它们的关系也一直不是很清理。因此,特意整理了一下FFmpeg中关键结构体之间的关系。
本文以rmvb文件的本地播放为例。文件的视频编码为:RV40;音频编码:COOK。FFmpeg版本为:2.2.
整个关系图如下:
注:AVFormatContext的iformat和oformat两个成员不能同时赋值,即ff_rm_demuxer与ff_rm_muxer只能有一个。由于本例是解码,所以,此处应只有ff_rm_demuxer.
各结构体的定义位置如下:
AVFormatContext, AVInputFormat, AVOutputFormat, AVStream: /libavformat/AVformat.h
AVIOContext: /libavformat/Avio.h
URLContext, URLProtocol: /libavformat/Url.h
AVCodecContext, AVCodec, AVCodecParserContext, AVCodecParser: /libavcodec/Avcodec.h
FileContext: /libavformat/File.c
RMDemuxContext: /libavformat/Rmdec.c
RV34DecContext: /libavcodec/Rv34.h
RV34ParseContext: /libavcodec/Rv34_parser.c
COOKContext: /libavcodec/Cook.c
COOKContext: /libavcodec/Cook_parser.c