mirror of
https://github.com/aler9/gortsplib
synced 2025-10-05 15:16:51 +08:00
client: remove StartReading, StartReadingAndWait
This commit is contained in:
32
client.go
32
client.go
@@ -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)
|
||||||
|
@@ -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
|
||||||
|
@@ -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()
|
||||||
|
|
||||||
|
@@ -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)
|
||||||
|
@@ -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)
|
||||||
|
@@ -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)
|
||||||
|
@@ -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)
|
||||||
|
@@ -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())
|
||||||
}
|
}
|
||||||
|
@@ -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)
|
||||||
|
@@ -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)
|
||||||
|
@@ -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())
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user