rtsptransport: support single port for client_port and server_port
authorMathieu Duponchelle <mathieu@centricular.com>
Fri, 4 Sep 2020 19:09:17 +0000 (21:09 +0200)
committerMathieu Duponchelle <mathieu@centricular.com>
Fri, 9 Oct 2020 21:43:33 +0000 (23:43 +0200)
This is explicitly specified as valid in the RFC, where the
syntax for both parameters is:

";" "client_port" "=" port [ "-" port ]
";" "server_port" "=" port [ "-" port ]

This is useful for applications where RTCP is either not necessary
or not possible.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/846>

gst-libs/gst/rtsp/gstrtsptransport.c

index 2884c55..3a48e5c 100644 (file)
@@ -700,7 +700,11 @@ gst_rtsp_transport_as_text (GstRTSPTransport * transport)
       if (transport->client_port.min < 65536
           && transport->client_port.max < 65536) {
         g_ptr_array_add (strs, g_strdup (";client_port="));
-        g_ptr_array_add (strs, range_as_text (&transport->client_port));
+        if (transport->client_port.max > 0)
+          g_ptr_array_add (strs, range_as_text (&transport->client_port));
+        else
+          g_ptr_array_add (strs, g_strdup_printf ("%d",
+                  transport->client_port.min));
       } else
         goto invalid_transport;
     }
@@ -711,7 +715,11 @@ gst_rtsp_transport_as_text (GstRTSPTransport * transport)
       if (transport->server_port.min < 65536
           && transport->server_port.max < 65536) {
         g_ptr_array_add (strs, g_strdup (";server_port="));
-        g_ptr_array_add (strs, range_as_text (&transport->server_port));
+        if (transport->server_port.max > 0)
+          g_ptr_array_add (strs, range_as_text (&transport->server_port));
+        else
+          g_ptr_array_add (strs, g_strdup_printf ("%d",
+                  transport->server_port.min));
       } else
         goto invalid_transport;
     }