FFMpeg分析3:AVFormatContext和AVIContext、FLVContext等XXXContext

来源:互联网 发布:网络联合电视台 编辑:程序博客网 时间:2024/05/21 08:41

     AVFormatContext在FFMpeg里是一个非常重要的的结构,是其它输入、输出相关信息的一个容器,需要注意的是其中两个成员:

 struct AVInputFormat *iformat;//数据输入格式
 struct AVOutputFormat *oformat;//数据输出格式
这两个成员不能同时赋值,即AVFormatContext不能同时做为输入、输出格式的容器。AVFormatContext和AVIContext、FLVContext等XXXContext之间像前面讲的URLContext和URLProtocol的关系一样,是一种"多态"关系,即AVFormatContext对像记录着运行时大家共有的信息,而各个XXXContext记录自己文件格式的信息,如AVIContext、FLVContext等。AVInputFormat->priv_data_size记录相对应的XXXContext的大小,该值大小在编译时静态确定。AVFormatContext的void *priv_data记录XXXContext指针。
AVFormatContext对像的初始化主要在AVInputFormat的read_header函数中进行,read_header是个函数指针,指向
具体的文件类型的read_header,如flv_read_header(),avi_read_header()等,AVFormatContext、AVInputFormat和XXXContext组成一起共同完成数据输入模块,可以出来粗鲁的认为,AVFormatContext是一个类容器,AVInputFormat是这个类的操作函数集合,XXXContext代表该类的私有数据对像。AVFormatContext还有个重要的成员 AVStream *streams[MAX_STREAMS];也是在read_header里初始化,这个等会儿再讲。
原创粉丝点击