From 637e65e5a059defcdb9ce80eaffec00a01ae3d5d Mon Sep 17 00:00:00 2001 From: Alex X Date: Tue, 18 Feb 2025 12:49:33 +0300 Subject: [PATCH] Code refactoring for RTSP transport header processing --- pkg/rtsp/server.go | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/pkg/rtsp/server.go b/pkg/rtsp/server.go index cefaef1d..29f97b5c 100644 --- a/pkg/rtsp/server.go +++ b/pkg/rtsp/server.go @@ -141,17 +141,14 @@ func (c *Conn) Accept() error { } case MethodSetup: - tr := req.Header.Get("Transport") - res := &tcp.Response{ Header: map[string][]string{}, Request: req, } // Test if client requests TCP transport, otherwise return 461 Transport not supported - // This allows smart clients who initially requested UDP to fall back on TCP transport. - if strings.HasPrefix(tr, "RTP/AVP/TCP") { - + // This allows smart clients who initially requested UDP to fall back on TCP transport + if tr := req.Header.Get("Transport"); strings.HasPrefix(tr, "RTP/AVP/TCP") { c.session = core.RandString(8, 10) c.state = StateSetup @@ -159,16 +156,8 @@ func (c *Conn) Accept() error { 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 tr already contains the 'interleaved' parameter - if strings.Contains(tr, "interleaved=") { - // If so, just update the interleaved value - res.Header.Set("Transport", strings.Replace(tr, "interleaved=[^;]*", "interleaved="+interleaved, 1)) - } else { - // Otherwise, append the interleaved parameter - res.Header.Set("Transport", tr+";interleaved="+interleaved) - } + tr = fmt.Sprintf("RTP/AVP/TCP;unicast;interleaved=%d-%d", i*2, i*2+1) + res.Header.Set("Transport", tr) } else { res.Status = "400 Bad Request" }