FFMEPG函数avformat_find_stream_info作用

来源:互联网 发布:淘宝买家退款流程 编辑:程序博客网 时间:2024/06/03 21:14

现象:

FFMPEG打开媒体文件并查看媒体文件相关信息流程如下:

  • avformat_open_input;
  • avformat_find_stream_info;
  • av_dump_format;

针对同一个媒体文件,不调用与调用avformat_find_stream_info函数获取的媒体文件相关信息如下:

  • 未调用avformat_find_stream_info信息:
    这里写图片描述

  • 调用avformat_find_stream_info信息:
    这里写图片描述

从上述对比中可看出视频流和音频流所获取的信息的不同,调用了avformat_find_stream_info获取到的音视频流信息更完整,其中音频部分未调用avformat_find_stream_info时获取到的音频采样率是24000Hz,调用avformat_find_stream_info之后显示的音频采样率为48000Hz,为什么同一个文件会显示不同呢?


现象分析:

我们通过MediaInfo分析此媒体文件的音频信息得到的结果如下:
这里写图片描述

可以发现音频流格式是AAC,但是格式概况显示HE-AAC/LC两种,采样率显示48.0kHz/24.0kHz,其实也就是HE-AAC对应48.0kHz采样率,而LC对应24.0kHz的采样率,出现这样的现象表示如果解码器支持HE-AAC格式解码,则选择48.0kHz采样率,如果只支持LC格式则只能选择24.0kHz采样率来解码,至于HE-AAC和LC这些音频相关的知识,这里就不做详细介绍,后续有专门文章来详细说明。
如果我们不调用avformat_find_stream_info则获取到的采样率是24.0kHz,但是采样大小和声道个数获取到的是对应48.0kHz的,这个时候去播放音频,则声音是不正常的。
为什么调用了avformat_find_stream_info之后,就能获取正确的采样率呢,因为avformat_find_stream_info内部会根据不同的流去打开对应的解码器并实际进行解码来获取到每条媒体流真正的参数信息,也就是说调用avformat_find_stream_info之后,FFMEPG发现可支持音频流的HE-AAC格式,于是就把音频的采样率设置为48.0kHz。


总结:

调用avformat_open_input之后,我们无法获取到正确的媒体参数,所以还得要调用avformat_find_stream_info进一步的去获取。

原创粉丝点击