我遵循这段代码与c中的FFmpeg库一起工作。FFmpeg库的文档很少,很难理解每个函数的确切作用。
我理解代码(正在做什么)。但我说得不够清楚。有人能帮我一下吗?
Q1) A **struct AVFrameContext ****和filename(所需的最小非null参数)被传递给函数avformat_open_input()。顾名思义,输入文件是"打开的"。如何?
在file_open中完成的主要事情是
- 为AVFormatContext分配内存
- 从文件(输入url)中读取probe_size about的数据
- 尝试猜测输入文件的格式、编解码器参数。这是通过为每个demuxer 调用read_probe函数指针来完成的。
- 分配编解码器上下文、解绑定上下文、I/O上下文。
您可以在FFmpeg的libavformatutils.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