improve performance

This commit is contained in:
aler9
2022-04-10 11:29:15 +02:00
parent bfe4e8cdaa
commit 7bf907e94c
6 changed files with 14 additions and 16 deletions

View File

@@ -768,9 +768,8 @@ func (c *Client) runReader() {
TrackID: trackID, TrackID: trackID,
Packet: pkt, Packet: pkt,
} }
c.processPacketRTP(&ctx)
ct := c.tracks[trackID] ct := c.tracks[trackID]
c.processPacketRTP(ct, &ctx)
if ct.h264Decoder != nil { if ct.h264Decoder != nil {
if ct.h264Encoder == nil && len(payload) > udpReadBufferSize { if ct.h264Encoder == nil && len(payload) > udpReadBufferSize {
@@ -1902,18 +1901,17 @@ func (c *Client) runWriter() {
} }
} }
func (c *Client) processPacketRTP(ctx *ClientOnPacketRTPCtx) { func (c *Client) processPacketRTP(ct *clientTrack, ctx *ClientOnPacketRTPCtx) {
// remove padding // remove padding
ctx.Packet.Header.Padding = false ctx.Packet.Header.Padding = false
ctx.Packet.PaddingSize = 0 ctx.Packet.PaddingSize = 0
// decode // decode
ct := c.tracks[ctx.TrackID]
if ct.h264Decoder != nil { if ct.h264Decoder != nil {
nalus, pts, err := ct.h264Decoder.DecodeUntilMarker(ctx.Packet) nalus, pts, err := ct.h264Decoder.DecodeUntilMarker(ctx.Packet)
if err == nil { if err == nil {
ctx.PTSEqualsDTS = h264.IDRPresent(nalus) ctx.PTSEqualsDTS = h264.IDRPresent(nalus)
ctx.H264NALUs = append([][]byte(nil), nalus...) ctx.H264NALUs = nalus
ctx.H264PTS = pts ctx.H264PTS = pts
} else { } else {
ctx.PTSEqualsDTS = false ctx.PTSEqualsDTS = false

View File

@@ -186,8 +186,9 @@ func (u *clientUDPListener) processPlayRTP(now time.Time, payload []byte) {
TrackID: u.trackID, TrackID: u.trackID,
Packet: pkt, Packet: pkt,
} }
u.c.processPacketRTP(&ctx) ct := u.c.tracks[u.trackID]
u.c.tracks[u.trackID].rtcpReceiver.ProcessPacketRTP(time.Now(), pkt, ctx.PTSEqualsDTS) u.c.processPacketRTP(ct, &ctx)
ct.rtcpReceiver.ProcessPacketRTP(time.Now(), pkt, ctx.PTSEqualsDTS)
u.c.OnPacketRTP(&ctx) u.c.OnPacketRTP(&ctx)
} }

View File

@@ -123,8 +123,6 @@ func (d *Decoder) Decode(pkt *rtp.Packet) ([][]byte, time.Duration, error) {
} }
start := pkt.Payload[1] >> 7 start := pkt.Payload[1] >> 7
end := (pkt.Payload[1] >> 6) & 0x01
if start == 1 { if start == 1 {
d.isDecodingFragmented = false d.isDecodingFragmented = false
return nil, 0, fmt.Errorf("invalid FU-A packet (decoded two starting packets in a row)") return nil, 0, fmt.Errorf("invalid FU-A packet (decoded two starting packets in a row)")
@@ -132,6 +130,7 @@ func (d *Decoder) Decode(pkt *rtp.Packet) ([][]byte, time.Duration, error) {
d.fragmentedBuffer = append(d.fragmentedBuffer, pkt.Payload[2:]...) d.fragmentedBuffer = append(d.fragmentedBuffer, pkt.Payload[2:]...)
end := (pkt.Payload[1] >> 6) & 0x01
if end != 1 { if end != 1 {
return nil, 0, ErrMorePacketsNeeded return nil, 0, ErrMorePacketsNeeded
} }

View File

@@ -263,9 +263,8 @@ func (sc *ServerConn) readFuncTCP(readRequest chan readReq) error {
TrackID: trackID, TrackID: trackID,
Packet: pkt, Packet: pkt,
} }
sc.session.processPacketRTP(&ctx)
at := sc.session.announcedTracks[trackID] at := sc.session.announcedTracks[trackID]
sc.session.processPacketRTP(at, &ctx)
if at.h264Decoder != nil { if at.h264Decoder != nil {
if at.h264Encoder == nil && len(payload) > udpReadBufferSize { if at.h264Encoder == nil && len(payload) > udpReadBufferSize {

View File

@@ -1214,18 +1214,17 @@ func (ss *ServerSession) runWriter() {
} }
} }
func (ss *ServerSession) processPacketRTP(ctx *ServerHandlerOnPacketRTPCtx) { func (ss *ServerSession) processPacketRTP(at *ServerSessionAnnouncedTrack, ctx *ServerHandlerOnPacketRTPCtx) {
// remove padding // remove padding
ctx.Packet.Header.Padding = false ctx.Packet.Header.Padding = false
ctx.Packet.PaddingSize = 0 ctx.Packet.PaddingSize = 0
// decode // decode
at := ss.announcedTracks[ctx.TrackID]
if at.h264Decoder != nil { if at.h264Decoder != nil {
nalus, pts, err := at.h264Decoder.DecodeUntilMarker(ctx.Packet) nalus, pts, err := at.h264Decoder.DecodeUntilMarker(ctx.Packet)
if err == nil { if err == nil {
ctx.PTSEqualsDTS = h264.IDRPresent(nalus) ctx.PTSEqualsDTS = h264.IDRPresent(nalus)
ctx.H264NALUs = append([][]byte(nil), nalus...) ctx.H264NALUs = nalus
ctx.H264PTS = pts ctx.H264PTS = pts
} else { } else {
ctx.PTSEqualsDTS = false ctx.PTSEqualsDTS = false

View File

@@ -212,8 +212,10 @@ func (u *serverUDPListener) processRTP(clientData *clientData, payload []byte) {
TrackID: clientData.trackID, TrackID: clientData.trackID,
Packet: pkt, Packet: pkt,
} }
clientData.ss.processPacketRTP(&ctx) at := clientData.ss.announcedTracks[clientData.trackID]
clientData.ss.announcedTracks[clientData.trackID].rtcpReceiver.ProcessPacketRTP(now, ctx.Packet, ctx.PTSEqualsDTS) clientData.ss.processPacketRTP(at, &ctx)
at.rtcpReceiver.ProcessPacketRTP(now, ctx.Packet, ctx.PTSEqualsDTS)
if h, ok := clientData.ss.s.Handler.(ServerHandlerOnPacketRTP); ok { if h, ok := clientData.ss.s.Handler.(ServerHandlerOnPacketRTP); ok {
h.OnPacketRTP(&ctx) h.OnPacketRTP(&ctx)
} }