avformatopeninput() 函数是用于打开媒体文件并获取媒体文件信息的函数,该函数定义在libavformat/avformat.h中。
函数声明:
int avformat_open_input(AVFormatContext **ps, const char *url,const AVInputFormat *fmt, AVDictionary **options);
该函数的参数含义如下:
ps:AVFormatContext结构体的指针。该参数用于存储打开的媒体文件的信息。当该函数成功返回时,AVFormatContext结构体中将存储媒体文件的相关信息。
url:要打开的媒体文件的URL。可以是本地文件路径,也可以是HTTP URL或其他协议的URL。
fmt:AVInputFormat结构体的指针,用于指定媒体文件的格式。如果该参数为NULL,则根据文件扩展名自动选择输入格式。
options:AVDictionary结构体的指针,用于传递打开媒体文件时的选项。
具体函数如下:
Init_input探测数据类型
流程如下:
flowchart TDA["init_input开始"] --> B{"s->pb 是否已存在?<br>(已传入自定义IO上下文)"}B -- 是 --> C["设置 AVFMT_FLAG_CUSTOM_IO 标志"]C --> D{"s->iformat 是否已指定?"}D -- 否 --> E["调用 av_probe_input_buffer2<br>从数据流中探测格式"]D -- 是 --> F{"格式是否有 AVFMT_NOFILE 标志?"}F -- 是 --> G["记录警告日志"]G --> H["返回 0"]F -- 否 --> HB -- 否 --> I{"是否无需打开文件即可探测格式?<br>(格式已知或基于文件名/扩展名)"}I -- 是 --> J["返回探测分数 (score)"]I -- 否 --> K["调用 s->io_open 打开文件<br>建立 AVIOContext (s->pb)"]K --> L{"s->iformat 是否已指定?"}L -- 是 --> M["返回 0"]L -- 否 --> N["调用 av_probe_input_buffer2<br>从新打开的数据流中探测格式"]E --> HN --> O["返回探测结果"]
函数如下: