Files
gortsplib/connclientdial.go

109 lines
1.9 KiB
Go

package gortsplib
import (
"net/url"
)
// DialRead connects to the address and starts reading all tracks.
func DialRead(address string, proto StreamProtocol) (*ConnClient, Tracks, error) {
u, err := url.Parse(address)
if err != nil {
return nil, nil, err
}
conn, err := NewConnClient(ConnClientConf{Host: u.Host})
if err != nil {
return nil, nil, err
}
_, err = conn.Options(u)
if err != nil {
conn.Close()
return nil, nil, err
}
tracks, _, err := conn.Describe(u)
if err != nil {
conn.Close()
return nil, nil, err
}
if proto == StreamProtocolUDP {
for _, track := range tracks {
_, err := conn.SetupUDP(u, SetupModePlay, track, 0, 0)
if err != nil {
return nil, nil, err
}
}
} else {
for _, track := range tracks {
_, err := conn.SetupTCP(u, SetupModePlay, track)
if err != nil {
conn.Close()
return nil, nil, err
}
}
}
_, err = conn.Play(u)
if err != nil {
conn.Close()
return nil, nil, err
}
return conn, tracks, nil
}
// DialPublish connects to the address and starts publishing the tracks.
func DialPublish(address string, proto StreamProtocol, tracks Tracks) (*ConnClient, error) {
u, err := url.Parse(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, SetupModeRecord, track, 0, 0)
if err != nil {
conn.Close()
return nil, err
}
}
} else {
for _, track := range tracks {
_, err = conn.SetupTCP(u, SetupModeRecord, track)
if err != nil {
conn.Close()
return nil, err
}
}
}
_, err = conn.Record(u)
if err != nil {
conn.Close()
return nil, err
}
return conn, nil
}