Browse Source

update gortsplib

pull/340/head
aler9 4 years ago
parent
commit
c8a4221278
  1. 2
      go.mod
  2. 4
      go.sum
  3. 67
      internal/clientrtsp/client.go

2
go.mod

@ -5,7 +5,7 @@ go 1.15
require ( require (
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 // indirect github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 // indirect
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d // indirect github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d // indirect
github.com/aler9/gortsplib v0.0.0-20210316131127-50babb18c013 github.com/aler9/gortsplib v0.0.0-20210316211856-c2de28c18558
github.com/davecgh/go-spew v1.1.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect
github.com/fsnotify/fsnotify v1.4.9 github.com/fsnotify/fsnotify v1.4.9
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51

4
go.sum

@ -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/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 h1:UQZhZ2O0vMHr2cI+DC1Mbh0TJxzA3RcLoMsFw+aXw7E=
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
github.com/aler9/gortsplib v0.0.0-20210316131127-50babb18c013 h1:VseNrDPM+21Uhsfn1FhR3NHDQWH8uB4YNe5zHkH1xcc= github.com/aler9/gortsplib v0.0.0-20210316211856-c2de28c18558 h1:e1MhWMfd4vlPPk9WZHSTC/Muigq41/+A6PSrgaRFUDY=
github.com/aler9/gortsplib v0.0.0-20210316131127-50babb18c013/go.mod h1:aj4kDzanb3JZ46sFywWShcsnqqXTLE/3PNjwDhQZGM0= github.com/aler9/gortsplib v0.0.0-20210316211856-c2de28c18558/go.mod h1:aj4kDzanb3JZ46sFywWShcsnqqXTLE/3PNjwDhQZGM0=
github.com/aler9/rtmp v0.0.0-20210309202041-2d7177b7300d h1:LAX8pNvYpGgFpKdbPpEZWjNkHbmyvjMrT3vO7s7aaKU= github.com/aler9/rtmp v0.0.0-20210309202041-2d7177b7300d h1:LAX8pNvYpGgFpKdbPpEZWjNkHbmyvjMrT3vO7s7aaKU=
github.com/aler9/rtmp v0.0.0-20210309202041-2d7177b7300d/go.mod h1:vzuE21rowz+lT1NGsWbreIvYulgBpCGnQyeTyFblUHc= github.com/aler9/rtmp v0.0.0-20210309202041-2d7177b7300d/go.mod h1:vzuE21rowz+lT1NGsWbreIvYulgBpCGnQyeTyFblUHc=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=

67
internal/clientrtsp/client.go

@ -6,7 +6,6 @@ import (
"io" "io"
"net" "net"
"strconv" "strconv"
"strings"
"sync" "sync"
"sync/atomic" "sync/atomic"
"time" "time"
@ -159,16 +158,9 @@ func (c *Client) run() {
c.log(logger.Debug, "[s->c] %v", res) c.log(logger.Debug, "[s->c] %v", res)
} }
onDescribe := func(req *base.Request) (*base.Response, []byte, error) { onDescribe := func(ctx *gortsplib.ServerConnDescribeCtx) (*base.Response, []byte, error) {
reqPath, ok := req.URL.RTSPPath()
if !ok {
return &base.Response{
StatusCode: base.StatusBadRequest,
}, nil, fmt.Errorf("invalid path (%s)", req.URL)
}
resc := make(chan client.DescribeRes) resc := make(chan client.DescribeRes)
c.parent.OnClientDescribe(client.DescribeReq{c, reqPath, req, resc}) //nolint:govet c.parent.OnClientDescribe(client.DescribeReq{c, ctx.Path, ctx.Req, resc}) //nolint:govet
res := <-resc res := <-resc
if res.Err != nil { if res.Err != nil {
@ -210,16 +202,9 @@ func (c *Client) run() {
}, res.SDP, nil }, res.SDP, nil
} }
onAnnounce := func(req *base.Request, tracks gortsplib.Tracks) (*base.Response, error) { onAnnounce := func(ctx *gortsplib.ServerConnAnnounceCtx) (*base.Response, error) {
reqPath, ok := req.URL.RTSPPath()
if !ok {
return &base.Response{
StatusCode: base.StatusBadRequest,
}, fmt.Errorf("invalid path (%s)", req.URL)
}
resc := make(chan client.AnnounceRes) resc := make(chan client.AnnounceRes)
c.parent.OnClientAnnounce(client.AnnounceReq{c, reqPath, tracks, req, resc}) //nolint:govet c.parent.OnClientAnnounce(client.AnnounceReq{c, ctx.Path, ctx.Tracks, ctx.Req, resc}) //nolint:govet
res := <-resc res := <-resc
if res.Err != nil { if res.Err != nil {
@ -249,8 +234,8 @@ func (c *Client) run() {
}, nil }, nil
} }
onSetup := func(req *base.Request, th *headers.Transport, reqPath string, trackID int) (*base.Response, error) { onSetup := func(ctx *gortsplib.ServerConnSetupCtx) (*base.Response, error) {
if th.Protocol == gortsplib.StreamProtocolUDP { if ctx.Transport.Protocol == gortsplib.StreamProtocolUDP {
if _, ok := c.protocols[gortsplib.StreamProtocolUDP]; !ok { if _, ok := c.protocols[gortsplib.StreamProtocolUDP]; !ok {
return &base.Response{ return &base.Response{
StatusCode: base.StatusUnsupportedTransport, StatusCode: base.StatusUnsupportedTransport,
@ -267,7 +252,7 @@ func (c *Client) run() {
switch c.conn.State() { switch c.conn.State() {
case gortsplib.ServerConnStateInitial, gortsplib.ServerConnStatePrePlay: // play case gortsplib.ServerConnStateInitial, gortsplib.ServerConnStatePrePlay: // play
resc := make(chan client.SetupPlayRes) resc := make(chan client.SetupPlayRes)
c.parent.OnClientSetupPlay(client.SetupPlayReq{c, reqPath, req, resc}) //nolint:govet c.parent.OnClientSetupPlay(client.SetupPlayReq{c, ctx.Path, ctx.Req, resc}) //nolint:govet
res := <-resc res := <-resc
if res.Err != nil { if res.Err != nil {
@ -297,10 +282,10 @@ func (c *Client) run() {
c.path = res.Path c.path = res.Path
if trackID >= len(res.Tracks) { if ctx.TrackID >= len(res.Tracks) {
return &base.Response{ return &base.Response{
StatusCode: base.StatusBadRequest, StatusCode: base.StatusBadRequest,
}, fmt.Errorf("track %d does not exist", trackID) }, fmt.Errorf("track %d does not exist", ctx.TrackID)
} }
} }
@ -312,22 +297,12 @@ func (c *Client) run() {
}, nil }, nil
} }
onPlay := func(req *base.Request) (*base.Response, error) { onPlay := func(ctx *gortsplib.ServerConnPlayCtx) (*base.Response, error) {
if c.conn.State() == gortsplib.ServerConnStatePrePlay { if c.conn.State() == gortsplib.ServerConnStatePrePlay {
reqPath, ok := req.URL.RTSPPath() if ctx.Path != c.path.Name() {
if !ok {
return &base.Response{
StatusCode: base.StatusBadRequest,
}, fmt.Errorf("invalid path (%s)", req.URL)
}
// path can end with a slash, remove it
reqPath = strings.TrimSuffix(reqPath, "/")
if reqPath != c.path.Name() {
return &base.Response{ return &base.Response{
StatusCode: base.StatusBadRequest, StatusCode: base.StatusBadRequest,
}, fmt.Errorf("path has changed, was '%s', now is '%s'", c.path.Name(), reqPath) }, fmt.Errorf("path has changed, was '%s', now is '%s'", c.path.Name(), ctx.Path)
} }
c.playStart() c.playStart()
@ -341,21 +316,11 @@ func (c *Client) run() {
}, nil }, nil
} }
onRecord := func(req *base.Request) (*base.Response, error) { onRecord := func(ctx *gortsplib.ServerConnRecordCtx) (*base.Response, error) {
reqPath, ok := req.URL.RTSPPath() if ctx.Path != c.path.Name() {
if !ok {
return &base.Response{
StatusCode: base.StatusBadRequest,
}, fmt.Errorf("invalid path (%s)", req.URL)
}
// path can end with a slash, remove it
reqPath = strings.TrimSuffix(reqPath, "/")
if reqPath != c.path.Name() {
return &base.Response{ return &base.Response{
StatusCode: base.StatusBadRequest, StatusCode: base.StatusBadRequest,
}, fmt.Errorf("path has changed, was '%s', now is '%s'", c.path.Name(), reqPath) }, fmt.Errorf("path has changed, was '%s', now is '%s'", c.path.Name(), ctx.Path)
} }
c.recordStart() c.recordStart()
@ -368,7 +333,7 @@ func (c *Client) run() {
}, nil }, nil
} }
onPause := func(req *base.Request) (*base.Response, error) { onPause := func(ctx *gortsplib.ServerConnPauseCtx) (*base.Response, error) {
switch c.conn.State() { switch c.conn.State() {
case gortsplib.ServerConnStatePlay: case gortsplib.ServerConnStatePlay:
c.playStop() c.playStop()

Loading…
Cancel
Save