add ConnClient.Tracks(); remove Tracks from DialRead returned values

This commit is contained in:
aler9
2020-10-10 15:29:03 +02:00
parent d33ee9a73e
commit 6e4eaaea18
5 changed files with 25 additions and 14 deletions

View File

@@ -86,6 +86,7 @@ type ConnClient struct {
state connClientState state connClientState
streamUrl *url.URL streamUrl *url.URL
streamProtocol *StreamProtocol streamProtocol *StreamProtocol
tracks map[int]*Track
rtcpReceivers map[int]*rtcpreceiver.RtcpReceiver rtcpReceivers map[int]*rtcpreceiver.RtcpReceiver
udpLastFrameTimes map[int]*int64 udpLastFrameTimes map[int]*int64
udpRtpListeners map[int]*connClientUDPListener udpRtpListeners map[int]*connClientUDPListener
@@ -131,6 +132,7 @@ func NewConnClient(conf ConnClientConf) (*ConnClient, error) {
conf: conf, conf: conf,
br: bufio.NewReaderSize(conf.Conn, clientReadBufferSize), br: bufio.NewReaderSize(conf.Conn, clientReadBufferSize),
bw: bufio.NewWriterSize(conf.Conn, clientWriteBufferSize), bw: bufio.NewWriterSize(conf.Conn, clientWriteBufferSize),
tracks: make(map[int]*Track),
rtcpReceivers: make(map[int]*rtcpreceiver.RtcpReceiver), rtcpReceivers: make(map[int]*rtcpreceiver.RtcpReceiver),
udpLastFrameTimes: make(map[int]*int64), udpLastFrameTimes: make(map[int]*int64),
udpRtpListeners: make(map[int]*connClientUDPListener), udpRtpListeners: make(map[int]*connClientUDPListener),
@@ -184,6 +186,11 @@ func (c *ConnClient) NetConn() net.Conn {
return c.conf.Conn return c.conf.Conn
} }
// Tracks returns all the tracks passed to SetupUDP() or SetupTCP().
func (c *ConnClient) Tracks() map[int]*Track {
return c.tracks
}
func (c *ConnClient) readFrameTCPOrResponse() (interface{}, error) { func (c *ConnClient) readFrameTCPOrResponse() (interface{}, error) {
frame := c.tcpFrames.next() frame := c.tcpFrames.next()
@@ -579,6 +586,8 @@ func (c *ConnClient) SetupUDP(u *url.URL, mode TransportMode, track *Track, rtpP
streamProtocol := StreamProtocolUDP streamProtocol := StreamProtocolUDP
c.streamProtocol = &streamProtocol c.streamProtocol = &streamProtocol
c.tracks[track.Id] = track
if mode == TransportModePlay { if mode == TransportModePlay {
c.rtcpReceivers[track.Id] = rtcpreceiver.New() c.rtcpReceivers[track.Id] = rtcpreceiver.New()
@@ -643,6 +652,8 @@ func (c *ConnClient) SetupTCP(u *url.URL, mode TransportMode, track *Track) (*ba
streamProtocol := StreamProtocolTCP streamProtocol := StreamProtocolTCP
c.streamProtocol = &streamProtocol c.streamProtocol = &streamProtocol
c.tracks[track.Id] = track
if mode == TransportModePlay { if mode == TransportModePlay {
c.rtcpReceivers[track.Id] = rtcpreceiver.New() c.rtcpReceivers[track.Id] = rtcpreceiver.New()
} }

View File

@@ -5,34 +5,34 @@ import (
) )
// DialRead connects to the address and starts reading all tracks. // DialRead connects to the address and starts reading all tracks.
func DialRead(address string, proto StreamProtocol) (*ConnClient, Tracks, error) { func DialRead(address string, proto StreamProtocol) (*ConnClient, error) {
u, err := url.Parse(address) u, err := url.Parse(address)
if err != nil { if err != nil {
return nil, nil, err return nil, err
} }
conn, err := NewConnClient(ConnClientConf{Host: u.Host}) conn, err := NewConnClient(ConnClientConf{Host: u.Host})
if err != nil { if err != nil {
return nil, nil, err return nil, err
} }
_, err = conn.Options(u) _, err = conn.Options(u)
if err != nil { if err != nil {
conn.Close() conn.Close()
return nil, nil, err return nil, err
} }
tracks, _, err := conn.Describe(u) tracks, _, err := conn.Describe(u)
if err != nil { if err != nil {
conn.Close() conn.Close()
return nil, nil, err return nil, err
} }
if proto == StreamProtocolUDP { if proto == StreamProtocolUDP {
for _, track := range tracks { for _, track := range tracks {
_, err := conn.SetupUDP(u, TransportModePlay, track, 0, 0) _, err := conn.SetupUDP(u, TransportModePlay, track, 0, 0)
if err != nil { if err != nil {
return nil, nil, err return nil, err
} }
} }
@@ -41,7 +41,7 @@ func DialRead(address string, proto StreamProtocol) (*ConnClient, Tracks, error)
_, err := conn.SetupTCP(u, TransportModePlay, track) _, err := conn.SetupTCP(u, TransportModePlay, track)
if err != nil { if err != nil {
conn.Close() conn.Close()
return nil, nil, err return nil, err
} }
} }
} }
@@ -49,10 +49,10 @@ func DialRead(address string, proto StreamProtocol) (*ConnClient, Tracks, error)
_, err = conn.Play(u) _, err = conn.Play(u)
if err != nil { if err != nil {
conn.Close() conn.Close()
return nil, nil, err return nil, err
} }
return conn, tracks, nil return conn, nil
} }
// DialPublish connects to the address and starts publishing the tracks. // DialPublish connects to the address and starts publishing the tracks.

View File

@@ -79,7 +79,7 @@ func TestConnClientDialReadUDP(t *testing.T) {
time.Sleep(1 * time.Second) time.Sleep(1 * time.Second)
conn, _, err := DialRead("rtsp://localhost:8554/teststream", StreamProtocolUDP) conn, err := DialRead("rtsp://localhost:8554/teststream", StreamProtocolUDP)
require.NoError(t, err) require.NoError(t, err)
defer conn.Close() defer conn.Close()
@@ -118,7 +118,7 @@ func TestConnClientDialReadTCP(t *testing.T) {
time.Sleep(1 * time.Second) time.Sleep(1 * time.Second)
conn, _, err := DialRead("rtsp://localhost:8554/teststream", StreamProtocolTCP) conn, err := DialRead("rtsp://localhost:8554/teststream", StreamProtocolTCP)
require.NoError(t, err) require.NoError(t, err)
defer conn.Close() defer conn.Close()

View File

@@ -13,7 +13,7 @@ import (
func main() { func main() {
// connect to the server and start reading all tracks // connect to the server and start reading all tracks
conn, _, err := gortsplib.DialRead("rtsp://localhost:8554/mystream", gortsplib.StreamProtocolTCP) conn, err := gortsplib.DialRead("rtsp://localhost:8554/mystream", gortsplib.StreamProtocolTCP)
if err != nil { if err != nil {
panic(err) panic(err)
} }

View File

@@ -14,7 +14,7 @@ import (
func main() { func main() {
// connect to the server and start reading all tracks // connect to the server and start reading all tracks
conn, tracks, err := gortsplib.DialRead("rtsp://localhost:8554/mystream", gortsplib.StreamProtocolUDP) conn, err := gortsplib.DialRead("rtsp://localhost:8554/mystream", gortsplib.StreamProtocolUDP)
if err != nil { if err != nil {
panic(err) panic(err)
} }
@@ -24,7 +24,7 @@ func main() {
defer wg.Wait() defer wg.Wait()
defer conn.CloseUDPListeners() defer conn.CloseUDPListeners()
for trackId := range tracks { for trackId := range conn.Tracks() {
// read RTP frames // read RTP frames
wg.Add(1) wg.Add(1)
go func(trackId int) { go func(trackId int) {