头图

最近在学习ffmpeg,我觉得av_dump_format()函数是它里面最简单的API了。因为它的功能就是打印多媒体文件相关信息,算是最贴近生活的ffmpeg函数。

在使用它之前我们还需要用到一个很重要的API,叫avformat_open_input()。为什么要用它呢?ffmpeg里面对多媒体文件的操作都要通过一个叫AVFormatContext的结构体,而open_input()函数内部会根据多媒体文件给相应的AVFormatContext赋值,之后我们便可以通过操作AVFormatContext来操作该多媒体文件,包括关闭、获取流信息等等。也就是说,open_input()起了一个将多媒体文件和AVFormatContext结构体绑定的作用。这种绑定类似于Linux内核通过文件描述符来访问文件。

一.参数解析
dump_format()函数需要四个参数,分别是通过open_input函数绑定的AVFormatContext指针,索引号,多媒体文件名和是否为输出。其中参数二索引号默认填-1,参数四标识我们要打印信息的文件是否为输出文件,是则填1,否则填0。

二.实际案例
我们的实例打印了“Titanic.mp4”的详细信息,共分为三个步骤:
1.打开多媒体文件
2.打印多媒体文件信息
3.关闭多媒体文件
以下贴上main函数代码。

int ret;
AVFormatContext *fmt_ctx=NULL; 
    
//*1*
ret=avformat_open_input(&fmt_ctx,"Titanic.mp4",NULL,NULL);
if(ret<0)
{
    printf("fail to open input.");
    exit(1);
} 
//*2*
av_dump_format(fmt_ctx,-1,"Titanic.mp4",0);
//*3*
avformat_close_input(&fmt_ctx);

return 0;

三.运行结果

我们可以看见程序打印出了“Titanic.mp4”的metadata元信息、duration时长、bitrate码率、stream流等信息。

image.png


印江
1 声望0 粉丝