[vlc-devel] [PATCH] rtsp: allow multicast port setting in transport section

Vityusha V. Vinokurov vit at trs-sut.ru
Thu Apr 5 16:21:17 CEST 2018


---
 modules/stream_out/rtsp.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/modules/stream_out/rtsp.c b/modules/stream_out/rtsp.c
index 35ee7e7..135af74 100644
--- a/modules/stream_out/rtsp.c
+++ b/modules/stream_out/rtsp.c
@@ -704,8 +704,9 @@ static int RtspHandler( rtsp_stream_t *rtsp, rtsp_stream_id_t *id,
                  tpt != NULL;
                  tpt = transport_next( tpt ) )
             {
-                bool b_multicast = true, b_unsupp = false;
+                bool b_multicast = true, b_unsupp = false, b_multicast_port_set = false;
                 unsigned loport = 5004, hiport; /* from RFC3551 */
+                unsigned mloport = 5004, mhiport = mloport + 1;
 
                 /* Check transport protocol. */
                 /* Currently, we only support RTP/AVP over UDP */
@@ -732,6 +733,10 @@ static int RtspHandler( rtsp_stream_t *rtsp, rtsp_stream_id_t *id,
                                 == 2 )
                         ;
                     else
+                    if( sscanf( opt, "port=%u-%u", &mloport, &mhiport )
+                                == 2 )
+                        b_multicast_port_set = true;
+                    else
                     if( strncmp( opt, "mode=", 5 ) == 0 )
                     {
                         if( strncasecmp( opt + 5, "play", 4 )
@@ -756,7 +761,7 @@ static int RtspHandler( rtsp_stream_t *rtsp, rtsp_stream_id_t *id,
                      * "source" and "append" are invalid (server-only);
                      * "ssrc" also (as clarified per RFC2326bis).
                      *
-                     * For multicast, "port", "layers", "ttl" are set by the
+                     * For multicast, "layers", "ttl" are set by the
                      * stream output configuration.
                      *
                      * For unicast, we want to decide "server_port" values.
@@ -780,6 +785,13 @@ static int RtspHandler( rtsp_stream_t *rtsp, rtsp_stream_id_t *id,
 
                     net_GetPeerAddress(id->mcast_fd, dst, &dport);
 
+                    /* Checking for multicast port override */
+                    if( b_multicast_port_set && dport != mloport)
+                    {
+                        answer->i_status = 551;
+                        continue;
+                    }
+
                     ttl = var_InheritInteger(owner, "ttl");
                     if (ttl <= 0)
                     /* FIXME: the TTL is left to the OS default, we can
-- 
1.9.1



More information about the vlc-devel mailing list