From 8c6729027beb4210e2b05c5063b2402f5f9f4e78 Mon Sep 17 00:00:00 2001 From: Alexey Khit Date: Thu, 1 Dec 2022 23:37:11 +0300 Subject: [PATCH] Add feature to SETUP new RTSP tracks after PLAY --- pkg/rtsp/conn.go | 6 ++++++ pkg/rtsp/streamer.go | 5 +++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/pkg/rtsp/conn.go b/pkg/rtsp/conn.go index dbf56eaa..259b5786 100644 --- a/pkg/rtsp/conn.go +++ b/pkg/rtsp/conn.go @@ -404,6 +404,12 @@ func (c *Conn) SetupMedia( } } + // in case the track has already been setup before + if codec == nil { + c.state = StateSetup + return nil, nil + } + // we send our `interleaved`, but camera can answer with another // Transport: RTP/AVP/TCP;unicast;interleaved=10-11;ssrc=10117CB7 diff --git a/pkg/rtsp/streamer.go b/pkg/rtsp/streamer.go index 6f37cd9e..d8505576 100644 --- a/pkg/rtsp/streamer.go +++ b/pkg/rtsp/streamer.go @@ -20,9 +20,10 @@ func (c *Conn) GetTrack(media *streamer.Media, codec *streamer.Codec) *streamer. } } - // can't setup new tracks from play state + // can't setup new tracks from play state - forcing a reconnection feature if c.state == StatePlay { - return nil + go c.Close() + return streamer.NewTrack(codec, media.Direction) } track, err := c.SetupMedia(media, codec)