Bind local identifiers to negotiated URI meanings
04An extmap attribute binds a compact session-local number to an absolute URI and, optionally, direction and configuration.
This chosen mapping check stops before use. Opposite send/receive directions do not justify reusing the same ID for two meanings.
Source for this drawing: RFC 8285 · Read RFC section 5 ↗
New to this? Start hereA quick picture + helpful background
Finding a route and sending media are separate jobs.
Some messages set up a conversation or discover a reachable address. Other packets carry the audio or video. Follow those jobs separately.
Helpful first, if these ideas are unfamiliar
These pictures are analogies to help you learn. The linked RFC explains the actual rules.
Terms in this drawing
Related RFCs and changes
“Updates” changes part of an earlier RFC. “Obsoletes” replaces it. This list shows selected related documents.
A local ID has no universal meaning; mappings and their scope supply it.
- Session Description Protocol (SDP) describes media sessions. An offer proposes settings and an answer responds to them. The presence of this mechanism and the URI-to-ID mapping MUST be defined out of band. SDP can use a=extmap:<value>[/<direction>] <URI> [<extensionattributes>]. A usable ID is 1–14 for one-byte elements or 1–255 for two-byte elements, with 256 reserved for appbits signaling (§§4.3,5,8). Fictional URI urn:example:level in this guide is not an actual registered extension.
- The URI MUST be absolute and identify the actual extension. URIs need not be dereferenceable. Domain-based URIs SHOULD contain a month-date mmyyyy, with definition/assignment authorized by that domain’s owner on or near that date. An RFC-defined extension SHOULD use a registered urn:ietf:params:rtp-hdrext: name. RFC 8285 describes Expert Review registration, not static global allocation of local IDs (§§5,10.1).
- Usable IDs MUST be unique per media section, or once globally for session-level maps. Maps MUST be all session-level or all media-level; do not mix scopes. The same URI with identical attributes MUST NOT be repeated for the same stream. Within a BUNDLE group the m-lines share an ID space: the same URI/configuration MUST use the same ID, and configuration differences normally need different IDs unless the extension explicitly defines compatibility (§§5,7).
- Direction is relative to the device whose SDP is being described. A sendonly extension offered to a receiver that wants it MUST be answered recvonly; the converse recvonly→sendonly also applies. An unsupported or unwanted extension SHOULD be removed; inactive can express supported-but-not-currently-used behavior. Explicit extension direction incompatible with its stream direction is an error (§7).
- The answer MUST retain the same valid ID for the same offered extension; valid IDs MUST NOT be remapped in session updates. Updates MAY change directions or add/remove extensions. There is an important exception to simplistic “only accepted extensions may be sent”: either party MAY send other extensions, including inactive ones, for example for intermediaries, but only with a valid-range ID declared in SDP originated by that sender (§7). The small helpers model selected mappings, not complete SDP/BUNDLE/extension-specific negotiation.
Fictional metadata values, URI names and bounded packet/signaling models. Not an RTP stack, complete SDP negotiation, live loss measurement or cryptographic implementation.
Read the RFC section ↗