mirror of
https://github.com/aler9/gortsplib
synced 2025-10-08 00:20:05 +08:00
48 lines
916 B
Go
48 lines
916 B
Go
package gortsplib
|
|
|
|
import (
|
|
"net"
|
|
"strconv"
|
|
)
|
|
|
|
type connClientUDPListener struct {
|
|
pc net.PacketConn
|
|
publisherIp net.IP
|
|
publisherPort int
|
|
udpFrameReadBuf *MultiBuffer
|
|
}
|
|
|
|
func newConnClientUDPListener(c *ConnClient, port int) (*connClientUDPListener, error) {
|
|
pc, err := c.conf.ListenPacket("udp", ":"+strconv.FormatInt(int64(port), 10))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &connClientUDPListener{
|
|
pc: pc,
|
|
udpFrameReadBuf: NewMultiBuffer(c.conf.ReadBufferCount, 2048),
|
|
}, nil
|
|
}
|
|
|
|
func (l *connClientUDPListener) close() {
|
|
l.pc.Close()
|
|
}
|
|
|
|
func (l *connClientUDPListener) read() ([]byte, error) {
|
|
for {
|
|
buf := l.udpFrameReadBuf.Next()
|
|
n, addr, err := l.pc.ReadFrom(buf)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
uaddr := addr.(*net.UDPAddr)
|
|
|
|
if !l.publisherIp.Equal(uaddr.IP) || l.publisherPort != uaddr.Port {
|
|
continue
|
|
}
|
|
|
|
return buf[:n], nil
|
|
}
|
|
}
|