package gortsplib import ( "github.com/pion/rtp" "github.com/aler9/gortsplib/pkg/h264" ) // find IDR NALUs without decoding RTP func rtpH264ContainsIDR(pkt *rtp.Packet) bool { if len(pkt.Payload) == 0 { return false } typ := h264.NALUType(pkt.Payload[0] & 0x1F) switch typ { case h264.NALUTypeIDR: return true case 24: // STAP-A payload := pkt.Payload[1:] for len(payload) > 0 { if len(payload) < 2 { return false } size := uint16(payload[0])<<8 | uint16(payload[1]) payload = payload[2:] if size == 0 || int(size) > len(payload) { return false } nalu := payload[:size] payload = payload[size:] typ = h264.NALUType(nalu[0] & 0x1F) if typ == h264.NALUTypeIDR { return true } } return false case 28: // FU-A if len(pkt.Payload) < 2 { return false } start := pkt.Payload[1] >> 7 if start != 1 { return false } typ := h264.NALUType(pkt.Payload[1] & 0x1F) return (typ == h264.NALUTypeIDR) default: return false } } func ptsEqualsDTS(track Track, pkt *rtp.Packet) bool { if _, ok := track.(*TrackH264); ok { return rtpH264ContainsIDR(pkt) } return true }