[FFmpeg-devel] fix:?==?utf-8?q? rtsp/transport parser should accept comma for parameters
    abalam 
    abalam at aewd.net
       
    Fri May  1 21:52:55 EEST 2020
    
    
  
I needed this fix to make [Shinobi](https://github.com/ShinobiCCTV/Shinobi) works with recent chinese cameras.
We can read that FFmpeg is perfectly following the [RTSP specs](https://tools.ietf.org/html/rfc2326#page-58) : 
`Transports are comma separated, listed in order of preference. Parameters may be added to each transport, separated by a semicolon.`
But considering:
- VLC is working smart with not perfect cameras ;
- RTSP module in FFmpeg is not programmed to handle more than one transport ; 
=> this fix could be useful to anyone
I also think this fix might be improved by a better scan of parameters if ffmpeg wants to handle more than one transport.
Details: 
I'm using [Shinobi](https://github.com/ShinobiCCTV/Shinobi) to record cameras rtsp streams
For several cameras, cheap chinese ones, VLC is working to get stream but FFmpeg always crashes after it receives the RTSP transports parameters available.
`Transport: RTP/AVP;unicast;mode=PLAY;source=192.168.66.164;client_port=11658-11659;server_port=40000-40001,ssrc=FFFFCCCC`
After debugging the source code, it appears that FFmpeg is not considering that a comma `,` before `ssrc` is a correct separator and think it's a second transport.
Then it crashes because RTSP don't want to accept more than one transport.
( This was closed PR https://github.com/FFmpeg/FFmpeg/pull/336 )
Thank you for having read,
Keep good work and have a nice day!
---
 libavformat/rtsp.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c
index b2b3f32011..f77de10119 100644
--- a/libavformat/rtsp.c
+++ b/libavformat/rtsp.c
@@ -1001,11 +1001,9 @@ static void rtsp_parse_transport(AVFormatContext *s,
             while (*p != ';' && *p != '\0' && *p != ',')
                 p++;
-            if (*p == ';')
+            if (*p == ';' || *p == ',')
                 p++;
         }
-        if (*p == ',')
-            p++;
         reply->nb_transports++;
         if (reply->nb_transports >= RTSP_MAX_TRANSPORTS)
--
2.21.1 (Apple Git-122.3)
    
    
More information about the ffmpeg-devel
mailing list