mirror of
https://github.com/aler9/gortsplib
synced 2025-10-07 08:01:14 +08:00
ConnClient: new methods DialRead and DialPublish
This commit is contained in:
108
connclientdial.go
Normal file
108
connclientdial.go
Normal 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
|
||||
}
|
Reference in New Issue
Block a user