Browse Source

fix: add SetWriteDeadline() and prevent timeout when receiving via tcp

pull/2/head v0.4.2
aler9 6 years ago
parent
commit
a9799c7cf1
  1. 5
      client.go
  2. 9
      main.go
  3. 2
      server_udpl.go

5
client.go

@ -13,11 +13,6 @@ import ( @@ -13,11 +13,6 @@ import (
"gortc.io/sdp"
)
const (
_READ_TIMEOUT = 5 * time.Second
_WRITE_TIMEOUT = 5 * time.Second
)
func interleavedChannelToTrack(channel int) (int, trackFlow) {
if (channel % 2) == 0 {
return (channel / 2), _TRACK_FLOW_RTP

9
main.go

@ -8,12 +8,18 @@ import ( @@ -8,12 +8,18 @@ import (
"regexp"
"strings"
"sync"
"time"
"gopkg.in/alecthomas/kingpin.v2"
)
var Version string = "v0.0.0"
const (
_READ_TIMEOUT = 5 * time.Second
_WRITE_TIMEOUT = 5 * time.Second
)
type trackFlow int
const (
@ -124,11 +130,13 @@ func (p *program) forwardTrack(path string, id int, flow trackFlow, frame []byte @@ -124,11 +130,13 @@ func (p *program) forwardTrack(path string, id int, flow trackFlow, frame []byte
if c.path == path && c.state == _CLIENT_STATE_PLAY {
if c.streamProtocol == _STREAM_PROTOCOL_UDP {
if flow == _TRACK_FLOW_RTP {
p.rtpl.nconn.SetWriteDeadline(time.Now().Add(_WRITE_TIMEOUT))
p.rtpl.nconn.WriteTo(frame, &net.UDPAddr{
IP: c.ip,
Port: c.streamTracks[id].rtpPort,
})
} else {
p.rtcpl.nconn.SetWriteDeadline(time.Now().Add(_WRITE_TIMEOUT))
p.rtcpl.nconn.WriteTo(frame, &net.UDPAddr{
IP: c.ip,
Port: c.streamTracks[id].rtcpPort,
@ -136,6 +144,7 @@ func (p *program) forwardTrack(path string, id int, flow trackFlow, frame []byte @@ -136,6 +144,7 @@ func (p *program) forwardTrack(path string, id int, flow trackFlow, frame []byte
}
} else {
c.conn.NetConn().SetWriteDeadline(time.Now().Add(_WRITE_TIMEOUT))
c.conn.WriteInterleavedFrame(trackToInterleavedChannel(id, flow), frame)
}
}

2
server_udpl.go

@ -53,7 +53,7 @@ func (l *serverUdpListener) run() { @@ -53,7 +53,7 @@ func (l *serverUdpListener) run() {
l.p.mutex.RLock()
defer l.p.mutex.RUnlock()
// find path and track id
// find path and track id from ip and port
path, trackId := func() (string, int) {
for _, pub := range l.p.publishers {
for i, t := range pub.streamTracks {

Loading…
Cancel
Save