Fix backchannel reconnection issue

This commit is contained in:
Alexey Khit
2022-10-29 11:33:01 +03:00
parent 7964b1743b
commit 24082b1616
3 changed files with 17 additions and 10 deletions
+1 -1
View File
@@ -84,10 +84,10 @@ func rtspHandler(url string) (streamer.Producer, error) {
} }
// second try without backchannel, we need to reconnect // second try without backchannel, we need to reconnect
conn.Backchannel = false
if err = conn.Dial(); err != nil { if err = conn.Dial(); err != nil {
return nil, err return nil, err
} }
conn.Backchannel = false
if err = conn.Describe(); err != nil { if err = conn.Describe(); err != nil {
return nil, err return nil, err
} }
+3
View File
@@ -64,6 +64,9 @@ func (p *Producer) GetTrack(media *streamer.Media, codec *streamer.Codec) *strea
} }
track := p.element.GetTrack(media, codec) track := p.element.GetTrack(media, codec)
if track == nil {
return nil
}
for _, t := range p.tracks { for _, t := range p.tracks {
if track == t { if track == t {
+13 -9
View File
@@ -362,21 +362,25 @@ func (c *Conn) SetupMedia(
var res *tcp.Response var res *tcp.Response
res, err = c.Do(req) res, err = c.Do(req)
if err != nil { if err != nil {
// Dahua VTO2111D fail on this step because of backchannel // some Dahua/Amcrest cameras fail here because two simultaneous
// backchannel connections
if c.Backchannel { if c.Backchannel {
if err = c.Dial(); err != nil {
return nil, err
}
c.Backchannel = false c.Backchannel = false
if err = c.Describe(); err != nil { if err := c.Dial(); err != nil {
return nil, err return nil, err
} }
res, err = c.Do(req) if err := c.Describe(); err != nil {
return nil, err
}
for _, newMedia := range c.Medias {
if newMedia.Control == media.Control {
return c.SetupMedia(newMedia, newMedia.Codecs[0])
}
}
} }
if err != nil { return nil, err
return nil, err
}
} }
if c.Session == "" { if c.Session == "" {