rfc-8866

SDP: Session Description Protocol

A. Begen, P. Kyzivat, C. Perkins, M. Handley
date2021-01 streamIETF areaart wgmmusic statusPROPOSED STANDARD pages57 canonicalhttps://www.rfc-editor.org/rfc/rfc8866 doi10.17487/RFC8866
This memo defines the Session Description Protocol (SDP). SDP is intended for describing multimedia sessions for the purposes of session announcement, session invitation, and other forms of multimedia session initiation. This document obsoletes RFC 4566.

obsoletes

Extracted elements (32)

design-rationale §5

SDP uses a textual format (rather than binary encodings such as ASN.1 or XDR) to enhance portability, enable a variety of transports, and allow flexible text-based toolkits. The encoding is deliberately compact because session descriptions may be size-constrained, and strict field ordering enables simple parsers and easy error detection.

realtime

interoperability-note §6.1

The 'a=cat:' and 'a=keywds:' attributes are declared obsolete and SHOULD NOT be used; they SHOULD be ignored if received. The 'control' and 'data' media types from RFC 2327 have been removed from this specification.

realtime

interoperability-note §5.12

The 'k=' encryption key line is marked obsolete in RFC 8866 and MUST NOT be used. It is retained in the specification only for legacy parsing purposes; implementations MUST discard it on receipt.

realtime, security

normative-requirement §5.7 MUST

A session description MUST contain either at least one 'c=' line in each media description or a single 'c=' line at the session level. Media-level 'c=' values override session-level settings for the respective media.

realtime, ip

normative-requirement §6.7.1 MUST

An RTP-based system in receive-only mode (a=recvonly) MUST still send RTCP packets as described in RFC 3550. Similarly, an RTP-based system in inactive mode MUST still send RTCP if RTCP is used.

realtime, rtp

normative-requirement §5 MUST

An SDP description MUST conform to the syntax defined in Section 9. The fixed order of fields greatly enhances error detection and allows for a simple parser.

realtime, rtp, sip

normative-requirement §5 MUST

An SDP parser MUST completely ignore or reject any session description that contains a type letter it does not understand. An SDP parser MUST ignore any attribute it does not understand.

realtime

normative-requirement §5.13 MUST

Attributes MUST be registered with IANA. If an attribute is received that is not understood, it MUST be ignored by the receiver.

realtime, registry

normative-requirement §5.14 MUST

If noncontiguous RTP/RTCP ports are used or if they don't follow the parity rule of even RTP ports and odd RTCP ports, the 'a=rtcp:' attribute MUST be used. Applications MUST NOT subtract 1 from the RTP port when 'a=rtcp:' is present.

realtime, rtp, udp

normative-requirement §5 MUST

Internationalized domain names (IDNs) MUST be represented using the ASCII Compatible Encoding (ACE) form defined in RFC 5890 and MUST NOT be directly represented in UTF-8 or any other encoding.

realtime

normative-requirement §7 MUST NOT

SDP MUST NOT be used to convey keying material (e.g., using the 'a=crypto:' attribute) unless it can be guaranteed that the channel over which the SDP is delivered is both private and authenticated.

realtime, security, crypto

normative-requirement §5.7 MUST

Sessions using an 'IP4' multicast connection address MUST also have a TTL value present. TTL values MUST be in the range 0–255. For 'IP6' multicast, the TTL value MUST NOT be present.

realtime, multicast, ip

normative-requirement §5.12 MUST NOT

The 'k=' line (encryption key field) is obsolete and MUST NOT be used. One MUST NOT include a 'k=' line in an SDP, and MUST discard it if received.

realtime, security

normative-requirement §5.8 MUST

The use of the 'X-' prefix for bandwidth type names is NOT RECOMMENDED. Instead, new non-'X-' prefix bwtype names SHOULD be defined and MUST be registered with IANA. SDP parsers MUST ignore bandwidth-fields with unknown bwtype names.

realtime, registry

normative-requirement §5.3 MUST

There MUST be one and only one 's=' line per session description, and the 's=' line MUST NOT be empty. If a session has no meaningful name, 's= ' or 's=-' is RECOMMENDED.

realtime

normative-requirement §5.14 SHOULD

When multiple payload formats are listed in an 'm=' line for RTP/AVP, the first acceptable payload format from the beginning of the list SHOULD be used for the session. Dynamic payload type assignments SHOULD use 'a=rtpmap:'.

realtime, rtp

privacy-consideration §5.2

For privacy reasons, it is sometimes desirable to obfuscate the username and IP address of the session originator in the 'o=' line. An arbitrary username and private unicast address MAY be chosen, provided that global uniqueness of the session identifier tuple is maintained.

realtime, privacy

protocol-element §5.13

Attributes ('a=') are the primary extensibility mechanism for SDP. Property attributes take no value ('a=<name>'), while value attributes take the form 'a=<name>:<value>'. Attribute names MUST use the US-ASCII subset of UTF-8; attribute values MAY use any octet except Nul, LF, and CR.

realtime

protocol-element §6.7

Media direction is controlled by four mutually exclusive property attributes: 'a=recvonly', 'a=sendrecv', 'a=sendonly', and 'a=inactive'. At most one may appear at session level and at most one per media description. The default if none is present is 'a=sendrecv'.

realtime, rtp, webrtc

protocol-element §5

SDP describes sessions using a session-level section (starting with 'v=') followed by zero or more media descriptions (each starting with 'm='). Fields must appear in a fixed order; session-level values are defaults for all media unless overridden by media-level equivalents.

realtime, sip, webrtc

protocol-element §5.8

The 'b=' bandwidth field specifies proposed bandwidth using a type modifier and kilobits-per-second value. 'CT' (conference total) gives an upper limit for the whole session; 'AS' (application specific) gives bandwidth for a single media at a single endpoint.

realtime, qos

registry §8.1

The 'application/sdp' media type is registered with IANA. Files are primarily UTF-8 8-bit text; the 'a=charset:' attribute may signal other character sets. File extension '.sdp' is commonly used.

realtime, registry

registry §8.2

This document maintains IANA registries for six SDP parameter namespaces: media types (<media>), transport protocols (<proto>), attribute names (<attribute-name>), bandwidth specifiers (<bwtype>), network types (<nettype>), and address types (<addrtype>). All registry references updated from RFC 4566 to RFC 8866.

realtime, registry

security-consideration §7

A session description cannot be trusted unless obtained via an authenticated and integrity-protected transport from a known and trusted source. Endpoints receiving descriptions over unauthenticated transports SHOULD exercise care: the media destination, session parameters, or media security may be compromised.

realtime, security

security-consideration §7

Intermediary modification of SDP (e.g., by middleboxes opening NAT pinholes or firewall rules) is NOT RECOMMENDED unless the intermediary can verify the authenticity and authority of the session description. Use of ICE (RFC 8445) may avoid the need for such modifications.

realtime, security, nat

security-consideration §7

Software parsing a session description MUST NOT start software except that specifically configured for multimedia sessions. A session description arriving by announcement, email, or WWW MUST NOT deliver the user into an interactive multimedia session without explicit user consent.

realtime, security

wire-format §5

Each SDP line has the form '<type>=<value>' where type is exactly one case-significant character. Lines are terminated by CRLF (0x0d0a); parsers SHOULD also accept lines terminated with a single newline. Whitespace is not used on either side of '='.

realtime

wire-format §6.6

The 'a=rtpmap:' attribute encodes: payload-type SP encoding-name '/' clock-rate ['/' encoding-params]. Payload type is a 7-bit value (0–127); encoding-params for audio indicates the number of channels (OPTIONAL, defaults to 1).

realtime, rtp

wire-format §5.7

The 'c=' connection line uses '<nettype> <addrtype> <connection-address>'. For IPv4 multicast with layered encoding, the notation '<base multicast address>/<ttl>/<number of addresses>' allocates contiguously numbered multicast groups. Multiple 'c=' lines MUST NOT be used at session level.

realtime, multicast, ip

wire-format §5.14

The 'm=' line encodes a media description as: media type, port (optionally '/number-of-ports'), transport protocol, and one or more format descriptions, all space-delimited. For RTP/AVP, format values are RTP payload type numbers.

realtime, rtp

wire-format §5.2

The 'o=' line encodes originator and session identifier as: username, sess-id (numeric string), sess-version (numeric), nettype (e.g. 'IN'), addrtype (e.g. 'IP4'/'IP6'), and unicast-address, all space-delimited. The tuple (username, sess-id, nettype, addrtype, unicast-address) forms a globally unique session identifier.

realtime

wire-format §5.9

The 't=' line encodes start-time and stop-time as decimal seconds since January 1, 1900 UTC (NTP epoch). To convert to Unix time, subtract 2208988800. A stop-time of zero means the session is unbounded.

realtime, ntp