diff --git a/connclient.go b/connclient.go index f3f49d3d..5669efee 100644 --- a/connclient.go +++ b/connclient.go @@ -33,7 +33,6 @@ const ( clientUDPCheckStreamPeriod = 5 * time.Second clientUDPKeepalivePeriod = 30 * time.Second clientTCPFrameReadBufferSize = 128 * 1024 - clientUDPFrameReadBufferSize = 2048 ) type connClientState int diff --git a/connclientudpl.go b/connclientudpl.go index 1098e048..c78ee677 100644 --- a/connclientudpl.go +++ b/connclientudpl.go @@ -9,6 +9,13 @@ import ( "github.com/aler9/gortsplib/pkg/multibuffer" ) +const ( + // use the same buffer size as gstreamer's rtspsrc + connClientUDPKernelReadBufferSize = 0x80000 + + connClientUDPReadBufferSize = 2048 +) + type connClientUDPListener struct { c *ConnClient pc net.PacketConn @@ -29,10 +36,15 @@ func newConnClientUDPListener(c *ConnClient, port int) (*connClientUDPListener, return nil, err } + err = pc.(*net.UDPConn).SetReadBuffer(connClientUDPKernelReadBufferSize) + if err != nil { + return nil, err + } + return &connClientUDPListener{ c: c, pc: pc, - udpFrameBuffer: multibuffer.New(c.d.ReadBufferCount, 2048), + udpFrameBuffer: multibuffer.New(c.d.ReadBufferCount, connClientUDPReadBufferSize), }, nil }