improve performance

This commit is contained in:
aler9
2022-04-10 15:10:30 +02:00
parent 3123346397
commit ff34f5ac1d
6 changed files with 23 additions and 19 deletions

View File

@@ -772,7 +772,7 @@ func (c *Client) runReader() {
c.processPacketRTP(ct, &ctx)
if ct.h264Decoder != nil {
if ct.h264Encoder == nil && len(payload) > udpReadBufferSize {
if ct.h264Encoder == nil && len(payload) > maxPacketSize {
v1 := pkt.SSRC
v2 := pkt.SequenceNumber
v3 := pkt.Timestamp
@@ -809,17 +809,17 @@ func (c *Client) runReader() {
c.OnPacketRTP(&ctx)
}
} else {
if len(payload) > udpReadBufferSize {
if len(payload) > maxPacketSize {
return fmt.Errorf("payload size (%d) greater than maximum allowed (%d)",
len(payload), udpReadBufferSize)
len(payload), maxPacketSize)
}
c.OnPacketRTP(&ctx)
}
} else {
if len(payload) > udpReadBufferSize {
if len(payload) > maxPacketSize {
return fmt.Errorf("payload size (%d) greater than maximum allowed (%d)",
len(payload), udpReadBufferSize)
len(payload), maxPacketSize)
}
packets, err := rtcp.Unmarshal(payload)
@@ -840,9 +840,9 @@ func (c *Client) runReader() {
} else {
processFunc = func(trackID int, isRTP bool, payload []byte) error {
if !isRTP {
if len(payload) > udpReadBufferSize {
if len(payload) > maxPacketSize {
return fmt.Errorf("payload size (%d) greater than maximum allowed (%d)",
len(payload), udpReadBufferSize)
len(payload), maxPacketSize)
}
packets, err := rtcp.Unmarshal(payload)
@@ -1935,10 +1935,12 @@ func (c *Client) WritePacketRTP(trackID int, pkt *rtp.Packet, ptsEqualsDTS bool)
}
}
byts, err := pkt.Marshal()
byts := make([]byte, maxPacketSize)
n, err := pkt.MarshalTo(byts)
if err != nil {
return err
}
byts = byts[:n]
if c.tracks[trackID].rtcpSender != nil {
c.tracks[trackID].rtcpSender.ProcessPacketRTP(time.Now(), pkt, ptsEqualsDTS)

View File

@@ -152,7 +152,7 @@ func (u *clientUDPListener) runReader() {
defer close(u.readerDone)
for {
buf := make([]byte, udpReadBufferSize)
buf := make([]byte, maxPacketSize)
n, addr, err := u.pc.ReadFrom(buf)
if err != nil {
return

View File

@@ -4,6 +4,6 @@ const (
tcpReadBufferSize = 4096
tcpMaxFramePayloadSize = 60 * 1024 * 1024
udpKernelReadBufferSize = 0x80000 // same size as GStreamer's rtspsrc
udpReadBufferSize = 1472 // 1500 (UDP MTU) - 20 (IP header) - 8 (UDP header)
maxPacketSize = 1472 // 1500 (UDP MTU) - 20 (IP header) - 8 (UDP header)
multicastTTL = 16
)

View File

@@ -224,9 +224,9 @@ func (sc *ServerConn) readFuncTCP(readRequest chan readReq) error {
if sc.session.state == ServerSessionStatePlay {
processFunc = func(trackID int, isRTP bool, payload []byte) error {
if !isRTP {
if len(payload) > udpReadBufferSize {
if len(payload) > maxPacketSize {
return fmt.Errorf("payload size (%d) greater than maximum allowed (%d)",
len(payload), udpReadBufferSize)
len(payload), maxPacketSize)
}
packets, err := rtcp.Unmarshal(payload)
@@ -267,7 +267,7 @@ func (sc *ServerConn) readFuncTCP(readRequest chan readReq) error {
sc.session.processPacketRTP(at, &ctx)
if at.h264Decoder != nil {
if at.h264Encoder == nil && len(payload) > udpReadBufferSize {
if at.h264Encoder == nil && len(payload) > maxPacketSize {
v1 := pkt.SSRC
v2 := pkt.SequenceNumber
v3 := pkt.Timestamp
@@ -311,9 +311,9 @@ func (sc *ServerConn) readFuncTCP(readRequest chan readReq) error {
}
}
} else {
if len(payload) > udpReadBufferSize {
if len(payload) > maxPacketSize {
return fmt.Errorf("payload size (%d) greater than maximum allowed (%d)",
len(payload), udpReadBufferSize)
len(payload), maxPacketSize)
}
if h, ok := sc.s.Handler.(ServerHandlerOnPacketRTP); ok {
@@ -321,9 +321,9 @@ func (sc *ServerConn) readFuncTCP(readRequest chan readReq) error {
}
}
} else {
if len(payload) > udpReadBufferSize {
if len(payload) > maxPacketSize {
return fmt.Errorf("payload size (%d) greater than maximum allowed (%d)",
len(payload), udpReadBufferSize)
len(payload), maxPacketSize)
}
packets, err := rtcp.Unmarshal(payload)

View File

@@ -218,10 +218,12 @@ func (st *ServerStream) readerSetInactive(ss *ServerSession) {
// WritePacketRTP writes a RTP packet to all the readers of the stream.
func (st *ServerStream) WritePacketRTP(trackID int, pkt *rtp.Packet, ptsEqualsDTS bool) {
byts, err := pkt.Marshal()
byts := make([]byte, maxPacketSize)
n, err := pkt.MarshalTo(byts)
if err != nil {
return
}
byts = byts[:n]
track := st.stTracks[trackID]
now := time.Now()

View File

@@ -171,7 +171,7 @@ func (u *serverUDPListener) runReader() {
defer close(u.readerDone)
for {
buf := make([]byte, udpReadBufferSize)
buf := make([]byte, maxPacketSize)
n, addr, err := u.pc.ReadFromUDP(buf)
if err != nil {
break