mirror of
https://github.com/aler9/gortsplib
synced 2025-10-05 23:26:54 +08:00
improve ptsEqualsDTS algothm with H264 tracks
This commit is contained in:
@@ -7,7 +7,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// find IDR NALUs without decoding RTP
|
// find IDR NALUs without decoding RTP
|
||||||
func rtpH264ContainsIDR(pkt *rtp.Packet) bool {
|
func rtpH264ContainsIDRorSPSorPPS(pkt *rtp.Packet) bool {
|
||||||
if len(pkt.Payload) == 0 {
|
if len(pkt.Payload) == 0 {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@@ -15,7 +15,7 @@ func rtpH264ContainsIDR(pkt *rtp.Packet) bool {
|
|||||||
typ := h264.NALUType(pkt.Payload[0] & 0x1F)
|
typ := h264.NALUType(pkt.Payload[0] & 0x1F)
|
||||||
|
|
||||||
switch typ {
|
switch typ {
|
||||||
case h264.NALUTypeIDR:
|
case h264.NALUTypeIDR, h264.NALUTypeSPS, h264.NALUTypePPS:
|
||||||
return true
|
return true
|
||||||
|
|
||||||
case 24: // STAP-A
|
case 24: // STAP-A
|
||||||
@@ -37,7 +37,8 @@ func rtpH264ContainsIDR(pkt *rtp.Packet) bool {
|
|||||||
payload = payload[size:]
|
payload = payload[size:]
|
||||||
|
|
||||||
typ = h264.NALUType(nalu[0] & 0x1F)
|
typ = h264.NALUType(nalu[0] & 0x1F)
|
||||||
if typ == h264.NALUTypeIDR {
|
switch typ {
|
||||||
|
case h264.NALUTypeIDR, h264.NALUTypeSPS, h264.NALUTypePPS:
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -55,7 +56,11 @@ func rtpH264ContainsIDR(pkt *rtp.Packet) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
typ := h264.NALUType(pkt.Payload[1] & 0x1F)
|
typ := h264.NALUType(pkt.Payload[1] & 0x1F)
|
||||||
return (typ == h264.NALUTypeIDR)
|
switch typ {
|
||||||
|
case h264.NALUTypeIDR, h264.NALUTypeSPS, h264.NALUTypePPS:
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return false
|
return false
|
||||||
@@ -64,7 +69,7 @@ func rtpH264ContainsIDR(pkt *rtp.Packet) bool {
|
|||||||
|
|
||||||
func ptsEqualsDTS(track Track, pkt *rtp.Packet) bool {
|
func ptsEqualsDTS(track Track, pkt *rtp.Packet) bool {
|
||||||
if _, ok := track.(*TrackH264); ok {
|
if _, ok := track.(*TrackH264); ok {
|
||||||
return rtpH264ContainsIDR(pkt)
|
return rtpH264ContainsIDRorSPSorPPS(pkt)
|
||||||
}
|
}
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
Reference in New Issue
Block a user