diff --git a/main.go b/main.go index 43db5770..7d9a60a5 100644 --- a/main.go +++ b/main.go @@ -3,13 +3,11 @@ package main import ( "fmt" "log" - "net" "os" "regexp" "strings" "time" - "github.com/aler9/gortsplib" "gopkg.in/alecthomas/kingpin.v2" ) @@ -156,40 +154,6 @@ func newProgram(args args) (*program, error) { return p, nil } -func (p *program) forwardTrack(path string, id int, flow trackFlow, frame []byte) { - for c := range p.rtspl.clients { - if c.path == path && c.state == _CLIENT_STATE_PLAY { - if c.streamProtocol == _STREAM_PROTOCOL_UDP { - if flow == _TRACK_FLOW_RTP { - p.rtpl.write <- &udpWrite{ - addr: &net.UDPAddr{ - IP: c.ip(), - Zone: c.zone(), - Port: c.streamTracks[id].rtpPort, - }, - buf: frame, - } - } else { - p.rtcpl.write <- &udpWrite{ - addr: &net.UDPAddr{ - IP: c.ip(), - Zone: c.zone(), - Port: c.streamTracks[id].rtcpPort, - }, - buf: frame, - } - } - - } else { - c.write <- &gortsplib.InterleavedFrame{ - Channel: trackToInterleavedChannel(id, flow), - Content: frame, - } - } - } - } -} - func main() { kingpin.CommandLine.Help = "rtsp-simple-server " + Version + "\n\n" + "RTSP server." diff --git a/server-client.go b/server-client.go index 36ad8d22..20fbde22 100644 --- a/server-client.go +++ b/server-client.go @@ -864,7 +864,7 @@ func (c *serverClient) handleRequest(req *gortsplib.Request) bool { } c.p.rtspl.mutex.RLock() - c.p.forwardTrack(c.path, trackId, trackFlow, frame.Content) + c.p.rtspl.forwardTrack(c.path, trackId, trackFlow, frame.Content) c.p.rtspl.mutex.RUnlock() } } diff --git a/server-tcpl.go b/server-tcpl.go index 9a6eca2f..def27120 100644 --- a/server-tcpl.go +++ b/server-tcpl.go @@ -4,6 +4,8 @@ import ( "log" "net" "sync" + + "github.com/aler9/gortsplib" ) type serverTcpListener struct { @@ -48,3 +50,37 @@ func (l *serverTcpListener) run() { go rsc.run() } } + +func (l *serverTcpListener) forwardTrack(path string, id int, flow trackFlow, frame []byte) { + for c := range l.clients { + if c.path == path && c.state == _CLIENT_STATE_PLAY { + if c.streamProtocol == _STREAM_PROTOCOL_UDP { + if flow == _TRACK_FLOW_RTP { + l.p.rtpl.write <- &udpWrite{ + addr: &net.UDPAddr{ + IP: c.ip(), + Zone: c.zone(), + Port: c.streamTracks[id].rtpPort, + }, + buf: frame, + } + } else { + l.p.rtcpl.write <- &udpWrite{ + addr: &net.UDPAddr{ + IP: c.ip(), + Zone: c.zone(), + Port: c.streamTracks[id].rtcpPort, + }, + buf: frame, + } + } + + } else { + c.write <- &gortsplib.InterleavedFrame{ + Channel: trackToInterleavedChannel(id, flow), + Content: frame, + } + } + } + } +} diff --git a/server-udpl.go b/server-udpl.go index 6a5da3f4..94f22136 100644 --- a/server-udpl.go +++ b/server-udpl.go @@ -96,7 +96,7 @@ func (l *serverUdpListener) run() { return } - l.p.forwardTrack(path, trackId, l.flow, buf[:n]) + l.p.rtspl.forwardTrack(path, trackId, l.flow, buf[:n]) }() }