The patch was created as a workaround to an issue from in kodi (apologies,
it's a rather long thread):
https://forum.kodi.tv/showthread.php?tid=350901&pid=2923550#pid2923550

As an example, here is a URL: rtp://87.141.215.251@232.0.10.234:10000

Taking this URL we should be able to either reformat it to: rtp://
232.0.10.234:10000?sources=87.141.215.251 or pass the sources as an av_dict
to avfomat_open_input.

Neither option works however. Instead the above workaround was created but
it's not really the right way to fix this. Would be great to get some
guidance on the right place to fix this in the right way.

Thanks in advance.

On Wed, 12 Feb 2020 at 19:40, phunkyfish <phunkyf...@gmail.com> wrote:

> ---
>  libavformat/rtsp.c | 26 ++++++++++++++++++++++++--
>  1 file changed, 24 insertions(+), 2 deletions(-)
>
> diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c
> index 859defa592..f922055134 100644
> --- a/libavformat/rtsp.c
> +++ b/libavformat/rtsp.c
> @@ -2334,7 +2334,9 @@ static int sdp_read_header(AVFormatContext *s)
>      RTSPStream *rtsp_st;
>      int size, i, err;
>      char *content;
> +    const char *p, *sp="", *sources="", *sp2, *sources2;
>      char url[1024];
> +    char sources_buf[1024];
>
>      if (!ff_network_init())
>          return AVERROR(EIO);
> @@ -2360,6 +2362,16 @@ static int sdp_read_header(AVFormatContext *s)
>      av_freep(&content);
>      if (err) goto fail;
>
> +    /* Search for sources= tag in original URL for rtp protocol only */
> +    if (strncmp(s->url, "rtp://", 6) == 0) {
> +        p = strchr(s->url, '?');
> +        if (p && av_find_info_tag(sources_buf, sizeof(sources_buf),
> "sources", p)) {
> +            /* av_log(s, AV_LOG_VERBOSE, "sdp_read_header found sources
> %s\n", sources_buf);  */
> +            sp = sources_buf;
> +            sources = "&sources=";
> +        }
> +    }
> +
>      /* open each RTP stream */
>      for (i = 0; i < rt->nb_rtsp_streams; i++) {
>          char namebuf[50];
> @@ -2377,12 +2389,22 @@ static int sdp_read_header(AVFormatContext *s)
>                  av_dict_free(&opts);
>                  goto fail;
>              }
> +
> +            /* Prepare to add sources to the url to be opened.
> +               Otherwise the join to the source specific muliticast will
> be missing */
> +            sources2 = sources;
> +            sp2 = sp;
> +            /* ignore sources from original URL, when sources are already
> set in rtsp_st */
> +            if (rtsp_st->nb_include_source_addrs > 0)
> +                sources2 = sp2 = "";
> +
>              ff_url_join(url, sizeof(url), "rtp", NULL,
>                          namebuf, rtsp_st->sdp_port,
> -
> "?localport=%d&ttl=%d&connect=%d&write_to_source=%d",
> +
> "?localport=%d&ttl=%d&connect=%d&write_to_source=%d%s%s",
>                          rtsp_st->sdp_port, rtsp_st->sdp_ttl,
>                          rt->rtsp_flags & RTSP_FLAG_FILTER_SRC ? 1 : 0,
> -                        rt->rtsp_flags & RTSP_FLAG_RTCP_TO_SOURCE ? 1 :
> 0);
> +                        rt->rtsp_flags & RTSP_FLAG_RTCP_TO_SOURCE ? 1 : 0,
> +                        sources2, sp2);
>
>              append_source_addrs(url, sizeof(url), "sources",
>                                  rtsp_st->nb_include_source_addrs,
> --
> 2.20.1 (Apple Git-117)
>
>
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to