update gortsplib

This commit is contained in:
aler9
2020-11-16 00:17:28 +01:00
parent 6a82c0ce3b
commit f63647ab1e
6 changed files with 53 additions and 55 deletions
+1 -1
View File
@@ -5,7 +5,7 @@ go 1.15
require (
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 // indirect
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d // indirect
github.com/aler9/gortsplib v0.0.0-20201115164941-3f45d21f1132
github.com/aler9/gortsplib v0.0.0-20201115231025-c24d3f677b43
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/fsnotify/fsnotify v1.4.9
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51
+2 -2
View File
@@ -2,8 +2,8 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafo
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d h1:UQZhZ2O0vMHr2cI+DC1Mbh0TJxzA3RcLoMsFw+aXw7E=
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
github.com/aler9/gortsplib v0.0.0-20201115164941-3f45d21f1132 h1:yPtvZE/tfSPkQn7R2TkBv0I9t318yKDgCwynHzuCK5E=
github.com/aler9/gortsplib v0.0.0-20201115164941-3f45d21f1132/go.mod h1:6yKsTNIrCapRz90WHQtyFV/rKK0TT+QapxUXNqSJi9M=
github.com/aler9/gortsplib v0.0.0-20201115231025-c24d3f677b43 h1:Y+Cl50nLvue3T56uRB1wnq5yLbHpxsjwTjfBZMfA3Qs=
github.com/aler9/gortsplib v0.0.0-20201115231025-c24d3f677b43/go.mod h1:6yKsTNIrCapRz90WHQtyFV/rKK0TT+QapxUXNqSJi9M=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+27 -27
View File
@@ -884,25 +884,25 @@ func (c *Client) handleRequest(req *base.Request) error {
}
func (c *Client) runInitial() bool {
readDone := make(chan error)
readerDone := make(chan error)
go func() {
for {
req, err := c.conn.ReadRequest()
if err != nil {
readDone <- err
readerDone <- err
return
}
err = c.handleRequest(req)
if err != nil {
readDone <- err
readerDone <- err
return
}
}
}()
select {
case err := <-readDone:
case err := <-readerDone:
switch err {
case errStateWaitingDescribe:
return c.runWaitingDescribe()
@@ -926,7 +926,7 @@ func (c *Client) runInitial() bool {
case <-c.terminate:
c.conn.Close()
<-readDone
<-readerDone
return false
}
}
@@ -1024,25 +1024,25 @@ func (c *Client) runPlay() bool {
}
func (c *Client) runPlayUDP() bool {
readDone := make(chan error)
readerDone := make(chan error)
go func() {
for {
req, err := c.conn.ReadRequest()
if err != nil {
readDone <- err
readerDone <- err
return
}
err = c.handleRequest(req)
if err != nil {
readDone <- err
readerDone <- err
return
}
}
}()
select {
case err := <-readDone:
case err := <-readerDone:
if err == errStateInitial {
c.state = statePrePlay
c.path.OnClientPause(c)
@@ -1067,7 +1067,7 @@ func (c *Client) runPlayUDP() bool {
c.path = nil
c.conn.Close()
<-readDone
<-readerDone
return false
}
}
@@ -1076,12 +1076,12 @@ func (c *Client) runPlayTCP() bool {
readRequest := make(chan readRequestPair)
defer close(readRequest)
readDone := make(chan error)
readerDone := make(chan error)
go func() {
for {
recv, err := c.conn.ReadFrameTCPOrRequest(false)
if err != nil {
readDone <- err
readerDone <- err
return
}
@@ -1094,7 +1094,7 @@ func (c *Client) runPlayTCP() bool {
readRequest <- readRequestPair{recvt, res}
err := <-res
if err != nil {
readDone <- err
readerDone <- err
return
}
}
@@ -1107,7 +1107,7 @@ func (c *Client) runPlayTCP() bool {
case req := <-readRequest:
req.res <- c.handleRequest(req.req)
case err := <-readDone:
case err := <-readerDone:
if err == errStateInitial {
ch := c.tcpFrame
go func() {
@@ -1165,7 +1165,7 @@ func (c *Client) runPlayTCP() bool {
close(c.tcpFrame)
c.conn.Close()
<-readDone
<-readerDone
return false
}
}
@@ -1242,18 +1242,18 @@ func (c *Client) runRecord() bool {
}
func (c *Client) runRecordUDP() bool {
readDone := make(chan error)
readerDone := make(chan error)
go func() {
for {
req, err := c.conn.ReadRequest()
if err != nil {
readDone <- err
readerDone <- err
return
}
err = c.handleRequest(req)
if err != nil {
readDone <- err
readerDone <- err
return
}
}
@@ -1267,7 +1267,7 @@ func (c *Client) runRecordUDP() bool {
for {
select {
case err := <-readDone:
case err := <-readerDone:
if err == errStateInitial {
for _, track := range c.streamTracks {
c.serverUdpRtp.RemovePublisher(c.ip(), track.rtpPort, c)
@@ -1312,7 +1312,7 @@ func (c *Client) runRecordUDP() bool {
c.log("ERR: no packets received recently (maybe there's a firewall/NAT in between)")
c.conn.Close()
<-readDone
<-readerDone
c.path.OnClientRemove(c)
c.path = nil
@@ -1341,7 +1341,7 @@ func (c *Client) runRecordUDP() bool {
}
c.conn.Close()
<-readDone
<-readerDone
c.path.OnClientRemove(c)
c.path = nil
@@ -1355,19 +1355,19 @@ func (c *Client) runRecordTCP() bool {
readRequest := make(chan readRequestPair)
defer close(readRequest)
readDone := make(chan error)
readerDone := make(chan error)
go func() {
for {
recv, err := c.conn.ReadFrameTCPOrRequest(true)
if err != nil {
readDone <- err
readerDone <- err
return
}
switch recvt := recv.(type) {
case *base.InterleavedFrame:
if recvt.TrackId >= len(c.streamTracks) {
readDone <- fmt.Errorf("invalid track id '%d'", recvt.TrackId)
readerDone <- fmt.Errorf("invalid track id '%d'", recvt.TrackId)
return
}
@@ -1377,7 +1377,7 @@ func (c *Client) runRecordTCP() bool {
case *base.Request:
err := c.handleRequest(recvt)
if err != nil {
readDone <- err
readerDone <- err
return
}
}
@@ -1393,7 +1393,7 @@ func (c *Client) runRecordTCP() bool {
case req := <-readRequest:
req.res <- c.handleRequest(req.req)
case err := <-readDone:
case err := <-readerDone:
if err == errStateInitial {
c.state = statePreRecord
c.path.OnClientPause(c)
@@ -1429,7 +1429,7 @@ func (c *Client) runRecordTCP() bool {
}()
c.conn.Close()
<-readDone
<-readerDone
c.path.OnClientRemove(c)
c.path = nil
+3 -3
View File
@@ -111,9 +111,9 @@ func (s *Server) Close() {
func (s *Server) run() {
defer close(s.done)
writeDone := make(chan struct{})
writerDone := make(chan struct{})
go func() {
defer close(writeDone)
defer close(writerDone)
for w := range s.write {
s.pc.SetWriteDeadline(time.Now().Add(s.writeTimeout))
s.pc.WriteTo(w.buf, w.addr)
@@ -144,7 +144,7 @@ func (s *Server) run() {
}
close(s.write)
<-writeDone
<-writerDone
}
// Port returns the server local port.
+10 -10
View File
@@ -229,33 +229,33 @@ func (s *Source) runInner() bool {
s.parent.Log("rtmp source ready")
s.parent.OnSourceSetReady(tracks)
readDone := make(chan error)
readerDone := make(chan error)
go func() {
for {
pkt, err := conn.ReadPacket()
if err != nil {
readDone <- err
readerDone <- err
return
}
switch pkt.Type {
case av.H264:
if h264Sps == nil {
readDone <- fmt.Errorf("rtmp source ERR: received an H264 frame, but track is not setup up")
readerDone <- fmt.Errorf("rtmp source ERR: received an H264 frame, but track is not setup up")
return
}
// decode from AVCC format
nalus, typ := h264.SplitNALUs(pkt.Data)
if typ != h264.NALU_AVCC {
readDone <- fmt.Errorf("invalid NALU format (%d)", typ)
readerDone <- fmt.Errorf("invalid NALU format (%d)", typ)
return
}
// encode into RTP/H264 format
frames, err := h264Encoder.Write(nalus, pkt.Time+pkt.CTime)
if err != nil {
readDone <- err
readerDone <- err
return
}
@@ -265,13 +265,13 @@ func (s *Source) runInner() bool {
case av.AAC:
if aacConfig == nil {
readDone <- fmt.Errorf("rtmp source ERR: received an AAC frame, but track is not setup up")
readerDone <- fmt.Errorf("rtmp source ERR: received an AAC frame, but track is not setup up")
return
}
frames, err := aacEncoder.Write(pkt.Data, pkt.Time+pkt.CTime)
if err != nil {
readDone <- err
readerDone <- err
return
}
@@ -280,7 +280,7 @@ func (s *Source) runInner() bool {
}
default:
readDone <- fmt.Errorf("rtmp source ERR: unexpected packet: %v", pkt.Type)
readerDone <- fmt.Errorf("rtmp source ERR: unexpected packet: %v", pkt.Type)
return
}
}
@@ -293,11 +293,11 @@ outer:
select {
case <-s.terminate:
nconn.Close()
<-readDone
<-readerDone
ret = false
break outer
case err := <-readDone:
case err := <-readerDone:
nconn.Close()
s.parent.Log("rtmp source ERR: %s", err)
ret = true
+10 -12
View File
@@ -139,18 +139,16 @@ func (s *Source) runInner() bool {
s.parent.Log("rtsp source ready")
s.parent.OnSourceSetReady(tracks)
readDone := make(chan error)
go func() {
for {
trackId, streamType, content, err := conn.ReadFrame()
if err != nil {
readDone <- err
return
}
readerDone := make(chan error)
s.parent.OnFrame(trackId, streamType, content)
conn.OnFrame(func(trackId int, streamType gortsplib.StreamType, content []byte, err error) {
if err != nil {
readerDone <- err
return
}
}()
s.parent.OnFrame(trackId, streamType, content)
})
var ret bool
@@ -159,11 +157,11 @@ outer:
select {
case <-s.terminate:
conn.Close()
<-readDone
<-readerDone
ret = false
break outer
case err := <-readDone:
case err := <-readerDone:
conn.Close()
s.parent.Log("rtsp source ERR: %s", err)
ret = true