mirror of
https://github.com/aler9/gortsplib
synced 2025-10-05 15:16:51 +08:00
improve performance
This commit is contained in:
@@ -768,9 +768,8 @@ func (c *Client) runReader() {
|
||||
TrackID: trackID,
|
||||
Packet: pkt,
|
||||
}
|
||||
c.processPacketRTP(&ctx)
|
||||
|
||||
ct := c.tracks[trackID]
|
||||
c.processPacketRTP(ct, &ctx)
|
||||
|
||||
if ct.h264Decoder != nil {
|
||||
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
|
||||
ctx.Packet.Header.Padding = false
|
||||
ctx.Packet.PaddingSize = 0
|
||||
|
||||
// decode
|
||||
ct := c.tracks[ctx.TrackID]
|
||||
if ct.h264Decoder != nil {
|
||||
nalus, pts, err := ct.h264Decoder.DecodeUntilMarker(ctx.Packet)
|
||||
if err == nil {
|
||||
ctx.PTSEqualsDTS = h264.IDRPresent(nalus)
|
||||
ctx.H264NALUs = append([][]byte(nil), nalus...)
|
||||
ctx.H264NALUs = nalus
|
||||
ctx.H264PTS = pts
|
||||
} else {
|
||||
ctx.PTSEqualsDTS = false
|
||||
|
@@ -186,8 +186,9 @@ func (u *clientUDPListener) processPlayRTP(now time.Time, payload []byte) {
|
||||
TrackID: u.trackID,
|
||||
Packet: pkt,
|
||||
}
|
||||
u.c.processPacketRTP(&ctx)
|
||||
u.c.tracks[u.trackID].rtcpReceiver.ProcessPacketRTP(time.Now(), pkt, ctx.PTSEqualsDTS)
|
||||
ct := u.c.tracks[u.trackID]
|
||||
u.c.processPacketRTP(ct, &ctx)
|
||||
ct.rtcpReceiver.ProcessPacketRTP(time.Now(), pkt, ctx.PTSEqualsDTS)
|
||||
u.c.OnPacketRTP(&ctx)
|
||||
}
|
||||
|
||||
|
@@ -123,8 +123,6 @@ func (d *Decoder) Decode(pkt *rtp.Packet) ([][]byte, time.Duration, error) {
|
||||
}
|
||||
|
||||
start := pkt.Payload[1] >> 7
|
||||
end := (pkt.Payload[1] >> 6) & 0x01
|
||||
|
||||
if start == 1 {
|
||||
d.isDecodingFragmented = false
|
||||
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:]...)
|
||||
|
||||
end := (pkt.Payload[1] >> 6) & 0x01
|
||||
if end != 1 {
|
||||
return nil, 0, ErrMorePacketsNeeded
|
||||
}
|
||||
|
@@ -263,9 +263,8 @@ func (sc *ServerConn) readFuncTCP(readRequest chan readReq) error {
|
||||
TrackID: trackID,
|
||||
Packet: pkt,
|
||||
}
|
||||
sc.session.processPacketRTP(&ctx)
|
||||
|
||||
at := sc.session.announcedTracks[trackID]
|
||||
sc.session.processPacketRTP(at, &ctx)
|
||||
|
||||
if at.h264Decoder != nil {
|
||||
if at.h264Encoder == nil && len(payload) > udpReadBufferSize {
|
||||
|
@@ -1214,18 +1214,17 @@ func (ss *ServerSession) runWriter() {
|
||||
}
|
||||
}
|
||||
|
||||
func (ss *ServerSession) processPacketRTP(ctx *ServerHandlerOnPacketRTPCtx) {
|
||||
func (ss *ServerSession) processPacketRTP(at *ServerSessionAnnouncedTrack, ctx *ServerHandlerOnPacketRTPCtx) {
|
||||
// remove padding
|
||||
ctx.Packet.Header.Padding = false
|
||||
ctx.Packet.PaddingSize = 0
|
||||
|
||||
// decode
|
||||
at := ss.announcedTracks[ctx.TrackID]
|
||||
if at.h264Decoder != nil {
|
||||
nalus, pts, err := at.h264Decoder.DecodeUntilMarker(ctx.Packet)
|
||||
if err == nil {
|
||||
ctx.PTSEqualsDTS = h264.IDRPresent(nalus)
|
||||
ctx.H264NALUs = append([][]byte(nil), nalus...)
|
||||
ctx.H264NALUs = nalus
|
||||
ctx.H264PTS = pts
|
||||
} else {
|
||||
ctx.PTSEqualsDTS = false
|
||||
|
@@ -212,8 +212,10 @@ func (u *serverUDPListener) processRTP(clientData *clientData, payload []byte) {
|
||||
TrackID: clientData.trackID,
|
||||
Packet: pkt,
|
||||
}
|
||||
clientData.ss.processPacketRTP(&ctx)
|
||||
clientData.ss.announcedTracks[clientData.trackID].rtcpReceiver.ProcessPacketRTP(now, ctx.Packet, ctx.PTSEqualsDTS)
|
||||
at := clientData.ss.announcedTracks[clientData.trackID]
|
||||
clientData.ss.processPacketRTP(at, &ctx)
|
||||
|
||||
at.rtcpReceiver.ProcessPacketRTP(now, ctx.Packet, ctx.PTSEqualsDTS)
|
||||
if h, ok := clientData.ss.s.Handler.(ServerHandlerOnPacketRTP); ok {
|
||||
h.OnPacketRTP(&ctx)
|
||||
}
|
||||
|
Reference in New Issue
Block a user