Rewrite RTSP keepalive

This commit is contained in:
Alexey Khit
2023-04-16 14:47:07 +03:00
parent a5c4854aeb
commit 757091e43d
+16 -17
View File
@@ -89,11 +89,13 @@ const (
func (c *Conn) Handle() (err error) { func (c *Conn) Handle() (err error) {
var timeout time.Duration var timeout time.Duration
var keepalive time.Time
switch c.mode { switch c.mode {
case core.ModeActiveProducer: case core.ModeActiveProducer:
// polling frames from remote RTSP Server (ex Camera) keepalive = time.Now().Add(time.Second * 25)
go c.keepalive()
// polling frames from remote RTSP Server (ex Camera)
if len(c.receivers) > 0 { if len(c.receivers) > 0 {
// if we receiving video/audio from camera // if we receiving video/audio from camera
timeout = time.Second * 5 timeout = time.Second * 5
@@ -115,7 +117,9 @@ func (c *Conn) Handle() (err error) {
} }
for c.state != StateNone { for c.state != StateNone {
if err = c.conn.SetReadDeadline(time.Now().Add(timeout)); err != nil { ts := time.Now()
if err = c.conn.SetReadDeadline(ts.Add(timeout)); err != nil {
return return
} }
@@ -232,6 +236,15 @@ func (c *Conn) Handle() (err error) {
c.Fire(msg) c.Fire(msg)
} }
if !keepalive.IsZero() && ts.After(keepalive) {
req := &tcp.Request{Method: MethodOptions, URL: c.URL}
if err = c.WriteRequest(req); err != nil {
return
}
keepalive = ts.Add(time.Second * 25)
}
} }
return return
@@ -322,17 +335,3 @@ func (c *Conn) ReadResponse() (*tcp.Response, error) {
} }
return tcp.ReadResponse(c.reader) return tcp.ReadResponse(c.reader)
} }
func (c *Conn) keepalive() {
// TODO: rewrite to RTCP
req := &tcp.Request{Method: MethodOptions, URL: c.URL}
for {
time.Sleep(time.Second * 25)
if c.state == StateNone {
return
}
if err := c.WriteRequest(req); err != nil {
return
}
}
}