From 834b079b78b4641ee3a66598ccdab45d341749d3 Mon Sep 17 00:00:00 2001 From: Alessandro Ros Date: Sun, 7 Dec 2025 11:38:52 +0100 Subject: [PATCH] rtsp: fix crash when setupping tracks between stream changes (#5253) (#5257) --- internal/servers/rtsp/session.go | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/internal/servers/rtsp/session.go b/internal/servers/rtsp/session.go index 1cf63907..fd9e1f03 100644 --- a/internal/servers/rtsp/session.go +++ b/internal/servers/rtsp/session.go @@ -194,6 +194,13 @@ func (s *session) onAnnounce(c *conn, ctx *gortsplib.ServerHandlerOnAnnounceCtx) }, nil } +func (s *session) rtspStream() *gortsplib.ServerStream { + if !s.isTLS { + return s.stream.RTSPStream(s.rserver) + } + return s.stream.RTSPSStream(s.rserver) +} + // onSetup is called by rtspServer. func (s *session) onSetup(c *conn, ctx *gortsplib.ServerHandlerOnSetupCtx, ) (*base.Response, *gortsplib.ServerStream, error) { @@ -226,7 +233,7 @@ func (s *session) onSetup(c *conn, ctx *gortsplib.ServerHandlerOnSetupCtx, } switch s.rsession.State() { - case gortsplib.ServerSessionStateInitial, gortsplib.ServerSessionStatePrePlay: // play + case gortsplib.ServerSessionStateInitial: // play path, stream, err := s.pathManager.AddReader(defs.PathAddReaderReq{ Author: s, AccessRequest: defs.PathAccessRequest{ @@ -261,16 +268,14 @@ func (s *session) onSetup(c *conn, ctx *gortsplib.ServerHandlerOnSetupCtx, s.path = path s.stream = stream - var rstream *gortsplib.ServerStream - if !s.isTLS { - rstream = stream.RTSPStream(s.rserver) - } else { - rstream = stream.RTSPSStream(s.rserver) - } - return &base.Response{ StatusCode: base.StatusOK, - }, rstream, nil + }, s.rtspStream(), nil + + case gortsplib.ServerSessionStatePrePlay: // play, subsequent calls + return &base.Response{ + StatusCode: base.StatusOK, + }, s.rtspStream(), nil default: // record return &base.Response{