原因:由于需要进行RTP拉流分析,故在此分析FFmpeg拉流流程.
概况:FFmpeg通过url进行udp连通,然后通过sps和pps进行解码器参数初始化,然后进行解码。
伪代码详细分析如下:由于输入文件可以是sdp文件,也可是url,故通过avformat_open_input简单分析可知通过输入文件类型,通过源码可以看出无论是文件操作还是协议操作都是定义为URLProtocol类型,故通过url_open打开文件或者udp创建和连接.然后通过read_header进行sdp文件解析.实现在rtsp.c中的sdp_read_header和ff_sdp_parse方法.
int avformat_open_input(AVFormatContext **ps, const char *filename,
AVInputFormat *fmt, AVDictionary **options)
{
if ((ret = init_input(s, filename, &tmp)) < 0)
goto fail;
if (!(s->flags&AVFMT_FLAG_PRIV_OPT) && s->iformat->read_header)
if ((ret = s->iformat->read_header(s)) < 0)
goto fail;
}
//avio.c
int ffurl_connect(URLContext *uc, AVDictionary **options)
{
err =
uc->prot->url_open2 ? uc->prot->url_open2(uc,