diff --git a/client.go b/client.go index 471c511b..ce084102 100644 --- a/client.go +++ b/client.go @@ -100,7 +100,7 @@ type announceReq struct { } type setupReq struct { - mode headers.TransportMode + forPlay bool baseURL *base.URL track *Track rtpPort int @@ -340,7 +340,7 @@ func (c *Client) StartReading(address string) error { } for _, track := range tracks { - _, err := c.Setup(headers.TransportModePlay, baseURL, track, 0, 0) + _, err := c.Setup(true, baseURL, track, 0, 0) if err != nil { c.Close() return err @@ -392,7 +392,7 @@ func (c *Client) StartPublishing(address string, tracks Tracks) error { } for _, track := range tracks { - _, err := c.Setup(headers.TransportModeRecord, u, track, 0, 0) + _, err := c.Setup(false, u, track, 0, 0) if err != nil { c.Close() return err @@ -460,7 +460,7 @@ func (c *Client) run() { req.res <- clientRes{res: res, err: err} case req := <-c.setup: - res, err := c.doSetup(req.mode, req.baseURL, req.track, req.rtpPort, req.rtcpPort) + res, err := c.doSetup(req.forPlay, req.baseURL, req.track, req.rtpPort, req.rtcpPort) req.res <- clientRes{res: res, err: err} case req := <-c.play: @@ -669,7 +669,7 @@ func (c *Client) trySwitchingProtocol() error { c.host = prevBaseURL.Host for _, track := range prevTracks { - _, err := c.doSetup(headers.TransportModePlay, prevBaseURL, track.track, 0, 0) + _, err := c.doSetup(true, prevBaseURL, track.track, 0, 0) if err != nil { return err } @@ -1198,7 +1198,7 @@ func (c *Client) Announce(u *base.URL, tracks Tracks) (*base.Response, error) { } func (c *Client) doSetup( - mode headers.TransportMode, + forPlay bool, baseURL *base.URL, track *Track, rtpPort int, @@ -1212,8 +1212,8 @@ func (c *Client) doSetup( return nil, err } - if (mode == headers.TransportModeRecord && c.state != clientStatePreRecord) || - (mode == headers.TransportModePlay && c.state != clientStatePrePlay && + if (!forPlay && c.state != clientStatePreRecord) || + (forPlay && c.state != clientStatePrePlay && c.state != clientStateInitial) { return nil, liberrors.ErrClientCannotReadPublishAtSameTime{} } @@ -1246,6 +1246,11 @@ func (c *Client) doSetup( return TransportUDP }() + mode := headers.TransportModePlay + if !forPlay { + mode = headers.TransportModeRecord + } + th := headers.Transport{ Mode: &mode, } @@ -1336,7 +1341,7 @@ func (c *Client) doSetup( v := TransportTCP c.protocol = &v - return c.doSetup(mode, baseURL, track, 0, 0) + return c.doSetup(forPlay, baseURL, track, 0, 0) } return res, liberrors.ErrClientBadStatusCode{Code: res.StatusCode, Message: res.StatusMessage} @@ -1495,7 +1500,7 @@ func (c *Client) doSetup( // rtpPort and rtcpPort are used only if protocol is UDP. // if rtpPort and rtcpPort are zero, they are chosen automatically. func (c *Client) Setup( - mode headers.TransportMode, + forPlay bool, baseURL *base.URL, track *Track, rtpPort int, @@ -1503,7 +1508,7 @@ func (c *Client) Setup( cres := make(chan clientRes) select { case c.setup <- setupReq{ - mode: mode, + forPlay: forPlay, baseURL: baseURL, track: track, rtpPort: rtpPort, diff --git a/client_read_test.go b/client_read_test.go index c58b69ae..551986b6 100644 --- a/client_read_test.go +++ b/client_read_test.go @@ -672,7 +672,7 @@ func TestClientReadPartial(t *testing.T) { tracks, baseURL, _, err := c.Describe(u) require.NoError(t, err) - _, err = c.Setup(headers.TransportModePlay, baseURL, tracks[1], 0, 0) + _, err = c.Setup(true, baseURL, tracks[1], 0, 0) require.NoError(t, err) _, err = c.Play(nil) @@ -2318,7 +2318,7 @@ func TestClientReadSeek(t *testing.T) { require.NoError(t, err) for _, track := range tracks { - _, err := c.Setup(headers.TransportModePlay, baseURL, track, 0, 0) + _, err := c.Setup(true, baseURL, track, 0, 0) require.NoError(t, err) } diff --git a/examples/client-read-h264-save-to-disk/main.go b/examples/client-read-h264-save-to-disk/main.go index e5d3f227..15ef63ad 100644 --- a/examples/client-read-h264-save-to-disk/main.go +++ b/examples/client-read-h264-save-to-disk/main.go @@ -3,7 +3,6 @@ package main import ( "github.com/aler9/gortsplib" "github.com/aler9/gortsplib/pkg/base" - "github.com/aler9/gortsplib/pkg/headers" "github.com/aler9/gortsplib/pkg/rtph264" "github.com/pion/rtp" ) @@ -97,7 +96,7 @@ func main() { // setup all tracks for _, t := range tracks { - _, err := c.Setup(headers.TransportModePlay, baseURL, t, 0, 0) + _, err := c.Setup(true, baseURL, t, 0, 0) if err != nil { panic(err) } diff --git a/examples/client-read-h264/main.go b/examples/client-read-h264/main.go index 96baf6ee..9a1ccb3a 100644 --- a/examples/client-read-h264/main.go +++ b/examples/client-read-h264/main.go @@ -5,7 +5,6 @@ import ( "github.com/aler9/gortsplib" "github.com/aler9/gortsplib/pkg/base" - "github.com/aler9/gortsplib/pkg/headers" "github.com/aler9/gortsplib/pkg/rtph264" "github.com/pion/rtp" ) @@ -85,7 +84,7 @@ func main() { // setup all tracks for _, t := range tracks { - _, err := c.Setup(headers.TransportModePlay, baseURL, t, 0, 0) + _, err := c.Setup(true, baseURL, t, 0, 0) if err != nil { panic(err) } diff --git a/examples/client-read-partial/main.go b/examples/client-read-partial/main.go index 595d0cd0..4fc29a4e 100644 --- a/examples/client-read-partial/main.go +++ b/examples/client-read-partial/main.go @@ -5,7 +5,6 @@ import ( "github.com/aler9/gortsplib" "github.com/aler9/gortsplib/pkg/base" - "github.com/aler9/gortsplib/pkg/headers" ) // This example shows how to @@ -48,7 +47,7 @@ func main() { // setup only video tracks, skipping audio or application tracks for _, t := range tracks { if t.Media.MediaName.Media == "video" { - _, err := c.Setup(headers.TransportModePlay, baseURL, t, 0, 0) + _, err := c.Setup(true, baseURL, t, 0, 0) if err != nil { panic(err) }