package codecs import ( "errors" ) var errTruncated = errors.New("truncated packet") // Flags holds parsed RTP header flags. type Flags struct { Seqno uint16 Pid uint16 Marker bool } // PacketFlags extracts basic RTP header flags from a raw packet buffer. func PacketFlags(codec string, buf []byte) (Flags, error) { if len(buf) < 4 { return Flags{}, errTruncated } var flags Flags flags.Seqno = (uint16(buf[2]) << 8) | uint16(buf[3]) flags.Marker = (buf[1] & 0x80) != 0 return flags, nil } // RewritePacket rewrites the sequence number and marker bit in a raw RTP packet. func RewritePacket(codec string, data []byte, setMarker bool, seqno uint16, delta uint16) error { if len(data) < 12 { return errTruncated } if setMarker { data[1] |= 0x80 } data[2] = uint8(seqno >> 8) data[3] = uint8(seqno) if delta == 0 { return nil } offset := 12 offset += int(data[0]&0x0F) * 4 if len(data) <= offset { return errTruncated } if (data[0] & 0x10) != 0 { length := uint16(data[offset+2])<<8 | uint16(data[offset+3]) offset += 4 + int(length)*4 if len(data) < offset+4 { return errTruncated } } return nil }