Skip to content

Commit 50e2d86

Browse files
committed
adjust buffer sizes to avoid memory leaks (#43)
1 parent 25f59ab commit 50e2d86

File tree

3 files changed

+17
-10
lines changed

3 files changed

+17
-10
lines changed

server-client.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ import (
1717
const (
1818
clientCheckStreamInterval = 5 * time.Second
1919
clientReceiverReportInterval = 10 * time.Second
20+
clientTcpReadBufferSize = 128 * 1024
21+
clientTcpWriteBufferSize = 128 * 1024
22+
clientUdpReadBufferSize = 2048
23+
clientUdpWriteBufferSize = 128 * 1024
2024
)
2125

2226
type serverClientTrack struct {
@@ -98,7 +102,7 @@ func newServerClient(p *program, nconn net.Conn) *serverClient {
98102
WriteTimeout: p.conf.WriteTimeout,
99103
}),
100104
state: clientStateStarting,
101-
readBuf: newDoubleBuffer(512 * 1024),
105+
readBuf: newDoubleBuffer(clientTcpReadBufferSize),
102106
done: make(chan struct{}),
103107
}
104108

@@ -788,7 +792,7 @@ func (c *serverClient) runPlay(path string) {
788792
pconf := c.findConfForPath(path)
789793

790794
if c.streamProtocol == gortsplib.StreamProtocolTcp {
791-
c.writeBuf = newDoubleBuffer(2048)
795+
c.writeBuf = newDoubleBuffer(clientTcpWriteBufferSize)
792796
c.events = make(chan serverClientEvent)
793797
}
794798

@@ -818,6 +822,7 @@ func (c *serverClient) runPlay(path string) {
818822
readDone := make(chan error)
819823
go func() {
820824
buf := make([]byte, 2048)
825+
821826
for {
822827
_, err := c.conn.NetConn().Read(buf)
823828
if err != nil {
@@ -920,6 +925,7 @@ func (c *serverClient) runRecord(path string) {
920925
for {
921926
frame.Content = c.readBuf.swap()
922927
frame.Content = frame.Content[:cap(frame.Content)]
928+
923929
recv, err := c.conn.ReadFrameOrRequest(frame)
924930
if err != nil {
925931
readDone <- err

server-udpl.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ func newServerUdpListener(p *program, port int, streamType gortsplib.StreamType)
3535
p: p,
3636
nconn: nconn,
3737
streamType: streamType,
38-
readBuf: newDoubleBuffer(2048),
39-
writeBuf: newDoubleBuffer(2048),
38+
readBuf: newDoubleBuffer(clientUdpReadBufferSize),
39+
writeBuf: newDoubleBuffer(clientUdpWriteBufferSize),
4040
writeChan: make(chan *udpAddrBufPair),
4141
done: make(chan struct{}),
4242
}

source.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ import (
1414
)
1515

1616
const (
17-
sourceRetryInterval = 5 * time.Second
17+
sourceRetryInterval = 5 * time.Second
18+
sourceUdpReadBufferSize = 2048
19+
sourceTcpReadBufferSize = 128 * 1024
1820
)
1921

2022
type source struct {
@@ -26,7 +28,6 @@ type source struct {
2628
tracks []*gortsplib.Track
2729
serverSdpText []byte
2830
serverSdpParsed *sdp.SessionDescription
29-
readBuf *doubleBuffer
3031

3132
terminate chan struct{}
3233
done chan struct{}
@@ -71,7 +72,6 @@ func newSource(p *program, path string, sourceStr string, sourceProtocol string)
7172
path: path,
7273
u: u,
7374
proto: proto,
74-
readBuf: newDoubleBuffer(512 * 1024),
7575
terminate: make(chan struct{}),
7676
done: make(chan struct{}),
7777
}
@@ -226,7 +226,7 @@ func (s *source) runUdp(conn *gortsplib.ConnClient) bool {
226226
go func(trackId int, l *gortsplib.ConnClientUdpListener) {
227227
defer wg.Done()
228228

229-
doubleBuf := newDoubleBuffer(2048)
229+
doubleBuf := newDoubleBuffer(sourceUdpReadBufferSize)
230230
for {
231231
buf := doubleBuf.swap()
232232

@@ -243,7 +243,7 @@ func (s *source) runUdp(conn *gortsplib.ConnClient) bool {
243243
go func(trackId int, l *gortsplib.ConnClientUdpListener) {
244244
defer wg.Done()
245245

246-
doubleBuf := newDoubleBuffer(2048)
246+
doubleBuf := newDoubleBuffer(sourceUdpReadBufferSize)
247247
for {
248248
buf := doubleBuf.swap()
249249

@@ -309,11 +309,12 @@ func (s *source) runTcp(conn *gortsplib.ConnClient) bool {
309309
s.p.events <- programEventStreamerReady{s}
310310

311311
frame := &gortsplib.InterleavedFrame{}
312+
doubleBuf := newDoubleBuffer(sourceTcpReadBufferSize)
312313

313314
tcpConnDone := make(chan error)
314315
go func() {
315316
for {
316-
frame.Content = s.readBuf.swap()
317+
frame.Content = doubleBuf.swap()
317318
frame.Content = frame.Content[:cap(frame.Content)]
318319

319320
err := conn.ReadFrame(frame)

0 commit comments

Comments
 (0)