ffmpeg avformat
auto url = "D:/music/四季ノ唄.mp3";
AVFormatContext* fmt;
auto ret = avformat_open_input(&fmt, url, nullptr, nullptr);
if (ret < 0)
{
av_log(nullptr, AV_LOG_ERROR, "Cannot open %s format : %s", url, av_err2str(ret));
exit(EXIT_FAILUE);
}
ret = avformat_find_stream_info(fmt, nullptr);
if (ret < 0)
{
av_log(nullptr, AV_LOG_ERROR, "Cannot find stream info : %s", av_err2str(ret));
avformat_close_input(&fmt);
exit(EXIT_FAILURE);
}
av_dump_format(fmt, 0, url, 0);
avformat_close_input(&fmt);
AVFormatContext
用于保存文件的格式信息。
avformat_open_input
用于读取文件头信息,第一个参数就是存储返回信息的地方,第二个是要打开的url,第三个和第四个默认nullptr就好。
avformat_find_stream_info
去读取媒体文件包去获取流信息。
注意: b站的课程中没有使用这个函数直接用av_dump_format
去获取信息。但在7.1版本中需要在调用av_dump_format
前调用av_format_find_stream_info
,否则av_dump_format
会得到无用信息,并且后续的解包解码也是需要这个提前调用这个函数。
关于不使用avformat_find_stream_info
的问题,可以参考这里FFmpeg av_dump_format showing incorrect output, but ffprobe displays correct metadata
av_dump_format
用于直接输出格式信息。
avformat_close_input
则是释放fmt资源防止资源泄露。