avformat_open_input函数是FFmpeg中的一个重要函数,用于打开输入媒体文件,创建一个AVFormatContext结构体,而且为每位流分配一个AVStream结构体。该函数的使用方式如下:1.初始化AVFormatContext结构体首先须要初始化一个AVFormatContext结构体,可以使用avformat_alloc_context函数来分配显存空间。2.打开输入文件调用avformat_open_input函数来打开输入媒体文件c语言文件流关闭失败,并将文件的信息储存在AVFormatContext结构体中。该函数的原型如下:```cintavformat_open_input(AVFormatContext**ps,constchar*url,AVInputFormat*fmt,AVDictionary**options);```其中,参数ps是一个指向AVFormatContext表针的表针,url是输入媒体文件的路径,fmt是一个AVInputFormat结构体表针,用于指定输入媒体文件的格式,假如设置为NULL,则会手动检查输入文件的格式。
options是一个AVDictionary结构体表针,用于设置一些额外的选项,比如设置输入缓冲区大小等。3.检测AVFormatContext结构体调用avformat_find_stream_info函数来检测AVFormatContext结构体,并获取媒体文件的一些基本信息,比如流的数目、每个流的编码格式等等。该函数的原型如下:```cintavformat_find_stream_info(AVFormatContext*ic,AVDictionary**options);```其中,参数ic是一个指向AVFormatContext结构体的表针,options是一个AVDictionary结构体表针,用于设置一些额外的选项。4.获取流的信息遍历AVFormatContext结构体中的每位AVStream结构体,获取每位流的详尽信息,比如编码格式、码率、时长等等。下边是一个简单的示例代码,演示了怎样使用avformat_open_input函数打开一个媒体文件,并获取每位流的信息:```c#includeintmain(intargc,char*argv[]){AVFormatContext*formatContext=NULL;intret=avformat_open_input(&formatContext,"input.mp4",NULL,NULL);if(ret<0){printf("Failedtoopeninputfile!\n");return-1;}ret=avformat_find_stream_info(formatContext,NULL);if(ret<0){printf("Failedtofindstreaminfo!\n");return-1;}for(inti=0;i