[FFmpeg-devel] [PATCH] avformat/rtsp: Fix server compatibility issues with rtspclientsink GStreamer plugin

Paul Orlyk paul.orlyk at gmail.com
Wed Dec 27 15:44:09 EET 2023


mode field in Transport header can be sent in upper case so make string 
comparison case insensitive.
Also, GStreamer expects to see mode=record instead of mode=receive in 
Transport header in response.

Signed-off-by: Paul Orlyk <paul.orlyk at gmail.com>
---
  libavformat/rtsp.c    | 4 ++--
  libavformat/rtspdec.c | 4 ++--
  2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c
index 583f5338e8..61e24a5c7a 100644
--- a/libavformat/rtsp.c
+++ b/libavformat/rtsp.c
@@ -1012,8 +1012,8 @@ static void rtsp_parse_transport(AVFormatContext *s,
                  if (*p == '=') {
                      p++;
                      get_word_sep(buf, sizeof(buf), ";, ", &p);
-                    if (!strcmp(buf, "record") ||
-                        !strcmp(buf, "receive"))
+                    if (!av_strcasecmp(buf, "record") ||
+                        !av_strcasecmp(buf, "receive"))
                          th->mode_record = 1;
                  }
              }
diff --git a/libavformat/rtspdec.c b/libavformat/rtspdec.c
index 39fd92fb66..d6a223cbc6 100644
--- a/libavformat/rtspdec.c
+++ b/libavformat/rtspdec.c
@@ -303,7 +303,7 @@ static int rtsp_read_setup(AVFormatContext *s, char* 
host, char *controlurl)
          rtsp_st->interleaved_min = request.transports[0].interleaved_min;
          rtsp_st->interleaved_max = request.transports[0].interleaved_max;
          snprintf(responseheaders, sizeof(responseheaders), "Transport: "
-                 "RTP/AVP/TCP;unicast;mode=receive;interleaved=%d-%d"
+                 "RTP/AVP/TCP;unicast;mode=record;interleaved=%d-%d"
                   "\r\n", request.transports[0].interleaved_min,
                   request.transports[0].interleaved_max);
      } else {
@@ -333,7 +333,7 @@ static int rtsp_read_setup(AVFormatContext *s, char* 
host, char *controlurl)
           localport = ff_rtp_get_local_rtp_port(rtsp_st->rtp_handle);
          snprintf(responseheaders, sizeof(responseheaders), "Transport: "
-                 "RTP/AVP/UDP;unicast;mode=receive;source=%s;"
+                 "RTP/AVP/UDP;unicast;mode=record;source=%s;"
                   "client_port=%d-%d;server_port=%d-%d\r\n",
                   host, request.transports[0].client_port_min,
                   request.transports[0].client_port_max, localport,
-- 
2.39.2



More information about the ffmpeg-devel mailing list