move forwardTrack into serverTcpListener

This commit is contained in:
aler9 2020-05-10 16:02:17 +02:00
parent e072bdf0b4
commit fae52b415c
4 changed files with 38 additions and 38 deletions

36
main.go
View file

@ -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."

View file

@ -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()
}
}

View file

@ -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,
}
}
}
}
}

View file

@ -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])
}()
}