Browse Source

support ipv6 link-local addresses; fix #6

pull/31/head v0.5.5
aler9 5 years ago
parent
commit
0b38b3c75a
  1. 6
      main.go
  2. 12
      server-client.go
  3. 2
      server-udpl.go

6
main.go

@ -199,7 +199,8 @@ func (p *program) forwardTrack(path string, id int, flow trackFlow, frame []byte @@ -199,7 +199,8 @@ func (p *program) forwardTrack(path string, id int, flow trackFlow, frame []byte
if flow == _TRACK_FLOW_RTP {
p.rtpl.chanWrite <- &udpWrite{
addr: &net.UDPAddr{
IP: c.ip,
IP: c.ip(),
Zone: c.zone(),
Port: c.streamTracks[id].rtpPort,
},
buf: frame,
@ -207,7 +208,8 @@ func (p *program) forwardTrack(path string, id int, flow trackFlow, frame []byte @@ -207,7 +208,8 @@ func (p *program) forwardTrack(path string, id int, flow trackFlow, frame []byte
} else {
p.rtcpl.chanWrite <- &udpWrite{
addr: &net.UDPAddr{
IP: c.ip,
IP: c.ip(),
Zone: c.zone(),
Port: c.streamTracks[id].rtcpPort,
},
buf: frame,

12
server-client.go

@ -107,7 +107,6 @@ type serverClient struct { @@ -107,7 +107,6 @@ type serverClient struct {
p *program
conn *gortsplib.ConnServer
state clientState
ip net.IP
path string
as *gortsplib.AuthServer
streamSdpText []byte // filled only if publisher
@ -164,6 +163,14 @@ func (c *serverClient) log(format string, args ...interface{}) { @@ -164,6 +163,14 @@ func (c *serverClient) log(format string, args ...interface{}) {
fmt.Sprintf(format, args...))
}
func (c *serverClient) ip() net.IP {
return c.conn.NetConn().RemoteAddr().(*net.TCPAddr).IP
}
func (c *serverClient) zone() string {
return c.conn.NetConn().RemoteAddr().(*net.TCPAddr).Zone
}
func (c *serverClient) run() {
defer func() {
if c.p.postScript != "" {
@ -183,9 +190,6 @@ func (c *serverClient) run() { @@ -183,9 +190,6 @@ func (c *serverClient) run() {
c.close()
}()
ipstr, _, _ := net.SplitHostPort(c.conn.NetConn().RemoteAddr().String())
c.ip = net.ParseIP(ipstr)
c.log("connected")
if c.p.preScript != "" {

2
server-udpl.go

@ -68,7 +68,7 @@ func (l *serverUdpListener) run() { @@ -68,7 +68,7 @@ func (l *serverUdpListener) run() {
path, trackId := func() (string, int) {
for _, pub := range l.p.publishers {
for i, t := range pub.streamTracks {
if !pub.ip.Equal(addr.IP) {
if !pub.ip().Equal(addr.IP) {
continue
}

Loading…
Cancel
Save