mirror of
https://github.com/aler9/gortsplib
synced 2025-11-03 01:04:00 +08:00
use a single TCP outgoing buffer each client / session (#665)
this saves memory.
This commit is contained in:
@@ -8,7 +8,6 @@ import (
|
||||
"github.com/pion/rtcp"
|
||||
"github.com/pion/rtp"
|
||||
|
||||
"github.com/bluenviron/gortsplib/v4/pkg/base"
|
||||
"github.com/bluenviron/gortsplib/v4/pkg/description"
|
||||
"github.com/bluenviron/gortsplib/v4/pkg/liberrors"
|
||||
)
|
||||
@@ -23,9 +22,6 @@ type serverSessionMedia struct {
|
||||
udpRTPWriteAddr *net.UDPAddr
|
||||
udpRTCPReadPort int
|
||||
udpRTCPWriteAddr *net.UDPAddr
|
||||
tcpRTPFrame *base.InterleavedFrame
|
||||
tcpRTCPFrame *base.InterleavedFrame
|
||||
tcpBuffer []byte
|
||||
formats map[uint8]*serverSessionFormat // record only
|
||||
writePacketRTPInQueue func([]byte) error
|
||||
writePacketRTCPInQueue func([]byte) error
|
||||
@@ -87,10 +83,6 @@ func (sm *serverSessionMedia) start() {
|
||||
sm.ss.tcpCallbackByChannel[sm.tcpChannel] = sm.readRTPTCPRecord
|
||||
sm.ss.tcpCallbackByChannel[sm.tcpChannel+1] = sm.readRTCPTCPRecord
|
||||
}
|
||||
|
||||
sm.tcpRTPFrame = &base.InterleavedFrame{Channel: sm.tcpChannel}
|
||||
sm.tcpRTCPFrame = &base.InterleavedFrame{Channel: sm.tcpChannel + 1}
|
||||
sm.tcpBuffer = make([]byte, sm.ss.s.MaxPacketSize+4)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -127,38 +119,18 @@ func (sm *serverSessionMedia) writePacketRTCPInQueueUDP(payload []byte) error {
|
||||
|
||||
func (sm *serverSessionMedia) writePacketRTPInQueueTCP(payload []byte) error {
|
||||
atomic.AddUint64(sm.ss.bytesSent, uint64(len(payload)))
|
||||
sm.tcpRTPFrame.Payload = payload
|
||||
sm.ss.tcpFrame.Channel = sm.tcpChannel
|
||||
sm.ss.tcpFrame.Payload = payload
|
||||
sm.ss.tcpConn.nconn.SetWriteDeadline(time.Now().Add(sm.ss.s.WriteTimeout))
|
||||
return sm.ss.tcpConn.conn.WriteInterleavedFrame(sm.tcpRTPFrame, sm.tcpBuffer)
|
||||
return sm.ss.tcpConn.conn.WriteInterleavedFrame(sm.ss.tcpFrame, sm.ss.tcpBuffer)
|
||||
}
|
||||
|
||||
func (sm *serverSessionMedia) writePacketRTCPInQueueTCP(payload []byte) error {
|
||||
atomic.AddUint64(sm.ss.bytesSent, uint64(len(payload)))
|
||||
sm.tcpRTCPFrame.Payload = payload
|
||||
sm.ss.tcpFrame.Channel = sm.tcpChannel + 1
|
||||
sm.ss.tcpFrame.Payload = payload
|
||||
sm.ss.tcpConn.nconn.SetWriteDeadline(time.Now().Add(sm.ss.s.WriteTimeout))
|
||||
return sm.ss.tcpConn.conn.WriteInterleavedFrame(sm.tcpRTCPFrame, sm.tcpBuffer)
|
||||
}
|
||||
|
||||
func (sm *serverSessionMedia) writePacketRTP(payload []byte) error {
|
||||
ok := sm.ss.writer.push(func() error {
|
||||
return sm.writePacketRTPInQueue(payload)
|
||||
})
|
||||
if !ok {
|
||||
return liberrors.ErrServerWriteQueueFull{}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (sm *serverSessionMedia) writePacketRTCP(payload []byte) error {
|
||||
ok := sm.ss.writer.push(func() error {
|
||||
return sm.writePacketRTCPInQueue(payload)
|
||||
})
|
||||
if !ok {
|
||||
return liberrors.ErrServerWriteQueueFull{}
|
||||
}
|
||||
|
||||
return nil
|
||||
return sm.ss.tcpConn.conn.WriteInterleavedFrame(sm.ss.tcpFrame, sm.ss.tcpBuffer)
|
||||
}
|
||||
|
||||
func (sm *serverSessionMedia) readRTCPUDPPlay(payload []byte) bool {
|
||||
|
||||
Reference in New Issue
Block a user