From 500b8720d5e66b8b9c7e4032e89d4cac40ebe08a Mon Sep 17 00:00:00 2001 From: Alexey Khit Date: Sun, 29 Jan 2023 18:55:37 +0300 Subject: [PATCH] Fix bug with no stream from some Dahua cameras --- pkg/rtsp/conn.go | 15 ++++++++------- pkg/rtsp/streamer.go | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/pkg/rtsp/conn.go b/pkg/rtsp/conn.go index 39703673..39523ca6 100644 --- a/pkg/rtsp/conn.go +++ b/pkg/rtsp/conn.go @@ -347,7 +347,7 @@ func (c *Conn) Describe() error { func (c *Conn) Setup() error { for _, media := range c.Medias { - _, err := c.SetupMedia(media, media.Codecs[0]) + _, err := c.SetupMedia(media, media.Codecs[0], true) if err != nil { return err } @@ -356,11 +356,12 @@ func (c *Conn) Setup() error { return nil } -func (c *Conn) SetupMedia( - media *streamer.Media, codec *streamer.Codec, -) (*streamer.Track, error) { - c.stateMu.Lock() - defer c.stateMu.Unlock() +func (c *Conn) SetupMedia(media *streamer.Media, codec *streamer.Codec, first bool) (*streamer.Track, error) { + // TODO: rewrite recoonection and first flag + if first { + c.stateMu.Lock() + defer c.stateMu.Unlock() + } if c.state != StateConn && c.state != StateSetup { return nil, fmt.Errorf("RTSP SETUP from wrong state: %s", c.state) @@ -412,7 +413,7 @@ func (c *Conn) SetupMedia( for _, newMedia := range c.Medias { if newMedia.Control == media.Control { - return c.SetupMedia(newMedia, newMedia.Codecs[0]) + return c.SetupMedia(newMedia, newMedia.Codecs[0], false) } } } diff --git a/pkg/rtsp/streamer.go b/pkg/rtsp/streamer.go index 2af46629..7fea6d97 100644 --- a/pkg/rtsp/streamer.go +++ b/pkg/rtsp/streamer.go @@ -45,7 +45,7 @@ func (c *Conn) GetTrack(media *streamer.Media, codec *streamer.Codec) *streamer. return streamer.NewTrack(codec, media.Direction) } - track, err := c.SetupMedia(media, codec) + track, err := c.SetupMedia(media, codec, true) if err != nil { return nil }