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
conn.Backchannel = false
if err = conn.Dial(); err != nil {
return nil, err
}
conn.Backchannel = false
if err = conn.Describe(); err != nil {
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)
if track == nil {
return nil
}
for _, t := range p.tracks {
if track == t {
+13 -9
View File
@@ -362,21 +362,25 @@ func (c *Conn) SetupMedia(
var res *tcp.Response
res, err = c.Do(req)
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 err = c.Dial(); err != nil {
return nil, err
}
c.Backchannel = false
if err = c.Describe(); err != nil {
if err := c.Dial(); err != nil {
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 == "" {