ffmpeg 之 RTSP 二

一 前言

  在《ffmpeg 之 RTSP 一》主要讲解关于RTSP 协议部分, 本文主要讲解关于RTSP 在 ffmpeg 中是如何实现的, 相关代码见libavformat/rtspdec.c , libavformat/rtsp.c.

还是从如下几个函数入手:

AVInputFormat ff_rtsp_demuxer = {
    .name           = "rtsp",
    .long_name      = NULL_IF_CONFIG_SMALL("RTSP input"),
    .priv_data_size = sizeof(RTSPState),
    .read_probe     = rtsp_probe,
    .read_header    = rtsp_read_header,
    .read_packet    = rtsp_read_packet,
    .read_close     = rtsp_read_close,
    .read_seek      = rtsp_read_seek,
    .flags          = AVFMT_NOFILE,
    .read_play      = rtsp_read_play,
    .read_pause     = rtsp_read_pause,
    .priv_class     = &rtsp_demuxer_class,
};

 

二 rtsp_probe()

  在ffmpeg 中是如何识别当前的是rtsp流呢?  答案是根据url ,比较简单直接贴代码。当然不是所有的协议都是判别URL 的, 如HLS 它就需要判别M3U8 内容。

static int rtsp_probe(AVProbeData *p)
{
    if (
#if CONFIG_TLS_PROTOCOL
        av_strstart(p->filename, "rtsps:", NULL) ||
#endif
        av_strstart(p->filename, "rtsp:", NULL))
        return AVPROBE_SCORE_MAX;
    return 0;
}

三 rtsp_read_header()

  

ffmpeg 之 RTSP 二_第1张图片

你可能感兴趣的:(FFMPEG)