rfc-8285

A General Mechanism for RTP Header Extensions

D. Singer, H. Desineni, R. Even (Editor)
date2017-10 streamIETF areawit wgavtcore statusPROPOSED STANDARD pages25 canonicalhttps://www.rfc-editor.org/rfc/rfc8285 doi10.17487/RFC8285
This document provides a general mechanism to use the header extension feature of RTP (the Real-time Transport Protocol). It provides the option to use a small number of small extensions in each RTP packet, where the universe of possible extensions is large and registration is decentralized. The actual extensions in use in a session are signaled in the setup information for that session. This document obsoletes RFC 5285.

obsoletes

Extracted elements (26)

design-rationale §7

The extended range 4096-4351 for negotiation identifiers is deliberately restricted to allow future expansion of the valid identifier range. Multiple extensions with the same identifier in this range may be offered as mutually exclusive alternatives.

rtp, realtime

design-rationale §1

The mechanism allows multiple identified extensions in a single RTP packet using URIs as names, removing RFC 3550's limitation of one extension per packet and providing a decentralized registration approach to avoid collisions.

rtp, realtime

design-rationale §5

URIs are used to name extensions because they provide a large, unallocated namespace and give documentation on the extension. URIs do not need to be dereferenceable, permitting confidential or experimental use and continued use after an organization ceases to exist.

rtp, realtime

interoperability-note §4.1.2

Use of RTP header extensions reduces the efficiency of RTP header compression (e.g., RFC 2508, RFC 3095) because the header extension is sent uncompressed unless the compression module is updated. Intermittent extension presence can also require updates to the fixed header, further reducing compression efficiency.

rtp, realtime

normative-requirement §4.1.2 MUST

A stream MUST contain only one-byte headers or only two-byte headers unless it is known that all recipients support mixing, negotiated via SDP Offer/Answer or out-of-band knowledge.

rtp, realtime

normative-requirement §5 MUST

A usable mapping MUST use IDs in the valid range, and each ID MUST be used only once per media section. An extension URI with the same attributes MUST NOT appear more than once applying to the same stream.

rtp, realtime

normative-requirement §5 SHOULD

For extensions defined in RFCs, the URI used SHOULD be a URN starting with 'urn:ietf:params:rtp-hdrext:' followed by a registered, descriptive name.

rtp, realtime, registry

normative-requirement §7 MUST

If an extension is marked 'sendonly' and the answerer desires to receive it, the extension MUST be marked 'recvonly' in the SDP answer. An answerer with no desire to receive the extension SHOULD remove it from the answer.

rtp, realtime

normative-requirement §4.2 MUST NOT

In the one-byte header form, the local identifier value 15 is reserved and MUST NOT be used. If ID 15 is encountered, its length field MUST be ignored, and processing of the entire extension MUST terminate at that point.

rtp, realtime

normative-requirement §7 MUST

Local identifiers MUST be unique in an RTP session, and the same identifier MUST be used for the same offered extension in the answer. Identifier values in the valid range MUST NOT be altered (remapped) during session updates.

rtp, realtime

normative-requirement §4.1.2 MUST

Local identifiers present in the stream MUST have been negotiated or defined out of band. Each distinct extension MUST have a unique ID. The ID value 0 is reserved for padding and MUST NOT be used as a local identifier.

rtp, realtime

normative-requirement §4.1 MUST NOT

RTP header extensions MUST NOT be used to extend RTP itself in a backward-incompatible manner; they MAY carry metadata in addition to normal RTP header information, provided the RTP layer can function if that metadata is missing.

rtp, realtime

normative-requirement §5 MUST

The mapping of local identifiers to extensions MUST be performed out of band (e.g., via SDP). Each extension URI MUST be absolute, and URIs containing a domain name SHOULD also contain a month-date in the form mmyyyy.

rtp, realtime

normative-requirement §4.1.2 MUST

The one-byte header form MUST be supported by all receivers. Transmitters SHOULD NOT use the two-byte header form when all extensions are small enough for the one-byte header form.

rtp, realtime

normative-requirement §4.1.1 SHOULD

The RTP header extension SHOULD only be present in a packet if that packet also contains one or more extension elements; an extension element SHOULD only be present when needed.

rtp, realtime

normative-requirement §6 MUST

When SDP Offer/Answer is used, negotiation for mixed one-byte and two-byte extensions MUST use SDP Offer/Answer. Without such negotiation (e.g., declarative SDP), mixed headers MUST NOT occur unless all recipients are known to support this mode.

rtp, realtime

protocol-element §6

The 'a=extmap-allow-mixed' SDP attribute (no value) signals that a participant supports receiving mixed one-byte and two-byte header extensions in the same RTP stream. A participant proposing this mode SHALL itself support reception of mixed extensions.

rtp, realtime

protocol-element §4.3

The appbits field in the two-byte header is a 4-bit application-dependent field treated as a special extension assigned to local identifier 256. If no extension is specified for ID 256, the sender SHOULD set appbits to 0 and the receiver MUST ignore it.

rtp, realtime

protocol-element §5

The SDP 'extmap' attribute maps local extension IDs to URIs: 'a=extmap:<value>["/<direction>"] <URI> <extensionattributes>'. Direction is one of sendonly, recvonly, sendrecv, or inactive.

rtp, realtime

registry §10.1

IANA manages the 'RTP Compact Header Extensions' registry mapping extension naming URIs to specifications, requiring Expert Review for insertion. The registry includes the extension URI, a formal reference to the specification, a descriptive phrase, and contact information.

rtp, registry, realtime

registry §10.3

IANA registered the new SDP 'extmap-allow-mixed' attribute in the SDP Parameters registry (session and media level, no value, MUX Category IDENTICAL), enabling negotiation of mixed one-byte and two-byte header extensions in the same RTP stream.

rtp, registry, realtime

registry §10.2

IANA registered the SDP 'extmap' attribute in the 'att-field (both session and media level)' subregistry of the SDP Parameters registry, with MUX Category SPECIAL.

rtp, registry, realtime

security-consideration §9 MUST

Extension usage is negotiated using SDP Offer/Answer, so integrity protection and end-to-end authentication MUST be implemented per RFC 3264 to prevent extension-usage blocking. Integrity protection SHOULD be used to prevent DoS attacks such as modification of header extensions.

rtp, security, realtime

security-consideration §9 MAY

RTP header extensions can carry sensitive information for which confidentiality may be required. RFC 6904 provides a mechanism to selectively encrypt RTP header extensions in SRTP; lower-layer security via DTLS MAY also be used.

rtp, security, crypto, realtime

wire-format §4.2

One-byte header form uses a magic value of 0xBEDE in the RTP 'defined by profile' 16-bit field. Each extension element starts with a 1-byte header containing a 4-bit ID (range 1-14) and a 4-bit length field (value is length-minus-one, so 0 means 1 byte of data, 15 means 16 bytes).

rtp, realtime

wire-format §4.3

Two-byte header form uses 0x100 (upper 12 bits) in the RTP 'defined by profile' field, with 4 application-dependent bits (appbits). Each extension element has an 8-bit ID (range 1-255) and an 8-bit length field (actual byte count, not minus-one; 0 means no subsequent data).

rtp, realtime