mirror of
https://github.com/aler9/gortsplib
synced 2025-10-06 15:46:51 +08:00
simplify connClientUDPListener
This commit is contained in:
@@ -164,9 +164,26 @@ func (c *ConnClient) ReadFrame() (*InterleavedFrame, error) {
|
|||||||
// ReadFrameUDP reads an UDP frame.
|
// ReadFrameUDP reads an UDP frame.
|
||||||
func (c *ConnClient) ReadFrameUDP(track *Track, streamType StreamType) ([]byte, error) {
|
func (c *ConnClient) ReadFrameUDP(track *Track, streamType StreamType) ([]byte, error) {
|
||||||
if streamType == StreamTypeRtp {
|
if streamType == StreamTypeRtp {
|
||||||
return c.udpRtpListeners[track.Id].read()
|
buf, err := c.udpRtpListeners[track.Id].read()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
atomic.StoreInt64(c.udpLastFrameTimes[track.Id], time.Now().Unix())
|
||||||
|
c.rtcpReceivers[track.Id].OnFrame(streamType, buf)
|
||||||
|
|
||||||
|
return buf, nil
|
||||||
}
|
}
|
||||||
return c.udpRtcpListeners[track.Id].read()
|
|
||||||
|
buf, err := c.udpRtcpListeners[track.Id].read()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
atomic.StoreInt64(c.udpLastFrameTimes[track.Id], time.Now().Unix())
|
||||||
|
c.rtcpReceivers[track.Id].OnFrame(streamType, buf)
|
||||||
|
|
||||||
|
return buf, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ConnClient) readFrameOrResponse() (interface{}, error) {
|
func (c *ConnClient) readFrameOrResponse() (interface{}, error) {
|
||||||
@@ -440,12 +457,12 @@ func (c *ConnClient) SetupUDP(u *url.URL, track *Track, rtpPort int,
|
|||||||
|
|
||||||
rtpListener, rtcpListener, err := func() (*connClientUDPListener, *connClientUDPListener, error) {
|
rtpListener, rtcpListener, err := func() (*connClientUDPListener, *connClientUDPListener, error) {
|
||||||
if rtpPort != 0 {
|
if rtpPort != 0 {
|
||||||
rtpListener, err := newConnClientUDPListener(c, rtpPort, track.Id, StreamTypeRtp)
|
rtpListener, err := newConnClientUDPListener(c, rtpPort)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
rtcpListener, err := newConnClientUDPListener(c, rtcpPort, track.Id, StreamTypeRtcp)
|
rtcpListener, err := newConnClientUDPListener(c, rtcpPort)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
rtpListener.close()
|
rtpListener.close()
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
@@ -460,12 +477,12 @@ func (c *ConnClient) SetupUDP(u *url.URL, track *Track, rtpPort int,
|
|||||||
rtpPort = (rand.Intn((65535-10000)/2) * 2) + 10000
|
rtpPort = (rand.Intn((65535-10000)/2) * 2) + 10000
|
||||||
rtcpPort = rtpPort + 1
|
rtcpPort = rtpPort + 1
|
||||||
|
|
||||||
rtpListener, err := newConnClientUDPListener(c, rtpPort, track.Id, StreamTypeRtp)
|
rtpListener, err := newConnClientUDPListener(c, rtpPort)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
rtcpListener, err := newConnClientUDPListener(c, rtcpPort, track.Id, StreamTypeRtcp)
|
rtcpListener, err := newConnClientUDPListener(c, rtcpPort)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
rtpListener.close()
|
rtpListener.close()
|
||||||
continue
|
continue
|
||||||
|
@@ -3,31 +3,23 @@ package gortsplib
|
|||||||
import (
|
import (
|
||||||
"net"
|
"net"
|
||||||
"strconv"
|
"strconv"
|
||||||
"sync/atomic"
|
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type connClientUDPListener struct {
|
type connClientUDPListener struct {
|
||||||
c *ConnClient
|
|
||||||
pc net.PacketConn
|
pc net.PacketConn
|
||||||
trackId int
|
|
||||||
streamType StreamType
|
|
||||||
publisherIp net.IP
|
publisherIp net.IP
|
||||||
publisherPort int
|
publisherPort int
|
||||||
udpFrameReadBuf *MultiBuffer
|
udpFrameReadBuf *MultiBuffer
|
||||||
}
|
}
|
||||||
|
|
||||||
func newConnClientUDPListener(c *ConnClient, port int, trackId int, streamType StreamType) (*connClientUDPListener, error) {
|
func newConnClientUDPListener(c *ConnClient, port int) (*connClientUDPListener, error) {
|
||||||
pc, err := c.conf.ListenPacket("udp", ":"+strconv.FormatInt(int64(port), 10))
|
pc, err := c.conf.ListenPacket("udp", ":"+strconv.FormatInt(int64(port), 10))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return &connClientUDPListener{
|
return &connClientUDPListener{
|
||||||
c: c,
|
|
||||||
pc: pc,
|
pc: pc,
|
||||||
trackId: trackId,
|
|
||||||
streamType: streamType,
|
|
||||||
udpFrameReadBuf: NewMultiBuffer(c.conf.ReadBufferCount, 2048),
|
udpFrameReadBuf: NewMultiBuffer(c.conf.ReadBufferCount, 2048),
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
@@ -50,10 +42,6 @@ func (l *connClientUDPListener) read() ([]byte, error) {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
atomic.StoreInt64(l.c.udpLastFrameTimes[l.trackId], time.Now().Unix())
|
|
||||||
|
|
||||||
l.c.rtcpReceivers[l.trackId].OnFrame(l.streamType, buf[:n])
|
|
||||||
|
|
||||||
return buf[:n], nil
|
return buf[:n], nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user