8

我正在按照代码使用 C 中的 FFmpeg 库。FFmpeg 库的文档很少,很难理解每个函数的确切作用。

我理解代码(正在做什么)。但我缺乏清晰度。谁能帮帮我?

Q1) **struct AVFrameContext **** 和文件名(所需的最少非 NULL 参数)被传递给函数 avformat_open_input()。顾名思义,输入文件是“打开的”。如何 ?

4

2 回答 2

6

在 file_open 中完成的主要事情是

  • 为 AVFormatContext 分配内存。
  • 从文件中读取有关数据的probe_size(输入url)
  • 尝试猜测输入文件格式,输入文件的编解码器参数。这是通过为每个解复用器调用 read_probe 函数指针来完成的
  • 分配编解码器上下文、解复用上下文、I/O 上下文。
于 2013-01-03T10:05:02.663 回答
4

你可以在 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
于 2013-01-03T07:35:10.130 回答