From 29f7f1a57d8b4366d68c20eec090a7a5c641ff38 Mon Sep 17 00:00:00 2001 From: fmcloudconsulting <170678386+fmcloudconsulting@users.noreply.github.com> Date: Mon, 16 Dec 2024 22:50:35 +0100 Subject: [PATCH] feat: accept rtsp client without interleaved parameter --- pkg/rtsp/server.go | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/pkg/rtsp/server.go b/pkg/rtsp/server.go index c96125a2..b59d9abf 100644 --- a/pkg/rtsp/server.go +++ b/pkg/rtsp/server.go @@ -148,25 +148,30 @@ func (c *Conn) Accept() error { Request: req, } - const transport = "RTP/AVP/TCP;unicast;interleaved=" - if tr = core.Between(tr, "interleaved=", ";"); tr != "" { - c.session = core.RandString(8, 10) - c.state = StateSetup + const transport = "RTP/AVP/TCP;unicast" - if c.mode == core.ModePassiveConsumer { - if i := reqTrackID(req); i >= 0 && i < len(c.Senders) { - // mark sender as SETUP - c.Senders[i].Media.ID = MethodSetup - tr = fmt.Sprintf("%d-%d", i*2, i*2+1) - res.Header.Set("Transport", transport+tr) + c.session = core.RandString(8, 10) + c.state = StateSetup + + if c.mode == core.ModePassiveConsumer { + if i := reqTrackID(req); i >= 0 && i < len(c.Senders) { + // mark sender as SETUP + c.Senders[i].Media.ID = MethodSetup + interleaved := fmt.Sprintf("%d-%d", i*2, i*2+1) + + // Check if transport already contains the 'interleaved' parameter + if strings.Contains(transport, "interleaved=") { + // If so, just update the interleaved value + res.Header.Set("Transport", strings.Replace(transport, "interleaved=[^;]*", "interleaved="+interleaved, 1)) } else { - res.Status = "400 Bad Request" + // Otherwise, append the interleaved parameter + res.Header.Set("Transport", transport+";interleaved="+interleaved) } } else { - res.Header.Set("Transport", transport+tr) + res.Status = "400 Bad Request" } } else { - res.Status = "461 Unsupported transport" + res.Header.Set("Transport", tr) } if err = c.WriteResponse(res); err != nil {