The Session Description Protocol (SDP) Label Attribute
Extracted elements (9)
Referencing a media stream by its 'm' line order in an SDP session description is insufficient because static external documents may need to reference a media stream that will only be negotiated and created in the future, before the SDP description exists.
The existing 'i' attribute was unsuitable because it is intended for human users rather than automata. The 'mid' attribute was unsuitable because its scope is limited to a single SDP session and cannot identify streams across multiple SDP sessions in a broader application context.
The 'label' attribute is informative only at the offer/answer model level. The presence or absence of 'label' in an offer does not constrain whether the answer must include or omit label attributes. No discovery mechanism is defined for whether a peer understands 'label'.
Applications that use 'label' as a pointer to media streams MUST specify its usage constraints, such as whether support for 'label' is mandatory and how negotiation of 'label' attribute support is handled.
It is strongly RECOMMENDED that integrity protection be applied to SDP session descriptions to prevent attackers from adding, modifying, or removing 'label' attributes. For SIP, S/MIME is the recommended mechanism.
The 'label' attribute is a new SDP media-level value attribute that carries a token pointer to identify a media stream. It is defined as 'a=label:<pointer>' where pointer is a token composed of allowed token-char characters.
IANA has registered a new SDP attribute named 'label'. It is a media-level attribute, not subject to charset, whose value is a token. It associates a media stream with a label for reference by external documents.
An attacker may attempt to add, modify, or remove 'label' attributes from a session description, causing the application to behave in a non-desirable way. Integrity protection (e.g., S/MIME for SIP-carried SDP) is strongly recommended to counter this threat.
The label attribute syntax is: label-attribute = "a=label:" pointer; pointer = token; token = 1*(token-char); token-char = %x21 / %x23-27 / %x2A-2B / %x2D-2E / %x30-39 / %x41-5A / %x5E-7E. The token is application-defined and case-sensitive.