feat: accept rtsp client without interleaved parameter

This commit is contained in:
fmcloudconsulting
2024-12-16 22:50:35 +01:00
committed by GitHub
parent 8ecaabfce9
commit 29f7f1a57d

View File

@@ -148,25 +148,30 @@ func (c *Conn) Accept() error {
Request: req, Request: req,
} }
const transport = "RTP/AVP/TCP;unicast;interleaved=" const transport = "RTP/AVP/TCP;unicast"
if tr = core.Between(tr, "interleaved=", ";"); tr != "" {
c.session = core.RandString(8, 10)
c.state = StateSetup
if c.mode == core.ModePassiveConsumer { c.session = core.RandString(8, 10)
if i := reqTrackID(req); i >= 0 && i < len(c.Senders) { c.state = StateSetup
// mark sender as SETUP
c.Senders[i].Media.ID = MethodSetup if c.mode == core.ModePassiveConsumer {
tr = fmt.Sprintf("%d-%d", i*2, i*2+1) if i := reqTrackID(req); i >= 0 && i < len(c.Senders) {
res.Header.Set("Transport", transport+tr) // 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 { } else {
res.Status = "400 Bad Request" // Otherwise, append the interleaved parameter
res.Header.Set("Transport", transport+";interleaved="+interleaved)
} }
} else { } else {
res.Header.Set("Transport", transport+tr) res.Status = "400 Bad Request"
} }
} else { } else {
res.Status = "461 Unsupported transport" res.Header.Set("Transport", tr)
} }
if err = c.WriteResponse(res); err != nil { if err = c.WriteResponse(res); err != nil {