Fix 400 response on PLAY for Reolink Doorbell #562
This commit is contained in:
@@ -38,6 +38,7 @@ type Conn struct {
|
|||||||
conn net.Conn
|
conn net.Conn
|
||||||
keepalive int
|
keepalive int
|
||||||
mode core.Mode
|
mode core.Mode
|
||||||
|
playOK bool
|
||||||
reader *bufio.Reader
|
reader *bufio.Reader
|
||||||
sequence int
|
sequence int
|
||||||
session string
|
session string
|
||||||
@@ -156,6 +157,8 @@ func (c *Conn) Handle() (err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
c.Fire(res)
|
c.Fire(res)
|
||||||
|
// for playing backchannel only after OK response on play
|
||||||
|
c.playOK = true
|
||||||
continue
|
continue
|
||||||
|
|
||||||
case "OPTI", "TEAR", "DESC", "SETU", "PLAY", "PAUS", "RECO", "ANNO", "GET_", "SET_":
|
case "OPTI", "TEAR", "DESC", "SETU", "PLAY", "PAUS", "RECO", "ANNO", "GET_", "SET_":
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ func (c *Conn) packetWriter(codec *core.Codec, channel, payloadType uint8) core.
|
|||||||
}
|
}
|
||||||
|
|
||||||
handlerFunc := func(packet *rtp.Packet) {
|
handlerFunc := func(packet *rtp.Packet) {
|
||||||
if c.state == StateNone {
|
if c.state == StateNone || !c.playOK {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,6 +102,10 @@ func (c *Conn) packetWriter(codec *core.Codec, channel, payloadType uint8) core.
|
|||||||
Payload: packet.Payload,
|
Payload: packet.Payload,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !video {
|
||||||
|
packet.Marker = true // better to have marker on all audio packets
|
||||||
|
}
|
||||||
|
|
||||||
size := 12 + len(packet.Payload)
|
size := 12 + len(packet.Payload)
|
||||||
|
|
||||||
if n+4+size > len(buf) {
|
if n+4+size > len(buf) {
|
||||||
@@ -130,7 +134,7 @@ func (c *Conn) packetWriter(codec *core.Codec, channel, payloadType uint8) core.
|
|||||||
|
|
||||||
n += 4 + size
|
n += 4 + size
|
||||||
|
|
||||||
if video && !packet.Marker {
|
if !packet.Marker {
|
||||||
return // collect continious video packets to buffer
|
return // collect continious video packets to buffer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-1
@@ -157,7 +157,9 @@ func (c *Conn) Accept() error {
|
|||||||
|
|
||||||
case MethodRecord, MethodPlay:
|
case MethodRecord, MethodPlay:
|
||||||
res := &tcp.Response{Request: req}
|
res := &tcp.Response{Request: req}
|
||||||
return c.WriteResponse(res)
|
err = c.WriteResponse(res)
|
||||||
|
c.playOK = true
|
||||||
|
return err
|
||||||
|
|
||||||
case MethodTeardown:
|
case MethodTeardown:
|
||||||
res := &tcp.Response{Request: req}
|
res := &tcp.Response{Request: req}
|
||||||
|
|||||||
Reference in New Issue
Block a user