FFmpeg 基本API av_find_input_format函数内部调用流程分析
1、av_find_input_format 函数定义
av_find_input_format 是 FFmpeg 中用于查找输入格式的函数。它的作用是根据短名称(short_name)来查找对应的 AVInputFormat。AVInputFormat 是 FFmpeg 中表示输入格式的结构体,包含了解复用器的相关信息和操作(例如,读取数据流、提取媒体信息等)。
const AVInputFormat *av_find_input_format(const char *short_name);
参数:
-
short_name:一个指向字符串的指针,表示要查找的输入格式的短名称(例如,“mp4”、“mov”、“avi” 等)。这是用于查找格式的标识符。
返回值: -
返回一个指向 AVInputFormat 的指针,如果找到对应的格式,则返回该格式指针。
-
如果没有找到对应的格式,则返回 NULL。
-
查找指定输入格式:该函数用于根据给定的短名称查找输入格式。当 FFmpeg 需要打开一个输入文件或流时,它会调用该函数来确定该文件或流的格式。
-
输入格式匹配:这个函数会返回匹配的 AVInputFormat,用于后续的解复用操作(例如解码、读取文件等)。
2、av_find_input_format 函数内部调用分析
2.1 遍历格式列表
av_find_input_format 会遍历 FFmpeg 注册的所有输入格式(这些格式存储在一个静态列表中),检查每个格式的 name 是否与给定的 short_name 匹配。
2.2 返回匹配格式
如果找到与 short_name 匹配的格式,返回对应的 AVInputFormat 结构体指针。未找到格式时返回 NULL:如果没有找到匹配的格式,函数会返回 NULL,表示没有找到对应的输入格式。
2.3.使用场景
- 自动格式识别:av_find_input_format 可以用于自动识别输入文件或流的格式。比如,当我们不知道文件的具体格式时,可以通过文件的扩展名或 MIME 类型(如 short_name)来进行匹配。
- 输入流处理:当需要打开并处理输入流(如视频文件、音频文件、流媒体等)时,可以使用 av_find_input_format 来查找合适的输入格式,并通过返回的 AVInputFormat 进行后续处理。