Files
gortsplib/connclientdial.go
2020-11-01 19:00:05 +01:00

109 lines
1.9 KiB
Go

package gortsplib
import (
"github.com/aler9/gortsplib/base"
)
// DialRead connects to the address and starts reading all tracks.
func DialRead(address string, proto StreamProtocol) (*ConnClient, error) {
u, err := base.ParseURL(address)
if err != nil {
return nil, err
}
conn, err := NewConnClient(ConnClientConf{Host: u.Host()})
if err != nil {
return nil, err
}
_, err = conn.Options(u)
if err != nil {
conn.Close()
return nil, err
}
tracks, _, err := conn.Describe(u)
if err != nil {
conn.Close()
return nil, err
}
if proto == StreamProtocolUDP {
for _, track := range tracks {
_, err := conn.SetupUDP(u, TransportModePlay, track, 0, 0)
if err != nil {
return nil, err
}
}
} else {
for _, track := range tracks {
_, err := conn.SetupTCP(u, TransportModePlay, track)
if err != nil {
conn.Close()
return nil, err
}
}
}
_, err = conn.Play(u)
if err != nil {
conn.Close()
return nil, err
}
return conn, nil
}
// DialPublish connects to the address and starts publishing the tracks.
func DialPublish(address string, proto StreamProtocol, tracks Tracks) (*ConnClient, error) {
u, err := base.ParseURL(address)
if err != nil {
return nil, err
}
conn, err := NewConnClient(ConnClientConf{Host: u.Host()})
if err != nil {
return nil, err
}
_, err = conn.Options(u)
if err != nil {
conn.Close()
return nil, err
}
_, err = conn.Announce(u, tracks)
if err != nil {
conn.Close()
return nil, err
}
if proto == StreamProtocolUDP {
for _, track := range tracks {
_, err = conn.SetupUDP(u, TransportModeRecord, track, 0, 0)
if err != nil {
conn.Close()
return nil, err
}
}
} else {
for _, track := range tracks {
_, err = conn.SetupTCP(u, TransportModeRecord, track)
if err != nil {
conn.Close()
return nil, err
}
}
}
_, err = conn.Record(u)
if err != nil {
conn.Close()
return nil, err
}
return conn, nil
}