client: simplify Setup()

This commit is contained in:
aler9
2021-11-12 17:26:42 +01:00
committed by Alessandro Ros
parent 3ead94477f
commit 08ab7f87ac
5 changed files with 21 additions and 19 deletions

View File

@@ -100,7 +100,7 @@ type announceReq struct {
} }
type setupReq struct { type setupReq struct {
mode headers.TransportMode forPlay bool
baseURL *base.URL baseURL *base.URL
track *Track track *Track
rtpPort int rtpPort int
@@ -340,7 +340,7 @@ func (c *Client) StartReading(address string) error {
} }
for _, track := range tracks { for _, track := range tracks {
_, err := c.Setup(headers.TransportModePlay, baseURL, track, 0, 0) _, err := c.Setup(true, baseURL, track, 0, 0)
if err != nil { if err != nil {
c.Close() c.Close()
return err return err
@@ -392,7 +392,7 @@ func (c *Client) StartPublishing(address string, tracks Tracks) error {
} }
for _, track := range tracks { for _, track := range tracks {
_, err := c.Setup(headers.TransportModeRecord, u, track, 0, 0) _, err := c.Setup(false, u, track, 0, 0)
if err != nil { if err != nil {
c.Close() c.Close()
return err return err
@@ -460,7 +460,7 @@ func (c *Client) run() {
req.res <- clientRes{res: res, err: err} req.res <- clientRes{res: res, err: err}
case req := <-c.setup: 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} req.res <- clientRes{res: res, err: err}
case req := <-c.play: case req := <-c.play:
@@ -669,7 +669,7 @@ func (c *Client) trySwitchingProtocol() error {
c.host = prevBaseURL.Host c.host = prevBaseURL.Host
for _, track := range prevTracks { 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 { if err != nil {
return err return err
} }
@@ -1198,7 +1198,7 @@ func (c *Client) Announce(u *base.URL, tracks Tracks) (*base.Response, error) {
} }
func (c *Client) doSetup( func (c *Client) doSetup(
mode headers.TransportMode, forPlay bool,
baseURL *base.URL, baseURL *base.URL,
track *Track, track *Track,
rtpPort int, rtpPort int,
@@ -1212,8 +1212,8 @@ func (c *Client) doSetup(
return nil, err return nil, err
} }
if (mode == headers.TransportModeRecord && c.state != clientStatePreRecord) || if (!forPlay && c.state != clientStatePreRecord) ||
(mode == headers.TransportModePlay && c.state != clientStatePrePlay && (forPlay && c.state != clientStatePrePlay &&
c.state != clientStateInitial) { c.state != clientStateInitial) {
return nil, liberrors.ErrClientCannotReadPublishAtSameTime{} return nil, liberrors.ErrClientCannotReadPublishAtSameTime{}
} }
@@ -1246,6 +1246,11 @@ func (c *Client) doSetup(
return TransportUDP return TransportUDP
}() }()
mode := headers.TransportModePlay
if !forPlay {
mode = headers.TransportModeRecord
}
th := headers.Transport{ th := headers.Transport{
Mode: &mode, Mode: &mode,
} }
@@ -1336,7 +1341,7 @@ func (c *Client) doSetup(
v := TransportTCP v := TransportTCP
c.protocol = &v 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} 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. // rtpPort and rtcpPort are used only if protocol is UDP.
// if rtpPort and rtcpPort are zero, they are chosen automatically. // if rtpPort and rtcpPort are zero, they are chosen automatically.
func (c *Client) Setup( func (c *Client) Setup(
mode headers.TransportMode, forPlay bool,
baseURL *base.URL, baseURL *base.URL,
track *Track, track *Track,
rtpPort int, rtpPort int,
@@ -1503,7 +1508,7 @@ func (c *Client) Setup(
cres := make(chan clientRes) cres := make(chan clientRes)
select { select {
case c.setup <- setupReq{ case c.setup <- setupReq{
mode: mode, forPlay: forPlay,
baseURL: baseURL, baseURL: baseURL,
track: track, track: track,
rtpPort: rtpPort, rtpPort: rtpPort,

View File

@@ -672,7 +672,7 @@ func TestClientReadPartial(t *testing.T) {
tracks, baseURL, _, err := c.Describe(u) tracks, baseURL, _, err := c.Describe(u)
require.NoError(t, err) 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) require.NoError(t, err)
_, err = c.Play(nil) _, err = c.Play(nil)
@@ -2318,7 +2318,7 @@ func TestClientReadSeek(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
for _, track := range tracks { 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) require.NoError(t, err)
} }

View File

@@ -3,7 +3,6 @@ package main
import ( import (
"github.com/aler9/gortsplib" "github.com/aler9/gortsplib"
"github.com/aler9/gortsplib/pkg/base" "github.com/aler9/gortsplib/pkg/base"
"github.com/aler9/gortsplib/pkg/headers"
"github.com/aler9/gortsplib/pkg/rtph264" "github.com/aler9/gortsplib/pkg/rtph264"
"github.com/pion/rtp" "github.com/pion/rtp"
) )
@@ -97,7 +96,7 @@ func main() {
// setup all tracks // setup all tracks
for _, t := range 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 { if err != nil {
panic(err) panic(err)
} }

View File

@@ -5,7 +5,6 @@ import (
"github.com/aler9/gortsplib" "github.com/aler9/gortsplib"
"github.com/aler9/gortsplib/pkg/base" "github.com/aler9/gortsplib/pkg/base"
"github.com/aler9/gortsplib/pkg/headers"
"github.com/aler9/gortsplib/pkg/rtph264" "github.com/aler9/gortsplib/pkg/rtph264"
"github.com/pion/rtp" "github.com/pion/rtp"
) )
@@ -85,7 +84,7 @@ func main() {
// setup all tracks // setup all tracks
for _, t := range 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 { if err != nil {
panic(err) panic(err)
} }

View File

@@ -5,7 +5,6 @@ import (
"github.com/aler9/gortsplib" "github.com/aler9/gortsplib"
"github.com/aler9/gortsplib/pkg/base" "github.com/aler9/gortsplib/pkg/base"
"github.com/aler9/gortsplib/pkg/headers"
) )
// This example shows how to // This example shows how to
@@ -48,7 +47,7 @@ func main() {
// setup only video tracks, skipping audio or application tracks // setup only video tracks, skipping audio or application tracks
for _, t := range tracks { for _, t := range tracks {
if t.Media.MediaName.Media == "video" { 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 { if err != nil {
panic(err) panic(err)
} }