mirror of
https://github.com/aler9/gortsplib
synced 2025-10-05 07:06:58 +08:00
use a single TCP outgoing buffer each client / session (#665)
this saves memory.
This commit is contained in:
@@ -254,6 +254,8 @@ type ServerSession struct {
|
||||
udpCheckStreamTimer *time.Timer
|
||||
writer *asyncProcessor
|
||||
timeDecoder *rtptime.GlobalDecoder2
|
||||
tcpFrame *base.InterleavedFrame
|
||||
tcpBuffer []byte
|
||||
|
||||
// in
|
||||
chHandleRequest chan sessionRequestReq
|
||||
@@ -978,6 +980,11 @@ func (ss *ServerSession) handleRequestInner(sc *ServerConn, req *base.Request) (
|
||||
sm.start()
|
||||
}
|
||||
|
||||
if *ss.setuppedTransport == TransportTCP {
|
||||
ss.tcpFrame = &base.InterleavedFrame{}
|
||||
ss.tcpBuffer = make([]byte, ss.s.MaxPacketSize+4)
|
||||
}
|
||||
|
||||
switch *ss.setuppedTransport {
|
||||
case TransportUDP:
|
||||
ss.udpCheckStreamTimer = time.NewTimer(ss.s.checkStreamPeriod)
|
||||
@@ -1067,6 +1074,11 @@ func (ss *ServerSession) handleRequestInner(sc *ServerConn, req *base.Request) (
|
||||
sm.start()
|
||||
}
|
||||
|
||||
if *ss.setuppedTransport == TransportTCP {
|
||||
ss.tcpFrame = &base.InterleavedFrame{}
|
||||
ss.tcpBuffer = make([]byte, ss.s.MaxPacketSize+4)
|
||||
}
|
||||
|
||||
switch *ss.setuppedTransport {
|
||||
case TransportUDP:
|
||||
ss.udpCheckStreamTimer = time.NewTimer(ss.s.checkStreamPeriod)
|
||||
@@ -1254,7 +1266,15 @@ func (ss *ServerSession) OnPacketRTCP(medi *description.Media, cb OnPacketRTCPFu
|
||||
|
||||
func (ss *ServerSession) writePacketRTP(medi *description.Media, byts []byte) error {
|
||||
sm := ss.setuppedMedias[medi]
|
||||
return sm.writePacketRTP(byts)
|
||||
|
||||
ok := sm.ss.writer.push(func() error {
|
||||
return sm.writePacketRTPInQueue(byts)
|
||||
})
|
||||
if !ok {
|
||||
return liberrors.ErrServerWriteQueueFull{}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// WritePacketRTP writes a RTP packet to the session.
|
||||
@@ -1271,7 +1291,15 @@ func (ss *ServerSession) WritePacketRTP(medi *description.Media, pkt *rtp.Packet
|
||||
|
||||
func (ss *ServerSession) writePacketRTCP(medi *description.Media, byts []byte) error {
|
||||
sm := ss.setuppedMedias[medi]
|
||||
return sm.writePacketRTCP(byts)
|
||||
|
||||
ok := ss.writer.push(func() error {
|
||||
return sm.writePacketRTCPInQueue(byts)
|
||||
})
|
||||
if !ok {
|
||||
return liberrors.ErrServerWriteQueueFull{}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// WritePacketRTCP writes a RTCP packet to the session.
|
||||
|
Reference in New Issue
Block a user