avformatopeninput() 函数是用于打开媒体文件并获取媒体文件信息的函数,该函数定义在libavformat/avformat.h中。
函数原型为:
int avformat_open_input(AVFormatContext **ps, const char *url, AVInputFormat *fmt, AVDictionary **options);
该函数的参数含义如下:
ps
:AVFormatContext结构体的指针。该参数用于存储打开的媒体文件的信息。当该函数成功返回时,AVFormatContext结构体中将存储媒体文件的相关信息。
url
:要打开的媒体文件的URL。可以是本地文件路径,也可以是HTTP URL或其他协议的URL。
fmt
:AVInputFormat结构体的指针,用于指定媒体文件的格式。如果该参数为NULL,则根据文件扩展名自动选择输入格式。
options
:AVDictionary结构体的指针,用于传递打开媒体文件时的选项。
下面是一个简单的示例,演示如何打开一个本地MP3文件并获取媒体文件的信息:
#include <libavformat/avformat.h>
int main(int argc, char *argv[]) {
AVFormatContext *fmt_ctx = NULL;
// 打开媒体文件
int ret = avformat_open_input(&fmt_ctx, "example.mp3", NULL, NULL);
if (ret < 0) {
// 打开文件出错
av_log(NULL, AV_LOG_ERROR, "Cannot open input file\n");
return -1;
}
// 获取媒体文件信息
ret = avformat_find_stream_info(fmt_ctx, NULL);
if (ret < 0) {
// 获取文件信息出错
av_log(NULL, AV_LOG_ERROR, "Cannot find stream information\n");
avformat_close_input(&fmt_ctx);
return -1;
}
// 打印媒体文件信息
av_dump_format(fmt_ctx, 0, "example.mp3", 0);
// 关闭媒体文件
avformat_close_input(&fmt_ctx);
return 0;
}
在上面的示例代码中,我们首先声明了一个AVFormatContext结构体,并将其初始化为NULL。然后调用avformatopeninput函数来打开媒体文件,指定了要打开的本地MP3文件的路径。如果打开媒体文件失败,程序将打印出错误信息,并返回-1。
如果成功打开媒体文件,我们继续调用avformatfindstream_info函数来获取媒体文件的相关信息。如果获取信息失败,程序将打印出错误信息,并在关闭文件之前释放AVFormatContext结构体的空间。
最后,我们将格式化输出所有的音视频流信息到标准输出,以便观察和调试。并在最后关闭媒体文件,释放AVFormatContext结构体的空间。