mirror of
https://github.com/aler9/gortsplib
synced 2025-09-27 03:25:52 +08:00
client: add Start2; deprecate Start (#801)
This commit is contained in:
58
client.go
58
client.go
@@ -355,6 +355,14 @@ type OnPacketRTCPAnyFunc func(*description.Media, rtcp.Packet)
|
||||
|
||||
// Client is a RTSP client.
|
||||
type Client struct {
|
||||
//
|
||||
// Target
|
||||
//
|
||||
// Scheme. Either "rtsp" or "rtsps".
|
||||
Scheme string
|
||||
// Host and port.
|
||||
Host string
|
||||
|
||||
//
|
||||
// RTSP parameters (all optional)
|
||||
//
|
||||
@@ -444,8 +452,6 @@ type Client struct {
|
||||
receiverReportPeriod time.Duration
|
||||
checkTimeoutPeriod time.Duration
|
||||
|
||||
scheme string
|
||||
host string
|
||||
ctx context.Context
|
||||
ctxCancel func()
|
||||
state clientState
|
||||
@@ -497,7 +503,16 @@ type Client struct {
|
||||
}
|
||||
|
||||
// Start initializes the connection to a server.
|
||||
//
|
||||
// Deprecated: replaced by Start2.
|
||||
func (c *Client) Start(scheme string, host string) error {
|
||||
c.Scheme = scheme
|
||||
c.Host = host
|
||||
return c.Start2()
|
||||
}
|
||||
|
||||
// Start2 initializes the connection to a server.
|
||||
func (c *Client) Start2() error {
|
||||
// RTSP parameters
|
||||
if c.ReadTimeout == 0 {
|
||||
c.ReadTimeout = 10 * time.Second
|
||||
@@ -592,8 +607,6 @@ func (c *Client) Start(scheme string, host string) error {
|
||||
|
||||
ctx, ctxCancel := context.WithCancel(context.Background())
|
||||
|
||||
c.scheme = scheme
|
||||
c.host = host
|
||||
c.ctx = ctx
|
||||
c.ctxCancel = ctxCancel
|
||||
c.checkTimeoutTimer = emptyTimer()
|
||||
@@ -632,7 +645,10 @@ func (c *Client) StartRecording(address string, desc *description.Session) error
|
||||
return err
|
||||
}
|
||||
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
c.Scheme = u.Scheme
|
||||
c.Host = u.Host
|
||||
|
||||
err = c.Start2()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -1062,29 +1078,29 @@ func (c *Client) connOpen() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
if c.scheme != "rtsp" && c.scheme != "rtsps" {
|
||||
return liberrors.ErrClientUnsupportedScheme{Scheme: c.scheme}
|
||||
if c.Scheme != "rtsp" && c.Scheme != "rtsps" {
|
||||
return liberrors.ErrClientUnsupportedScheme{Scheme: c.Scheme}
|
||||
}
|
||||
|
||||
dialCtx, dialCtxCancel := context.WithTimeout(c.ctx, c.ReadTimeout)
|
||||
defer dialCtxCancel()
|
||||
|
||||
nconn, err := c.DialContext(dialCtx, "tcp", canonicalAddr(&base.URL{
|
||||
Scheme: c.scheme,
|
||||
Host: c.host,
|
||||
Scheme: c.Scheme,
|
||||
Host: c.Host,
|
||||
}))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if c.scheme == "rtsps" {
|
||||
if c.Scheme == "rtsps" {
|
||||
tlsConfig := c.TLSConfig
|
||||
if tlsConfig == nil {
|
||||
tlsConfig = &tls.Config{}
|
||||
}
|
||||
tlsConfig.ServerName = (&base.URL{
|
||||
Scheme: c.scheme,
|
||||
Host: c.host,
|
||||
Scheme: c.Scheme,
|
||||
Host: c.Host,
|
||||
}).Hostname()
|
||||
|
||||
nconn = tls.Client(nconn, tlsConfig)
|
||||
@@ -1352,7 +1368,7 @@ func (c *Client) doDescribe(u *base.URL) (*description.Session, *base.Response,
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
if c.scheme == "rtsps" && ru.Scheme != "rtsps" {
|
||||
if c.Scheme == "rtsps" && ru.Scheme != "rtsps" {
|
||||
return nil, nil, fmt.Errorf("connection cannot be downgraded from RTSPS to RTSP")
|
||||
}
|
||||
|
||||
@@ -1360,8 +1376,8 @@ func (c *Client) doDescribe(u *base.URL) (*description.Session, *base.Response,
|
||||
ru.User = u.User
|
||||
}
|
||||
|
||||
c.scheme = ru.Scheme
|
||||
c.host = ru.Host
|
||||
c.Scheme = ru.Scheme
|
||||
c.Host = ru.Host
|
||||
|
||||
return c.doDescribe(ru)
|
||||
}
|
||||
@@ -1435,12 +1451,12 @@ func (c *Client) doAnnounce(u *base.URL, desc *description.Session) (*base.Respo
|
||||
return nil, err
|
||||
}
|
||||
|
||||
announceData, err := generateAnnounceData(desc, c.scheme == "rtsps")
|
||||
announceData, err := generateAnnounceData(desc, c.Scheme == "rtsps")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = prepareForAnnounce(desc, announceData, c.scheme == "rtsps")
|
||||
err = prepareForAnnounce(desc, announceData, c.Scheme == "rtsps")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -1535,13 +1551,13 @@ func (c *Client) doSetup(
|
||||
// use transport from config, secure flag from server
|
||||
case c.Transport != nil:
|
||||
transport = *c.Transport
|
||||
th.Secure = medi.Secure && c.scheme == "rtsps"
|
||||
th.Secure = medi.Secure && c.Scheme == "rtsps"
|
||||
|
||||
// try UDP if unencrypted or secure is supported by server, otherwise try TCP
|
||||
default:
|
||||
th.Secure = medi.Secure && c.scheme == "rtsps"
|
||||
th.Secure = medi.Secure && c.Scheme == "rtsps"
|
||||
|
||||
if th.Secure || c.scheme == "rtsp" {
|
||||
if th.Secure || c.Scheme == "rtsp" {
|
||||
transport = TransportUDP
|
||||
} else {
|
||||
transport = TransportTCP
|
||||
@@ -1560,7 +1576,7 @@ func (c *Client) doSetup(
|
||||
|
||||
switch transport {
|
||||
case TransportUDP, TransportUDPMulticast:
|
||||
if c.scheme == "rtsps" && !medi.Secure {
|
||||
if c.Scheme == "rtsps" && !medi.Secure {
|
||||
cm.close()
|
||||
return nil, fmt.Errorf("server does not support secure UDP")
|
||||
}
|
||||
|
@@ -82,7 +82,10 @@ func readAll(c *Client, ur string, cb func(*description.Media, format.Format, *r
|
||||
return err
|
||||
}
|
||||
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
c.Scheme = u.Scheme
|
||||
c.Host = u.Host
|
||||
|
||||
err = c.Start2()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -604,7 +607,12 @@ func TestClientPlay(t *testing.T) {
|
||||
require.NoError(t, err2)
|
||||
}()
|
||||
|
||||
u, err := base.ParseURL(ca.scheme + "://" + listenIP + ":8554/test/stream?param=value")
|
||||
require.NoError(t, err)
|
||||
|
||||
c := Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
TLSConfig: &tls.Config{InsecureSkipVerify: true},
|
||||
Transport: func() *Transport {
|
||||
switch ca.transport {
|
||||
@@ -623,10 +631,7 @@ func TestClientPlay(t *testing.T) {
|
||||
}(),
|
||||
}
|
||||
|
||||
u, err := base.ParseURL(ca.scheme + "://" + listenIP + ":8554/test/stream?param=value")
|
||||
require.NoError(t, err)
|
||||
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
require.NoError(t, err)
|
||||
defer c.Close()
|
||||
|
||||
@@ -1029,14 +1034,16 @@ func TestClientPlayPartial(t *testing.T) {
|
||||
|
||||
packetRecv := make(chan struct{})
|
||||
|
||||
c := Client{
|
||||
Transport: transportPtr(TransportTCP),
|
||||
}
|
||||
|
||||
u, err := base.ParseURL("rtsp://" + listenIP + ":8554/teststream")
|
||||
require.NoError(t, err)
|
||||
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
c := Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
Transport: transportPtr(TransportTCP),
|
||||
}
|
||||
|
||||
err = c.Start2()
|
||||
require.NoError(t, err)
|
||||
defer c.Close()
|
||||
|
||||
@@ -3904,7 +3911,12 @@ func TestClientPlayBackChannel(t *testing.T) {
|
||||
require.NoError(t, err2)
|
||||
}()
|
||||
|
||||
u, err := base.ParseURL("rtsp://localhost:8554/teststream")
|
||||
require.NoError(t, err)
|
||||
|
||||
c := Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
RequestBackChannels: true,
|
||||
Transport: func() *Transport {
|
||||
if transport == "tcp" {
|
||||
@@ -3916,10 +3928,7 @@ func TestClientPlayBackChannel(t *testing.T) {
|
||||
receiverReportPeriod: 750 * time.Millisecond,
|
||||
}
|
||||
|
||||
u, err := base.ParseURL("rtsp://localhost:8554/teststream")
|
||||
require.NoError(t, err)
|
||||
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
require.NoError(t, err)
|
||||
defer c.Close()
|
||||
|
||||
|
@@ -80,7 +80,10 @@ func record(c *Client, ur string, medias []*description.Media, cb func(*descript
|
||||
return err
|
||||
}
|
||||
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
c.Scheme = u.Scheme
|
||||
c.Host = u.Host
|
||||
|
||||
err = c.Start2()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@@ -86,10 +86,12 @@ func TestClientTLSSetServerName(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
|
||||
c := Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
TLSConfig: &tls.Config{},
|
||||
}
|
||||
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
require.NoError(t, err)
|
||||
defer c.Close()
|
||||
|
||||
@@ -103,9 +105,12 @@ func TestClientClose(t *testing.T) {
|
||||
u, err := base.ParseURL("rtsp://localhost:8554/teststream")
|
||||
require.NoError(t, err)
|
||||
|
||||
c := Client{}
|
||||
c := Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
require.NoError(t, err)
|
||||
|
||||
c.Close()
|
||||
@@ -162,9 +167,12 @@ func TestClientCloseDuringRequest(t *testing.T) {
|
||||
u, err := base.ParseURL("rtsp://localhost:8554/teststream")
|
||||
require.NoError(t, err)
|
||||
|
||||
c := Client{}
|
||||
c := Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
require.NoError(t, err)
|
||||
|
||||
optionsDone := make(chan struct{})
|
||||
@@ -232,9 +240,12 @@ func TestClientSession(t *testing.T) {
|
||||
u, err := base.ParseURL("rtsp://localhost:8554/stream")
|
||||
require.NoError(t, err)
|
||||
|
||||
c := Client{}
|
||||
c := Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
require.NoError(t, err)
|
||||
defer c.Close()
|
||||
|
||||
@@ -309,9 +320,12 @@ func TestClientAuth(t *testing.T) {
|
||||
u, err := base.ParseURL("rtsp://myuser:mypass@localhost:8554/stream")
|
||||
require.NoError(t, err)
|
||||
|
||||
c := Client{}
|
||||
c := Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
require.NoError(t, err)
|
||||
defer c.Close()
|
||||
|
||||
@@ -385,9 +399,12 @@ func TestClientCSeq(t *testing.T) {
|
||||
u, err := base.ParseURL("rtsp://localhost:8554/teststream")
|
||||
require.NoError(t, err)
|
||||
|
||||
c := Client{}
|
||||
c := Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
require.NoError(t, err)
|
||||
defer c.Close()
|
||||
|
||||
@@ -448,9 +465,12 @@ func TestClientDescribeCharset(t *testing.T) {
|
||||
u, err := base.ParseURL("rtsp://localhost:8554/teststream")
|
||||
require.NoError(t, err)
|
||||
|
||||
c := Client{}
|
||||
c := Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
require.NoError(t, err)
|
||||
defer c.Close()
|
||||
|
||||
@@ -534,9 +554,12 @@ func TestClientReplyToServerRequest(t *testing.T) {
|
||||
u, err := base.ParseURL("rtsp://localhost:8554/stream")
|
||||
require.NoError(t, err)
|
||||
|
||||
c := Client{}
|
||||
c := Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
require.NoError(t, err)
|
||||
defer c.Close()
|
||||
|
||||
@@ -599,9 +622,12 @@ func TestClientRelativeContentBase(t *testing.T) {
|
||||
u, err := base.ParseURL("rtsp://localhost:8554/teststream")
|
||||
require.NoError(t, err)
|
||||
|
||||
c := Client{}
|
||||
c := Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
require.NoError(t, err)
|
||||
defer c.Close()
|
||||
|
||||
|
@@ -47,18 +47,20 @@ func findG711BackChannel(desc *description.Session) (*description.Media, *format
|
||||
}
|
||||
|
||||
func main() {
|
||||
c := gortsplib.Client{
|
||||
RequestBackChannels: true,
|
||||
}
|
||||
|
||||
// parse URL
|
||||
u, err := base.ParseURL("rtsp://myuser:mypass@localhost:8554/mystream")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
c := gortsplib.Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
RequestBackChannels: true,
|
||||
}
|
||||
|
||||
// connect to the server
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@@ -46,16 +46,19 @@ func saveToFile(img image.Image) error {
|
||||
}
|
||||
|
||||
func main() {
|
||||
c := gortsplib.Client{}
|
||||
|
||||
// parse URL
|
||||
u, err := base.ParseURL("rtsp://myuser:mypass@localhost:8554/mystream")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
c := gortsplib.Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
// connect to the server
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@@ -23,16 +23,19 @@ import (
|
||||
// apt install -y libavcodec-dev libswscale-dev gcc pkg-config
|
||||
|
||||
func main() {
|
||||
c := gortsplib.Client{}
|
||||
|
||||
// parse URL
|
||||
u, err := base.ParseURL("rtsp://myuser:mypass@localhost:8554/mystream")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
c := gortsplib.Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
// connect to the server
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@@ -17,16 +17,19 @@ import (
|
||||
// 3. decode the G711 stream into audio samples.
|
||||
|
||||
func main() {
|
||||
c := gortsplib.Client{}
|
||||
|
||||
// parse URL
|
||||
u, err := base.ParseURL("rtsp://myuser:mypass@localhost:8554/mystream")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
c := gortsplib.Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
// connect to the server
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@@ -18,16 +18,19 @@ import (
|
||||
// 3. save the content of these streams in a file in MPEG-TS format.
|
||||
|
||||
func main() {
|
||||
c := gortsplib.Client{}
|
||||
|
||||
// parse URL
|
||||
u, err := base.ParseURL("rtsp://myuser:mypass@localhost:8554/stream")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
c := gortsplib.Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
// connect to the server
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@@ -18,16 +18,19 @@ import (
|
||||
// 3. save the content of the format in a file in MPEG-TS format.
|
||||
|
||||
func main() {
|
||||
c := gortsplib.Client{}
|
||||
|
||||
// parse URL
|
||||
u, err := base.ParseURL("rtsp://myuser:mypass@localhost:8554/mystream")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
c := gortsplib.Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
// connect to the server
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@@ -46,16 +46,19 @@ func saveToFile(img image.Image) error {
|
||||
}
|
||||
|
||||
func main() {
|
||||
c := gortsplib.Client{}
|
||||
|
||||
// parse URL
|
||||
u, err := base.ParseURL("rtsp://myuser:mypass@localhost:8554/mystream")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
c := gortsplib.Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
// connect to the server
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@@ -23,16 +23,19 @@ import (
|
||||
// apt install -y libavcodec-dev libswscale-dev gcc pkg-config
|
||||
|
||||
func main() {
|
||||
c := gortsplib.Client{}
|
||||
|
||||
// parse URL
|
||||
u, err := base.ParseURL("rtsp://myuser:mypass@localhost:8554/mystream")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
c := gortsplib.Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
// connect to the server
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@@ -18,16 +18,19 @@ import (
|
||||
// 3. save the content of the format in a file in MPEG-TS format.
|
||||
|
||||
func main() {
|
||||
c := gortsplib.Client{}
|
||||
|
||||
// parse URL
|
||||
u, err := base.ParseURL("rtsp://myuser:mypass@localhost:8554/mystream")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
c := gortsplib.Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
// connect to the server
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@@ -46,16 +46,19 @@ func saveToFile(img image.Image) error {
|
||||
}
|
||||
|
||||
func main() {
|
||||
c := gortsplib.Client{}
|
||||
|
||||
// parse URL
|
||||
u, err := base.ParseURL("rtsp://myuser:mypass@localhost:8554/mystream")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
c := gortsplib.Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
// connect to the server
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@@ -23,16 +23,19 @@ import (
|
||||
// apt install -y libavcodec-dev libswscale-dev gcc pkg-config
|
||||
|
||||
func main() {
|
||||
c := gortsplib.Client{}
|
||||
|
||||
// parse URL
|
||||
u, err := base.ParseURL("rtsp://myuser:mypass@localhost:8554/mystream")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
c := gortsplib.Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
// connect to the server
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@@ -16,16 +16,19 @@ import (
|
||||
// 3. get LPCM samples of that format.
|
||||
|
||||
func main() {
|
||||
c := gortsplib.Client{}
|
||||
|
||||
// parse URL
|
||||
u, err := base.ParseURL("rtsp://myuser:mypass@localhost:8554/mystream")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
c := gortsplib.Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
// connect to the server
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@@ -21,16 +21,19 @@ import (
|
||||
// 4. decode JPEG images into RGBA frames.
|
||||
|
||||
func main() {
|
||||
c := gortsplib.Client{}
|
||||
|
||||
// parse URL
|
||||
u, err := base.ParseURL("rtsp://myuser:mypass@localhost:8554/mystream")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
c := gortsplib.Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
// connect to the server
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@@ -17,16 +17,19 @@ import (
|
||||
// 3. save the content of the format in a file in MPEG-TS format.
|
||||
|
||||
func main() {
|
||||
c := gortsplib.Client{}
|
||||
|
||||
// parse URL
|
||||
u, err := base.ParseURL("rtsp://myuser:mypass@localhost:8554/mystream")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
c := gortsplib.Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
// connect to the server
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@@ -16,16 +16,19 @@ import (
|
||||
// 3. get access units of that format.
|
||||
|
||||
func main() {
|
||||
c := gortsplib.Client{}
|
||||
|
||||
// parse URL
|
||||
u, err := base.ParseURL("rtsp://myuser:mypass@localhost:8554/mystream")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
c := gortsplib.Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
// connect to the server
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@@ -17,16 +17,19 @@ import (
|
||||
// 3. save the content of the format in a file in MPEG-TS format.
|
||||
|
||||
func main() {
|
||||
c := gortsplib.Client{}
|
||||
|
||||
// parse URL
|
||||
u, err := base.ParseURL("rtsp://myuser:mypass@localhost:8554/mystream")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
c := gortsplib.Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
// connect to the server
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@@ -16,16 +16,19 @@ import (
|
||||
// 3. get Opus packets of that format.
|
||||
|
||||
func main() {
|
||||
c := gortsplib.Client{}
|
||||
|
||||
// parse URL
|
||||
u, err := base.ParseURL("rtsp://myuser:mypass@localhost:8554/mystream")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
c := gortsplib.Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
// connect to the server
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@@ -22,16 +22,19 @@ import (
|
||||
// apt install -y libavcodec-dev libswscale-dev gcc pkg-config
|
||||
|
||||
func main() {
|
||||
c := gortsplib.Client{}
|
||||
|
||||
// parse URL
|
||||
u, err := base.ParseURL("rtsp://myuser:mypass@localhost:8554/mystream")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
c := gortsplib.Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
// connect to the server
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@@ -22,16 +22,19 @@ import (
|
||||
// apt install -y libavcodec-dev libswscale-dev gcc pkg-config
|
||||
|
||||
func main() {
|
||||
c := gortsplib.Client{}
|
||||
|
||||
// parse URL
|
||||
u, err := base.ParseURL("rtsp://myuser:mypass@localhost:8554/mystream")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
c := gortsplib.Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
// connect to the server
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@@ -18,8 +18,16 @@ import (
|
||||
// 2. connect to a RTSP server and read all medias on a path.
|
||||
|
||||
func main() {
|
||||
// parse URL
|
||||
u, err := base.ParseURL("rtsp://myuser:mypass@localhost:8554/mystream")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// Client allows to set additional client options
|
||||
c := &gortsplib.Client{
|
||||
c := gortsplib.Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
// transport protocol (UDP, Multicast or TCP). If nil, it is chosen automatically
|
||||
Transport: nil,
|
||||
// timeout of read operations
|
||||
@@ -28,14 +36,8 @@ func main() {
|
||||
WriteTimeout: 10 * time.Second,
|
||||
}
|
||||
|
||||
// parse URL
|
||||
u, err := base.ParseURL("rtsp://myuser:mypass@localhost:8554/mystream")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// connect to the server
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@@ -20,16 +20,19 @@ import (
|
||||
// 4. repeat.
|
||||
|
||||
func main() {
|
||||
c := gortsplib.Client{}
|
||||
|
||||
// parse URL
|
||||
u, err := base.ParseURL("rtsp://myuser:mypass@localhost:8554/mystream")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
c := gortsplib.Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
// connect to the server
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@@ -17,16 +17,19 @@ import (
|
||||
// 3. Get PTS and NTP of incoming RTP packets.
|
||||
|
||||
func main() {
|
||||
c := gortsplib.Client{}
|
||||
|
||||
// parse URL
|
||||
u, err := base.ParseURL("rtsp://myuser:mypass@localhost:8554/mystream")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
c := gortsplib.Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
// connect to the server
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@@ -17,16 +17,19 @@ import (
|
||||
// 3. re-publish all medias on another path.
|
||||
|
||||
func main() {
|
||||
reader := gortsplib.Client{}
|
||||
|
||||
// parse source URL
|
||||
sourceURL, err := base.ParseURL("rtsp://myuser:mypass@localhost:8554/mystream")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
reader := gortsplib.Client{
|
||||
Scheme: sourceURL.Scheme,
|
||||
Host: sourceURL.Host,
|
||||
}
|
||||
|
||||
// connect to the server
|
||||
err = reader.Start(sourceURL.Scheme, sourceURL.Host)
|
||||
err = reader.Start2()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@@ -17,16 +17,19 @@ import (
|
||||
// 2. read all media streams on a path.
|
||||
|
||||
func main() {
|
||||
c := gortsplib.Client{}
|
||||
|
||||
// parse URL
|
||||
u, err := base.ParseURL("rtsp://myuser:mypass@localhost:8554/mystream")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
c := gortsplib.Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
// connect to the server
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
err = c.Start2()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@@ -13,14 +13,17 @@ import (
|
||||
// 2. get and print informations about medias published on a path.
|
||||
|
||||
func main() {
|
||||
c := gortsplib.Client{}
|
||||
|
||||
u, err := base.ParseURL("rtsp://myuser:mypass@localhost:8554/mypath")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
err = c.Start(u.Scheme, u.Host)
|
||||
c := gortsplib.Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
err = c.Start2()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@@ -48,18 +48,20 @@ func (c *client) run() {
|
||||
}
|
||||
|
||||
func (c *client) read() error {
|
||||
rc := gortsplib.Client{
|
||||
RequestBackChannels: true,
|
||||
}
|
||||
|
||||
// parse URL
|
||||
u, err := base.ParseURL(existingStream)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
rc := gortsplib.Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
RequestBackChannels: true,
|
||||
}
|
||||
|
||||
// connect to the server
|
||||
err = rc.Start(u.Scheme, u.Host)
|
||||
err = rc.Start2()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@@ -35,16 +35,19 @@ func (c *client) run() {
|
||||
}
|
||||
|
||||
func (c *client) read() error {
|
||||
rc := gortsplib.Client{}
|
||||
|
||||
// parse URL
|
||||
u, err := base.ParseURL(existingStream)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
rc := gortsplib.Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
}
|
||||
|
||||
// connect to the server
|
||||
err = rc.Start(u.Scheme, u.Host)
|
||||
err = rc.Start2()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@@ -156,10 +156,12 @@ func TestClientVsServer(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
|
||||
reader := &gortsplib.Client{
|
||||
Scheme: u.Scheme,
|
||||
Host: u.Host,
|
||||
TLSConfig: &tls.Config{InsecureSkipVerify: true},
|
||||
Transport: &readerProto,
|
||||
}
|
||||
err = reader.Start(u.Scheme, u.Host)
|
||||
err = reader.Start2()
|
||||
require.NoError(t, err)
|
||||
defer reader.Close()
|
||||
|
||||
|
Reference in New Issue
Block a user