Browse Source

move forwardTrack into serverTcpListener

pull/31/head
aler9 5 years ago
parent
commit
fae52b415c
  1. 36
      main.go
  2. 2
      server-client.go
  3. 36
      server-tcpl.go
  4. 2
      server-udpl.go

36
main.go

@ -3,13 +3,11 @@ package main
import ( import (
"fmt" "fmt"
"log" "log"
"net"
"os" "os"
"regexp" "regexp"
"strings" "strings"
"time" "time"
"github.com/aler9/gortsplib"
"gopkg.in/alecthomas/kingpin.v2" "gopkg.in/alecthomas/kingpin.v2"
) )
@ -156,40 +154,6 @@ func newProgram(args args) (*program, error) {
return p, nil 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() { func main() {
kingpin.CommandLine.Help = "rtsp-simple-server " + Version + "\n\n" + kingpin.CommandLine.Help = "rtsp-simple-server " + Version + "\n\n" +
"RTSP server." "RTSP server."

2
server-client.go

@ -864,7 +864,7 @@ func (c *serverClient) handleRequest(req *gortsplib.Request) bool {
} }
c.p.rtspl.mutex.RLock() 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() c.p.rtspl.mutex.RUnlock()
} }
} }

36
server-tcpl.go

@ -4,6 +4,8 @@ import (
"log" "log"
"net" "net"
"sync" "sync"
"github.com/aler9/gortsplib"
) )
type serverTcpListener struct { type serverTcpListener struct {
@ -48,3 +50,37 @@ func (l *serverTcpListener) run() {
go rsc.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,
}
}
}
}
}

2
server-udpl.go

@ -96,7 +96,7 @@ func (l *serverUdpListener) run() {
return return
} }
l.p.forwardTrack(path, trackId, l.flow, buf[:n]) l.p.rtspl.forwardTrack(path, trackId, l.flow, buf[:n])
}() }()
} }

Loading…
Cancel
Save