ffmpeg之rtsp分析流程

本文详细介绍了FFmpeg在处理RTSP协议时的分析流程,从ffplay.c的main函数开始,经过stream_open、read_thread、avformat_open_input等步骤,重点分析了init_input函数中的探测过程,如何根据URL确定采用RTSP协议。接着讲解了RTSP解码器ff_rtsp_demuxer的使用,以及rtsp_read_header中的关键操作,如ff_rtsp_connect涉及的OPTIONS、DESCRIBE和SETUP请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值