前几篇说的都还是数据源文件格式解析部分,哪么解析完后呢,读出的数据流保存在哪呢?正是现在讲的AVStream对像,在AVInputFormat的read_header中初始化AVFormatContext对像时,他会解析出该输入文件有哪些类型的数据流,并初始化AVFormatContext的AVStream *streams[MAX_STREAMS];一个AVStream代表一个流对像,如音频流、视频流,nb_streams记录流对像个数。主版本号大于53时MAX_STREAMS为100,小于53为20。AVStream也是个容器,其
void *priv_data;//
成员变量指向具体的Stream类型对像,如AVIStream。其
AVCodecContext *actx;//记录具体的编解容器,这个下面会讲
也在这读头文件信息里初始化。
主要相关的函数有
int av_open_input_file(AVFormatContext **ic_ptr, const char *filename,
AVInputFormat *fmt,
int buf_size,
AVFormatParameters *ap)
{
av_open_input_stream(AVFormatContext **ic_ptr,ByteIOContext *pb, const char *filename,AVInputFormat *fmt, AVFormatParameters *ap)
{
fmt.read_header()//调用具体的AVInputFormat的read_header,如avi_read_header
{
//根据文件头信息初始化AVStream *streams及AVStream里的
//void *priv_data和AVCodecContext *actx;成员对像
}
}
}