avformat_open_input()有什么作用?

时间:2013-01-03 07:17:03

标签: c ffmpeg

我正在关注this代码以使用C中的ffmpeg库。 ffmpeg库的文档很少,很难理解每个函数究竟做了什么 我理解代码(正在做什么)。但我缺乏清晰度。有人可以帮帮我吗?

Q1) struct AVFrameContext ****和** filename (需要的最小非NULL参数)被传递给函数avformat_open_input()。顾名思义,输入文件是“打开”的。怎么样?

2 个答案:

答案 0 :(得分:5)

在file_open中完成的主要工作是

  • 为AVFormatContext分配内存。
  • 从文件(输入网址)
  • 中读取有关数据的probe_size
  • 试图猜测输入文件格式,输入文件的编解码器参数。这是通过为每个分路器
  • 调用read_probe函数指针来完成的
  • 分配编解码器上下文,解复用的上下文,I / O上下文。

答案 1 :(得分:3)

你可以在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