add ConnClient.LoopUDP()

This commit is contained in:
aler9
2020-07-19 18:25:13 +02:00
parent a110f2b6a2
commit a119764b96
3 changed files with 21 additions and 19 deletions

View File

@@ -20,8 +20,9 @@ import (
)
const (
clientReadBufferSize = 4096
clientWriteBufferSize = 4096
clientReadBufferSize = 4096
clientWriteBufferSize = 4096
clientTcpKeepalivePeriod = 30 * time.Second
)
// Track is a track available in a certain URL.
@@ -403,3 +404,19 @@ func (c *ConnClient) Play(u *url.URL) (*Response, error) {
}
}
}
// LoopUDP is called after setupping UDP tracks and calling Play(); it keeps
// the TCP connection open through keepalives, and returns when the TCP
// connection closes.
func (c *ConnClient) LoopUDP(u *url.URL) (error) {
keepaliveTicker := time.NewTicker(clientTcpKeepalivePeriod)
defer keepaliveTicker.Stop()
for {
<- keepaliveTicker.C
_, err := c.Options(u)
if err != nil {
return err
}
}
}

View File

@@ -67,21 +67,6 @@ func main() {
panic(err)
}
done := make(chan struct{})
// send periodic keepalive
go func() {
keepaliveTicker := time.NewTicker(30 * time.Second)
for range keepaliveTicker.C {
_, err = rconn.Options(u)
if err != nil {
fmt.Println("connection is closed")
close(done)
break
}
}
}()
// receive RTP packets
for trackId, l := range rtpListeners {
go func(trackId int, l net.PacketConn) {
@@ -112,5 +97,5 @@ func main() {
}(trackId, l)
}
<-done
panic(rconn.LoopUDP(u))
}

View File

@@ -40,7 +40,7 @@ const (
// StreamTypeRtp means that the stream contains RTP packets
StreamTypeRtp StreamType = iota + 1
// StreamTypeRtp means that the stream contains RTCP packets
// StreamTypeRtcp means that the stream contains RTCP packets
StreamTypeRtcp
)