mirror of
https://github.com/aler9/gortsplib
synced 2025-10-04 14:52:46 +08:00
client: simplify Setup()
This commit is contained in:
27
client.go
27
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,
|
||||
|
@@ -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)
|
||||
}
|
||||
|
||||
|
@@ -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)
|
||||
}
|
||||
|
@@ -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)
|
||||
}
|
||||
|
@@ -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)
|
||||
}
|
||||
|
Reference in New Issue
Block a user