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,
|
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
|
||||||
|
@@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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
|
||||||
}
|
}
|
||||||
|
@@ -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 {
|
||||||
|
@@ -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
|
||||||
|
@@ -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)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user