C avformat_open_input()的作用是什么?

C avformat_open_input()的作用是什么?,c,ffmpeg,C,Ffmpeg,我下面的代码使用C中的ffmpeg库。ffmpeg库的文档很少,很难理解每个函数的确切功能。 我理解代码(正在执行的操作)。但我不清楚。有人能帮我吗 Q1)将结构AVFrameContext****和**文件名(所需的最小非空参数)传递给函数avformat\u open\u input()。顾名思义,输入文件已“打开”。如何操作?您可以在FFmpeg的libavformat\utils.c中查找它,了解那里真正发生了什么: int avformat_open_input(AVFormatCon

我下面的代码使用C中的ffmpeg库。ffmpeg库的文档很少,很难理解每个函数的确切功能。
我理解代码(正在执行的操作)。但我不清楚。有人能帮我吗


Q1)将结构AVFrameContext****和**文件名(所需的最小非空参数)传递给函数avformat\u open\u input()。顾名思义,输入文件已“打开”。如何操作?

您可以在FFmpeg的
libavformat\utils.c
中查找它,了解那里真正发生了什么:

int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options)
{
    AVFormatContext *s = *ps;
    int ret = 0;
    AVDictionary *tmp = NULL;
    ID3v2ExtraMeta *id3v2_extra_meta = NULL;

    if (!s && !(s = avformat_alloc_context()))
        return AVERROR(ENOMEM);
        // on and on

在file_open中完成的主要事情是

  • 为AVFormatContext分配内存
  • 从文件(输入url)中读取大约大小的数据
  • 尝试猜测输入文件的输入文件格式、编解码器参数。这是通过为每个解复用器调用read_probe函数指针来实现的
  • 分配编解码器上下文、解复用上下文、I/O上下文

ffmpeg
附带源代码,您是否查看了库函数的代码?谢谢你的建议:)我马上去看看:)@RomanR。要求用户阅读FFmpeg的源代码是非常荒谬的,它是一个庞大的代码库,函数名和代码风格最多也很难理解,我要说的是,作为一个为他们扩展了内部解码器的人…@MarcusJ:我认为定位
avformat\u open\u input没有什么可笑的(花几秒钟在给定目录中搜索)并快速查看参数验证以及这里通常发生的情况。最终,其他开发人员会这样做,而不会抱怨。然后这里的问题是“它做了什么?”:所以你打开它,你就会看到它的作用。问题是在avformat\u open\u输入中有3到4个函数调用,而且这些函数中的调用越来越多,它很快就会变得疯狂。感谢你的回答:)我在链接中读到-“函数分配AVFormatContext,打开指定的文件(自动检测格式)并读取标题,将存储在其中的信息导出到我们传递的指针中”。文件中的头是什么?它是文件的前几个字节吗?收割台的大小是否固定?有关探头尺寸的信息是否在标题中?谢谢您的回答。你能详细说明一下吗?:)标头是多路复用文件标头,例如flv标头、mp4标头、avi标头。标题中的信息特定于文件格式。探测大小是ffmpeg“-probesize”的命令行参数。这是ffmpeg用于自动检测文件格式和其他信息(编解码器、宽度、高度……)的数据量。probe_size表示函数决定从打开的文件中“读取”以检测某些重要内容的数据量,对吗?它是固定的吗?您的解释是正确的。它有一个默认值,您可以传递“-probesize”命令行参数来更改它。