Skip to content

Commit 834b079

Browse files
authored
rtsp: fix crash when setupping tracks between stream changes (#5253) (#5257)
1 parent fc8012d commit 834b079

File tree

1 file changed

+13
-8
lines changed

1 file changed

+13
-8
lines changed

internal/servers/rtsp/session.go

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,13 @@ func (s *session) onAnnounce(c *conn, ctx *gortsplib.ServerHandlerOnAnnounceCtx)
194194
}, nil
195195
}
196196

197+
func (s *session) rtspStream() *gortsplib.ServerStream {
198+
if !s.isTLS {
199+
return s.stream.RTSPStream(s.rserver)
200+
}
201+
return s.stream.RTSPSStream(s.rserver)
202+
}
203+
197204
// onSetup is called by rtspServer.
198205
func (s *session) onSetup(c *conn, ctx *gortsplib.ServerHandlerOnSetupCtx,
199206
) (*base.Response, *gortsplib.ServerStream, error) {
@@ -226,7 +233,7 @@ func (s *session) onSetup(c *conn, ctx *gortsplib.ServerHandlerOnSetupCtx,
226233
}
227234

228235
switch s.rsession.State() {
229-
case gortsplib.ServerSessionStateInitial, gortsplib.ServerSessionStatePrePlay: // play
236+
case gortsplib.ServerSessionStateInitial: // play
230237
path, stream, err := s.pathManager.AddReader(defs.PathAddReaderReq{
231238
Author: s,
232239
AccessRequest: defs.PathAccessRequest{
@@ -261,16 +268,14 @@ func (s *session) onSetup(c *conn, ctx *gortsplib.ServerHandlerOnSetupCtx,
261268
s.path = path
262269
s.stream = stream
263270

264-
var rstream *gortsplib.ServerStream
265-
if !s.isTLS {
266-
rstream = stream.RTSPStream(s.rserver)
267-
} else {
268-
rstream = stream.RTSPSStream(s.rserver)
269-
}
271+
return &base.Response{
272+
StatusCode: base.StatusOK,
273+
}, s.rtspStream(), nil
270274

275+
case gortsplib.ServerSessionStatePrePlay: // play, subsequent calls
271276
return &base.Response{
272277
StatusCode: base.StatusOK,
273-
}, rstream, nil
278+
}, s.rtspStream(), nil
274279

275280
default: // record
276281
return &base.Response{

0 commit comments

Comments
 (0)