client: remove StartReading, StartReadingAndWait

This commit is contained in:
aler9
2022-07-09 17:08:37 +02:00
parent 36c6d0b7ef
commit e262385062
11 changed files with 140 additions and 75 deletions

View File

@@ -381,38 +381,6 @@ func (c *Client) Start(scheme string, host string) error {
return nil return nil
} }
// StartReading connects to the address and starts reading all tracks.
func (c *Client) StartReading(address string) error {
u, err := url.Parse(address)
if err != nil {
return err
}
err = c.Start(u.Scheme, u.Host)
if err != nil {
return err
}
tracks, baseURL, _, err := c.Describe(u)
if err != nil {
c.Close()
return err
}
return c.SetupAndPlay(tracks, baseURL)
}
// StartReadingAndWait connects to the address, starts reading all tracks and waits
// until a read error.
func (c *Client) StartReadingAndWait(address string) error {
err := c.StartReading(address)
if err != nil {
return err
}
return c.Wait()
}
// StartPublishing connects to the address and starts publishing the tracks. // StartPublishing connects to the address and starts publishing the tracks.
func (c *Client) StartPublishing(address string, tracks Tracks) error { func (c *Client) StartPublishing(address string, tracks Tracks) error {
u, err := url.Parse(address) u, err := url.Parse(address)

View File

@@ -218,7 +218,7 @@ func TestClientPublishSerial(t *testing.T) {
recvDone := make(chan struct{}) recvDone := make(chan struct{})
c := &Client{ c := Client{
TLSConfig: &tls.Config{ TLSConfig: &tls.Config{
InsecureSkipVerify: true, InsecureSkipVerify: true,
}, },
@@ -380,7 +380,7 @@ func TestClientPublishParallel(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
}() }()
c := &Client{ c := Client{
TLSConfig: &tls.Config{ TLSConfig: &tls.Config{
InsecureSkipVerify: true, InsecureSkipVerify: true,
}, },
@@ -549,7 +549,7 @@ func TestClientPublishPauseSerial(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
}() }()
c := &Client{ c := Client{
Transport: func() *Transport { Transport: func() *Transport {
if transport == "udp" { if transport == "udp" {
v := TransportUDP v := TransportUDP
@@ -688,7 +688,7 @@ func TestClientPublishPauseParallel(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
}() }()
c := &Client{ c := Client{
Transport: func() *Transport { Transport: func() *Transport {
if transport == "udp" { if transport == "udp" {
v := TransportUDP v := TransportUDP
@@ -986,7 +986,7 @@ func TestClientPublishRTCPReport(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
}() }()
c := &Client{ c := Client{
udpSenderReportPeriod: 1 * time.Second, udpSenderReportPeriod: 1 * time.Second,
} }
@@ -1122,7 +1122,7 @@ func TestClientPublishIgnoreTCPRTPPackets(t *testing.T) {
rtcpReceived := make(chan struct{}) rtcpReceived := make(chan struct{})
c := &Client{ c := Client{
Transport: func() *Transport { Transport: func() *Transport {
v := TransportTCP v := TransportTCP
return &v return &v

View File

@@ -22,6 +22,32 @@ import (
"github.com/aler9/gortsplib/pkg/url" "github.com/aler9/gortsplib/pkg/url"
) )
func startReading(c *Client, ur string) error {
u, err := url.Parse(ur)
if err != nil {
return err
}
err = c.Start(u.Scheme, u.Host)
if err != nil {
return err
}
tracks, baseURL, _, err := c.Describe(u)
if err != nil {
c.Close()
return err
}
err = c.SetupAndPlay(tracks, baseURL)
if err != nil {
c.Close()
return err
}
return nil
}
func TestClientReadTracks(t *testing.T) { func TestClientReadTracks(t *testing.T) {
track1 := &TrackH264{ track1 := &TrackH264{
PayloadType: 96, PayloadType: 96,
@@ -158,7 +184,7 @@ func TestClientReadTracks(t *testing.T) {
c := Client{} c := Client{}
err = c.StartReading("rtsp://localhost:8554/teststream") err = startReading(&c, "rtsp://localhost:8554/teststream")
require.NoError(t, err) require.NoError(t, err)
defer c.Close() defer c.Close()
@@ -403,7 +429,7 @@ func TestClientRead(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
}() }()
c := &Client{ c := Client{
TLSConfig: &tls.Config{ TLSConfig: &tls.Config{
InsecureSkipVerify: true, InsecureSkipVerify: true,
}, },
@@ -432,7 +458,7 @@ func TestClientRead(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
} }
err = c.StartReading(scheme + "://" + listenIP + ":8554/test/stream?param=value") err = startReading(&c, scheme+"://"+listenIP+":8554/test/stream?param=value")
require.NoError(t, err) require.NoError(t, err)
defer c.Close() defer c.Close()
@@ -565,7 +591,7 @@ func TestClientReadPartial(t *testing.T) {
packetRecv := make(chan struct{}) packetRecv := make(chan struct{})
c := &Client{ c := Client{
Transport: func() *Transport { Transport: func() *Transport {
v := TransportTCP v := TransportTCP
return &v return &v
@@ -728,7 +754,7 @@ func TestClientReadContentBase(t *testing.T) {
c := Client{} c := Client{}
err = c.StartReading("rtsp://localhost:8554/teststream") err = startReading(&c, "rtsp://localhost:8554/teststream")
require.NoError(t, err) require.NoError(t, err)
c.Close() c.Close()
}) })
@@ -883,7 +909,7 @@ func TestClientReadAnyPort(t *testing.T) {
packetRecv := make(chan struct{}) packetRecv := make(chan struct{})
c := &Client{ c := Client{
AnyPortEnable: true, AnyPortEnable: true,
OnPacketRTP: func(ctx *ClientOnPacketRTPCtx) { OnPacketRTP: func(ctx *ClientOnPacketRTPCtx) {
require.Equal(t, &testRTPPacket, ctx.Packet) require.Equal(t, &testRTPPacket, ctx.Packet)
@@ -891,7 +917,7 @@ func TestClientReadAnyPort(t *testing.T) {
}, },
} }
err = c.StartReading("rtsp://localhost:8554/teststream") err = startReading(&c, "rtsp://localhost:8554/teststream")
require.NoError(t, err) require.NoError(t, err)
defer c.Close() defer c.Close()
@@ -1023,7 +1049,7 @@ func TestClientReadAutomaticProtocol(t *testing.T) {
}, },
} }
err = c.StartReading("rtsp://localhost:8554/teststream") err = startReading(&c, "rtsp://localhost:8554/teststream")
require.NoError(t, err) require.NoError(t, err)
defer c.Close() defer c.Close()
@@ -1266,14 +1292,14 @@ func TestClientReadAutomaticProtocol(t *testing.T) {
packetRecv := make(chan struct{}) packetRecv := make(chan struct{})
c := &Client{ c := Client{
ReadTimeout: 1 * time.Second, ReadTimeout: 1 * time.Second,
OnPacketRTP: func(ctx *ClientOnPacketRTPCtx) { OnPacketRTP: func(ctx *ClientOnPacketRTPCtx) {
close(packetRecv) close(packetRecv)
}, },
} }
err = c.StartReading("rtsp://myuser:mypass@localhost:8554/teststream") err = startReading(&c, "rtsp://myuser:mypass@localhost:8554/teststream")
require.NoError(t, err) require.NoError(t, err)
defer c.Close() defer c.Close()
@@ -1397,7 +1423,7 @@ func TestClientReadDifferentInterleavedIDs(t *testing.T) {
packetRecv := make(chan struct{}) packetRecv := make(chan struct{})
c := &Client{ c := Client{
Transport: func() *Transport { Transport: func() *Transport {
v := TransportTCP v := TransportTCP
return &v return &v
@@ -1408,7 +1434,7 @@ func TestClientReadDifferentInterleavedIDs(t *testing.T) {
}, },
} }
err = c.StartReading("rtsp://localhost:8554/teststream") err = startReading(&c, "rtsp://localhost:8554/teststream")
require.NoError(t, err) require.NoError(t, err)
defer c.Close() defer c.Close()
@@ -1606,7 +1632,7 @@ func TestClientReadRedirect(t *testing.T) {
if withCredentials { if withCredentials {
ru = "rtsp://testusr:testpwd@localhost:8554/path1" ru = "rtsp://testusr:testpwd@localhost:8554/path1"
} }
err = c.StartReading(ru) err = startReading(&c, ru)
require.NoError(t, err) require.NoError(t, err)
defer c.Close() defer c.Close()
@@ -1806,7 +1832,7 @@ func TestClientReadPause(t *testing.T) {
firstFrame := int32(0) firstFrame := int32(0)
packetRecv := make(chan struct{}) packetRecv := make(chan struct{})
c := &Client{ c := Client{
Transport: func() *Transport { Transport: func() *Transport {
if transport == "udp" { if transport == "udp" {
v := TransportUDP v := TransportUDP
@@ -1822,7 +1848,7 @@ func TestClientReadPause(t *testing.T) {
}, },
} }
err = c.StartReading("rtsp://localhost:8554/teststream") err = startReading(&c, "rtsp://localhost:8554/teststream")
require.NoError(t, err) require.NoError(t, err)
defer c.Close() defer c.Close()
@@ -2013,11 +2039,11 @@ func TestClientReadRTCPReport(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
}() }()
c := &Client{ c := Client{
udpReceiverReportPeriod: 1 * time.Second, udpReceiverReportPeriod: 1 * time.Second,
} }
err = c.StartReading("rtsp://localhost:8554/teststream") err = startReading(&c, "rtsp://localhost:8554/teststream")
require.NoError(t, err) require.NoError(t, err)
defer c.Close() defer c.Close()
@@ -2154,7 +2180,7 @@ func TestClientReadErrorTimeout(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
}() }()
c := &Client{ c := Client{
Transport: func() *Transport { Transport: func() *Transport {
switch transport { switch transport {
case "udp": case "udp":
@@ -2171,7 +2197,7 @@ func TestClientReadErrorTimeout(t *testing.T) {
ReadTimeout: 1 * time.Second, ReadTimeout: 1 * time.Second,
} }
err = c.StartReading("rtsp://localhost:8554/teststream") err = startReading(&c, "rtsp://localhost:8554/teststream")
require.NoError(t, err) require.NoError(t, err)
err = c.Wait() err = c.Wait()
@@ -2306,7 +2332,7 @@ func TestClientReadIgnoreTCPInvalidTrack(t *testing.T) {
recv := make(chan struct{}) recv := make(chan struct{})
c := &Client{ c := Client{
Transport: func() *Transport { Transport: func() *Transport {
v := TransportTCP v := TransportTCP
return &v return &v
@@ -2316,7 +2342,7 @@ func TestClientReadIgnoreTCPInvalidTrack(t *testing.T) {
}, },
} }
err = c.StartReading("rtsp://localhost:8554/teststream") err = startReading(&c, "rtsp://localhost:8554/teststream")
require.NoError(t, err) require.NoError(t, err)
defer c.Close() defer c.Close()
@@ -2463,7 +2489,7 @@ func TestClientReadSeek(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
}() }()
c := &Client{ c := Client{
Transport: func() *Transport { Transport: func() *Transport {
v := TransportTCP v := TransportTCP
return &v return &v
@@ -2623,9 +2649,9 @@ func TestClientReadKeepaliveFromSession(t *testing.T) {
close(keepaliveOk) close(keepaliveOk)
}() }()
c := &Client{} c := Client{}
err = c.StartReading("rtsp://localhost:8554/teststream") err = startReading(&c, "rtsp://localhost:8554/teststream")
require.NoError(t, err) require.NoError(t, err)
defer c.Close() defer c.Close()
@@ -2763,7 +2789,7 @@ func TestClientReadDifferentSource(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
}() }()
c := &Client{ c := Client{
TLSConfig: &tls.Config{ TLSConfig: &tls.Config{
InsecureSkipVerify: true, InsecureSkipVerify: true,
}, },
@@ -2779,7 +2805,7 @@ func TestClientReadDifferentSource(t *testing.T) {
close(packetRecv) close(packetRecv)
} }
err = c.StartReading("rtsp://localhost:8554/test/stream?param=value") err = startReading(&c, "rtsp://localhost:8554/test/stream?param=value")
require.NoError(t, err) require.NoError(t, err)
defer c.Close() defer c.Close()

View File

@@ -75,7 +75,7 @@ func main() {
} }
} }
// start reading tracks // setup and read all tracks
err = c.SetupAndPlay(tracks, baseURL) err = c.SetupAndPlay(tracks, baseURL)
if err != nil { if err != nil {
panic(err) panic(err)

View File

@@ -127,7 +127,7 @@ func main() {
} }
} }
// start reading tracks // setup and read all tracks
err = c.SetupAndPlay(tracks, baseURL) err = c.SetupAndPlay(tracks, baseURL)
if err != nil { if err != nil {
panic(err) panic(err)

View File

@@ -68,7 +68,7 @@ func main() {
} }
} }
// start reading tracks // setup and read all tracks
err = c.SetupAndPlay(tracks, baseURL) err = c.SetupAndPlay(tracks, baseURL)
if err != nil { if err != nil {
panic(err) panic(err)

View File

@@ -93,7 +93,7 @@ func main() {
} }
} }
// start reading tracks // setup and read all tracks
err = c.SetupAndPlay(tracks, baseURL) err = c.SetupAndPlay(tracks, baseURL)
if err != nil { if err != nil {
panic(err) panic(err)

View File

@@ -5,6 +5,7 @@ import (
"time" "time"
"github.com/aler9/gortsplib" "github.com/aler9/gortsplib"
"github.com/aler9/gortsplib/pkg/url"
) )
// This example shows how to // This example shows how to
@@ -30,6 +31,31 @@ func main() {
}, },
} }
// connect to the server and start reading all tracks // parse URL
panic(c.StartReadingAndWait("rtsp://localhost:8554/mystream")) u, err := url.Parse("rtsp://localhost:8554/mystream")
if err != nil {
panic(err)
}
// connect to the server
err = c.Start(u.Scheme, u.Host)
if err != nil {
panic(err)
}
defer c.Close()
// find published tracks
tracks, baseURL, _, err := c.Describe(u)
if err != nil {
panic(err)
}
// setup and read all tracks
err = c.SetupAndPlay(tracks, baseURL)
if err != nil {
panic(err)
}
// wait until a fatal error
panic(c.Wait())
} }

View File

@@ -5,6 +5,7 @@ import (
"time" "time"
"github.com/aler9/gortsplib" "github.com/aler9/gortsplib"
"github.com/aler9/gortsplib/pkg/url"
) )
// This example shows how to // This example shows how to
@@ -25,13 +26,31 @@ func main() {
}, },
} }
// connect to the server and start reading all tracks // parse URL
err := c.StartReading("rtsp://localhost:8554/mystream") u, err := url.Parse("rtsp://localhost:8554/mystream")
if err != nil {
panic(err)
}
// connect to the server
err = c.Start(u.Scheme, u.Host)
if err != nil { if err != nil {
panic(err) panic(err)
} }
defer c.Close() defer c.Close()
// find published tracks
tracks, baseURL, _, err := c.Describe(u)
if err != nil {
panic(err)
}
// setup and read all tracks
err = c.SetupAndPlay(tracks, baseURL)
if err != nil {
panic(err)
}
for { for {
// wait // wait
time.Sleep(5 * time.Second) time.Sleep(5 * time.Second)

View File

@@ -49,7 +49,7 @@ func main() {
publisher.WritePacketRTP(ctx.TrackID, ctx.Packet, ctx.PTSEqualsDTS) publisher.WritePacketRTP(ctx.TrackID, ctx.Packet, ctx.PTSEqualsDTS)
} }
// start reading tracks // setup and read all tracks
err = reader.SetupAndPlay(tracks, baseURL) err = reader.SetupAndPlay(tracks, baseURL)
if err != nil { if err != nil {
panic(err) panic(err)

View File

@@ -4,6 +4,7 @@ import (
"log" "log"
"github.com/aler9/gortsplib" "github.com/aler9/gortsplib"
"github.com/aler9/gortsplib/pkg/url"
) )
// This example shows how to connect to a RTSP server // This example shows how to connect to a RTSP server
@@ -21,6 +22,31 @@ func main() {
}, },
} }
// connect to the server and start reading all tracks // parse URL
panic(c.StartReadingAndWait("rtsp://localhost:8554/mystream")) u, err := url.Parse("rtsp://localhost:8554/mystream")
if err != nil {
panic(err)
}
// connect to the server
err = c.Start(u.Scheme, u.Host)
if err != nil {
panic(err)
}
defer c.Close()
// find published tracks
tracks, baseURL, _, err := c.Describe(u)
if err != nil {
panic(err)
}
// setup and read all tracks
err = c.SetupAndPlay(tracks, baseURL)
if err != nil {
panic(err)
}
// wait until a fatal error
panic(c.Wait())
} }