1,首先从ffplay.c main()
is = stream_open(input_filename, file_iformat);
2,在straem_open里面
is->read_tid = SDL_CreateThread(read_thread, is);
3,read_thread
err = avformat_open_input(&ic, is->filename, is->iformat, &format_opts);
4,avformat_open_input
if ((ret = init_input(s, filename, &tmp)) < 0
真正的好戏是从init_input();开始的。
我们的目标是想要知道怎样和服务器进行RTSP报文交互的,所以第一个要从输入的网址里面解析知道这要走RTSP协议
探测过程:
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) {
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 "
"will be ignored with AVFMT_NOFILE format.\n");
return 0;
}
if ((s->iformat && s->iformat->flags & AVFMT_NOFILE) ||
(!s->iformat && (s->if