Fix backchannel reconnection issue
This commit is contained in:
+1
-1
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
+12
-8
@@ -362,22 +362,26 @@ 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
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
for _, newMedia := range c.Medias {
|
||||||
return nil, err
|
if newMedia.Control == media.Control {
|
||||||
|
return c.SetupMedia(newMedia, newMedia.Codecs[0])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
if c.Session == "" {
|
if c.Session == "" {
|
||||||
// Session: 216525287999;timeout=60
|
// Session: 216525287999;timeout=60
|
||||||
|
|||||||
Reference in New Issue
Block a user