X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Frtsp.c;h=7e5985719e90021a89fa1c2193661a64092186e9;hb=bfe92dfe60f601b3f20a918ffcc0acdf40a5955c;hp=dc07422349708b6b513741b2fc1412ea0b98af6b;hpb=9200514ad8717c63f82101dc394f4378854325bf;p=ffmpeg diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c index dc074223497..7e5985719e9 100644 --- a/libavformat/rtsp.c +++ b/libavformat/rtsp.c @@ -242,7 +242,7 @@ static int sdp_parse_rtpmap(AVFormatContext *s, AVCodecParameters *par = st->codecpar; char buf[256]; int i; - AVCodec *c; + const AVCodecDescriptor *desc; const char *c_name; /* See if we can handle this kind of payload. @@ -268,9 +268,9 @@ static int sdp_parse_rtpmap(AVFormatContext *s, par->codec_id = ff_rtp_codec_id(buf, par->codec_type); } - c = avcodec_find_decoder(par->codec_id); - if (c && c->name) - c_name = c->name; + desc = avcodec_descriptor_get(par->codec_id); + if (desc && desc->name) + c_name = desc->name; else c_name = "(null)"; @@ -565,6 +565,10 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1, s1->seen_fmtp = 1; av_strlcpy(s1->delayed_fmtp, buf, sizeof(s1->delayed_fmtp)); } + } else if (av_strstart(p, "ssrc:", &p) && s->nb_streams > 0) { + rtsp_st = rt->rtsp_streams[rt->nb_rtsp_streams - 1]; + get_word(buf1, sizeof(buf1), &p); + rtsp_st->ssrc = strtoll(buf1, NULL, 10); } else if (av_strstart(p, "range:", &p)) { int64_t start, end; @@ -823,7 +827,10 @@ int ff_rtsp_open_transport_ctx(AVFormatContext *s, RTSPStream *rtsp_st) if (!rtsp_st->transport_priv) { return AVERROR(ENOMEM); - } else if (CONFIG_RTPDEC && rt->transport == RTSP_TRANSPORT_RTP) { + } else if (CONFIG_RTPDEC && rt->transport == RTSP_TRANSPORT_RTP && + s->iformat) { + RTPDemuxContext *rtpctx = rtsp_st->transport_priv; + rtpctx->ssrc = rtsp_st->ssrc; if (rtsp_st->dynamic_handler) { ff_rtp_parse_set_dynamic_protocol(rtsp_st->transport_priv, rtsp_st->dynamic_protocol_context, @@ -1326,8 +1333,7 @@ static int rtsp_send_cmd_with_content_async(AVFormatContext *s, ffurl_write(rt->rtsp_hd_out, out_buf, strlen(out_buf)); if (send_content_length > 0 && send_content) { if (rt->control_transport == RTSP_MODE_TUNNEL) { - av_log(s, AV_LOG_ERROR, "tunneling of RTSP requests " - "with content data not supported\n"); + avpriv_report_missing_feature(s, "Tunneling of RTSP requests with content data"); return AVERROR_PATCHWELCOME; } ffurl_write(rt->rtsp_hd_out, send_content, send_content_length); @@ -1466,7 +1472,7 @@ int ff_rtsp_make_setup_request(AVFormatContext *s, const char *host, int port, /* we will use two ports per rtp stream (rtp and rtcp) */ j += 2; err = ffurl_open(&rtsp_st->rtp_handle, buf, AVIO_FLAG_READ_WRITE, - &s->interrupt_callback, &opts, rt->protocols); + &s->interrupt_callback, &opts, rt->protocols, NULL); av_dict_free(&opts); @@ -1610,7 +1616,7 @@ int ff_rtsp_make_setup_request(AVFormatContext *s, const char *host, int port, ff_url_join(url, sizeof(url), "rtp", NULL, namebuf, port, "%s", optbuf); if (ffurl_open(&rtsp_st->rtp_handle, url, AVIO_FLAG_READ_WRITE, - &s->interrupt_callback, NULL, rt->protocols) < 0) { + &s->interrupt_callback, NULL, rt->protocols, NULL) < 0) { err = AVERROR_INVALIDDATA; goto fail; } @@ -1804,7 +1810,7 @@ redirect: ff_url_join(tcpname, sizeof(tcpname), lower_rtsp_proto, NULL, host, port, NULL); if (ffurl_open(&rt->rtsp_hd, tcpname, AVIO_FLAG_READ_WRITE, - &s->interrupt_callback, NULL, rt->protocols) < 0) { + &s->interrupt_callback, NULL, rt->protocols, NULL) < 0) { err = AVERROR(EIO); goto fail; } @@ -2311,7 +2317,7 @@ static int sdp_read_header(AVFormatContext *s) rtsp_st->nb_exclude_source_addrs, rtsp_st->exclude_source_addrs); err = ffurl_open(&rtsp_st->rtp_handle, url, AVIO_FLAG_READ_WRITE, - &s->interrupt_callback, &opts, rt->protocols); + &s->interrupt_callback, &opts, rt->protocols, NULL); av_dict_free(&opts); @@ -2388,7 +2394,7 @@ static int rtp_read_header(AVFormatContext *s) } ret = ffurl_open(&in, s->filename, AVIO_FLAG_READ, - &s->interrupt_callback, NULL, rt->protocols); + &s->interrupt_callback, NULL, rt->protocols, NULL); if (ret) goto fail;