FFmpeg如何打开文件?
这里主要介绍如何使用 FFmpeg 的 API 函数 avformat_open_input
,avformat_find_stream_info
来打开以及获取一个输入文件的信息。
1:avformat_open_input
打开输入文件,这个函数会生成 AVFormatContext
,函数定义如下:
int avformat_open_input(AVFormatContext **ps, const char *filename,
ff_const59 AVInputFormat *fmt, AVDictionary **options)
参数含义:
char *filename
, 根据文件名的后缀来猜测以什么样的封装格式打开文件,例如 mp4,m4a 后缀的文件 都用 mov 封装格式来打开。AVInputFormat *fmt
,指定某一种格式,不用猜测。options
这个参数,因为每种封装格式都支持很多定制参数的,例如 mp4 封装格式支持movflags:faststart
,这样可以 在录制完成之后把moov
移动到文件头部,这样在网络里面播放 mp4 的时候,就会更快一些。
2:avformat_find_stream_info
探测函数,读取输入文件的一部分信息来分析出 各个流的情况,通常用于一些没有头信息的封装格式,例如 MPEG。定义如下
int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options);
以及与打开输入文件相关的结构体如下:
1, AVFormatContext
,或者叫封装格式上下文。可以理解为 MP4 或者 FLV 的容器。
2,AVStream
,容器里面的流。
扩展知识:avformat_open_input
函数不止可以打开本地文件,还可以打开网络流,例如 rtmp://xxx ,http://xxx ,tcp://xxx,udp://xxx 。
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果