mirror of
https://github.com/aler9/gortsplib
synced 2025-10-04 23:02:45 +08:00
improve performance
This commit is contained in:
18
client.go
18
client.go
@@ -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)
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
)
|
||||
|
@@ -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)
|
||||
|
@@ -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()
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user