From d9d6227906881165bb49dd0de67a1e3ef81d78ce Mon Sep 17 00:00:00 2001 From: aler9 <46489434+aler9@users.noreply.github.com> Date: Tue, 1 Nov 2022 09:58:08 +0100 Subject: [PATCH] client: simplify usage of Setup() --- client.go | 24 +++++++----------------- client_read_test.go | 4 ++-- client_test.go | 2 +- examples/client-read-partial/main.go | 2 +- pkg/liberrors/client.go | 8 -------- 5 files changed, 11 insertions(+), 29 deletions(-) diff --git a/client.go b/client.go index 730e37d9..2300be06 100644 --- a/client.go +++ b/client.go @@ -133,7 +133,6 @@ type announceReq struct { } type setupReq struct { - forPlay bool track Track baseURL *url.URL rtpPort int @@ -417,7 +416,7 @@ func (c *Client) StartPublishing(address string, tracks Tracks) error { } for _, track := range tracks { - _, err := c.Setup(false, track, u, 0, 0) + _, err := c.Setup(track, u, 0, 0) if err != nil { c.Close() return err @@ -482,7 +481,7 @@ func (c *Client) runInner() error { req.res <- clientRes{res: res, err: err} case req := <-c.setup: - res, err := c.doSetup(req.forPlay, req.track, req.baseURL, req.rtpPort, req.rtcpPort) + res, err := c.doSetup(req.track, req.baseURL, req.rtpPort, req.rtcpPort) req.res <- clientRes{res: res, err: err} case req := <-c.play: @@ -664,7 +663,7 @@ func (c *Client) trySwitchingProtocol() error { } for _, track := range prevTracks { - _, err := c.doSetup(true, track.track, prevBaseURL, 0, 0) + _, err := c.doSetup(track.track, prevBaseURL, 0, 0) if err != nil { return err } @@ -1308,7 +1307,6 @@ func (c *Client) Announce(u *url.URL, tracks Tracks) (*base.Response, error) { } func (c *Client) doSetup( - forPlay bool, track Track, baseURL *url.URL, rtpPort int, @@ -1323,12 +1321,6 @@ func (c *Client) doSetup( return nil, err } - if (!forPlay && c.state != clientStatePreRecord) || - (forPlay && c.state != clientStatePrePlay && - c.state != clientStateInitial) { - return nil, liberrors.ErrClientCannotReadPublishAtSameTime{} - } - if c.baseURL != nil && *baseURL != *c.baseURL { return nil, liberrors.ErrClientCannotSetupTracksDifferentURLs{} } @@ -1355,7 +1347,7 @@ func (c *Client) doSetup( }() mode := headers.TransportModePlay - if !forPlay { + if c.state == clientStatePreRecord { mode = headers.TransportModeRecord } @@ -1463,7 +1455,7 @@ func (c *Client) doSetup( v := TransportTCP c.effectiveTransport = &v - return c.doSetup(forPlay, track, baseURL, 0, 0) + return c.doSetup(track, baseURL, 0, 0) } return nil, liberrors.ErrClientBadStatusCode{Code: res.StatusCode, Message: res.StatusMessage} @@ -1485,7 +1477,7 @@ func (c *Client) doSetup( return nil, liberrors.ErrClientTransportHeaderInvalidDelivery{} } - if !forPlay || !c.AnyPortEnable { + if c.state == clientStatePreRecord || !c.AnyPortEnable { if thRes.ServerPorts == nil || isAnyPort(thRes.ServerPorts[0]) || isAnyPort(thRes.ServerPorts[1]) { ct.udpRTPListener.close() ct.udpRTCPListener.close() @@ -1618,7 +1610,6 @@ func (c *Client) doSetup( // rtpPort and rtcpPort are used only if transport is UDP. // if rtpPort and rtcpPort are zero, they are chosen automatically. func (c *Client) Setup( - forPlay bool, track Track, baseURL *url.URL, rtpPort int, @@ -1627,7 +1618,6 @@ func (c *Client) Setup( cres := make(chan clientRes) select { case c.setup <- setupReq{ - forPlay: forPlay, track: track, baseURL: baseURL, rtpPort: rtpPort, @@ -1714,7 +1704,7 @@ func (c *Client) Play(ra *headers.Range) (*base.Response, error) { // SetupAndPlay setups and play the given tracks. func (c *Client) SetupAndPlay(tracks Tracks, baseURL *url.URL) error { for _, t := range tracks { - _, err := c.Setup(true, t, baseURL, 0, 0) + _, err := c.Setup(t, baseURL, 0, 0) if err != nil { return err } diff --git a/client_read_test.go b/client_read_test.go index 88eb405b..82882a91 100644 --- a/client_read_test.go +++ b/client_read_test.go @@ -600,7 +600,7 @@ func TestClientReadPartial(t *testing.T) { tracks, baseURL, _, err := c.Describe(u) require.NoError(t, err) - _, err = c.Setup(true, tracks[1], baseURL, 0, 0) + _, err = c.Setup(tracks[1], baseURL, 0, 0) require.NoError(t, err) _, err = c.Play(nil) @@ -2423,7 +2423,7 @@ func TestClientReadSeek(t *testing.T) { require.NoError(t, err) for _, track := range tracks { - _, err := c.Setup(true, track, baseURL, 0, 0) + _, err := c.Setup(track, baseURL, 0, 0) require.NoError(t, err) } diff --git a/client_test.go b/client_test.go index 2a1df6dd..92647838 100644 --- a/client_test.go +++ b/client_test.go @@ -304,7 +304,7 @@ func TestClientClose(t *testing.T) { _, err = c.Announce(u, nil) require.EqualError(t, err, "terminated") - _, err = c.Setup(true, nil, nil, 0, 0) + _, err = c.Setup(nil, nil, 0, 0) require.EqualError(t, err, "terminated") _, err = c.Play(nil) diff --git a/examples/client-read-partial/main.go b/examples/client-read-partial/main.go index d75f584e..cb946c43 100644 --- a/examples/client-read-partial/main.go +++ b/examples/client-read-partial/main.go @@ -43,7 +43,7 @@ func main() { // setup only H264 tracks, skipping audio or application tracks for _, t := range tracks { if _, ok := t.(*gortsplib.TrackH264); ok { - _, err := c.Setup(true, t, baseURL, 0, 0) + _, err := c.Setup(t, baseURL, 0, 0) if err != nil { panic(err) } diff --git a/pkg/liberrors/client.go b/pkg/liberrors/client.go index a9725ad5..05b105e0 100644 --- a/pkg/liberrors/client.go +++ b/pkg/liberrors/client.go @@ -65,14 +65,6 @@ func (e ErrClientContentTypeUnsupported) Error() string { return fmt.Sprintf("unsupported Content-Type header '%v'", e.CT) } -// ErrClientCannotReadPublishAtSameTime is an error that can be returned by a client. -type ErrClientCannotReadPublishAtSameTime struct{} - -// Error implements the error interface. -func (e ErrClientCannotReadPublishAtSameTime) Error() string { - return "cannot read and publish at the same time" -} - // ErrClientCannotSetupTracksDifferentURLs is an error that can be returned by a client. type ErrClientCannotSetupTracksDifferentURLs struct{}