ConnClient: new methods DialRead and DialPublish

This commit is contained in:
aler9
2020-10-04 16:15:11 +02:00
parent a36d16b015
commit 973464ed1d
7 changed files with 216 additions and 281 deletions

108
connclientdial.go Normal file
View File

@@ -0,0 +1,108 @@
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
}