fffmeg 通过avformat_open_input函数来打开媒体流.在这个函数中,首先做一些初始化工作,并设置一些option(比如ffplay 里面传入的一些参数),再调用init_input进行probe.
probe是个很关键的步骤,只有通过probe对一个未知的视频源进行分析,得知其具体的格式了,后面才能根据其协议进行解封装,解码,渲染.
我们在这里简单介绍一些probe的过程.
// Open input file and probe the format if necessary. */
static int init_input(AVFormatContext *s, const char *filename,
AVDictionary **options)
{
int ret;
AVProbeData pd = { filename, NULL, 0 };
int score = AVPROBE_SCORE_RETRY;
if (s->pb) { // AVProbeData为不为null的时候,会进来.这里通常不会进来.可能上层设置了pb后会进来
s->flags |= AVFMT_FLAG_CUSTOM_IO;
if (!s->iformat)
return av_probe_input_buffer2(s->pb, &s->iformat, filename,
s, 0, s->format_probesize);
else if (s->iformat->flags & AVFMT_NOFILE)
av_log(s, AV_LOG_WARNING, "Custom AVIOContext makes no sense and "