| Network Working Group M. Handley | |
| Request for Comments: 2327 V. Jacobson | |
| Category: Standards Track ISI/LBNL | |
| April 1998 | |
| SDP: Session Description Protocol | |
| Status of this Memo | |
| This document specifies an Internet standards track protocol for the | |
| Internet community, and requests discussion and suggestions for | |
| improvements. Please refer to the current edition of the "Internet | |
| Official Protocol Standards" (STD 1) for the standardization state | |
| and status of this protocol. Distribution of this memo is unlimited. | |
| Copyright Notice | |
| Copyright (C) The Internet Society (1998). All Rights Reserved. | |
| Abstract | |
| This document 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 is a product of the Multiparty Multimedia Session | |
| Control (MMUSIC) working group of the Internet Engineering Task | |
| Force. Comments are solicited and should be addressed to the working | |
| group's mailing list at confctrl@isi.edu and/or the authors. | |
| 1. Introduction | |
| On the Internet multicast backbone (Mbone), a session directory tool | |
| is used to advertise multimedia conferences and communicate the | |
| conference addresses and conference tool-specific information | |
| necessary for participation. This document defines a session | |
| description protocol for this purpose, and for general real-time | |
| multimedia session description purposes. This memo does not describe | |
| multicast address allocation or the distribution of SDP messages in | |
| detail. These are described in accompanying memos. SDP is not | |
| intended for negotiation of media encodings. | |
| Handley & Jacobson Standards Track [Page 1] | |
| RFC 2327 SDP April 1998 | |
| 2. Background | |
| The Mbone is the part of the internet that supports IP multicast, and | |
| thus permits efficient many-to-many communication. It is used | |
| extensively for multimedia conferencing. Such conferences usually | |
| have the property that tight coordination of conference membership is | |
| not necessary; to receive a conference, a user at an Mbone site only | |
| has to know the conference's multicast group address and the UDP | |
| ports for the conference data streams. | |
| Session directories assist the advertisement of conference sessions | |
| and communicate the relevant conference setup information to | |
| prospective participants. SDP is designed to convey such information | |
| to recipients. SDP is purely a format for session description - it | |
| does not incorporate a transport protocol, and is intended to use | |
| different transport protocols as appropriate including the Session | |
| Announcement Protocol [4], Session Initiation Protocol [11], Real- | |
| Time Streaming Protocol [12], electronic mail using the MIME | |
| extensions, and the Hypertext Transport Protocol. | |
| SDP is intended to be general purpose so that it can be used for a | |
| wider range of network environments and applications than just | |
| multicast session directories. However, it is not intended to | |
| support negotiation of session content or media encodings - this is | |
| viewed as outside the scope of session description. | |
| 3. Glossary of Terms | |
| The following terms are used in this document, and have specific | |
| meaning within the context of this document. | |
| Conference | |
| A multimedia conference is a set of two or more communicating users | |
| along with the software they are using to communicate. | |
| Session | |
| A multimedia session is a set of multimedia senders and receivers | |
| and the data streams flowing from senders to receivers. A | |
| multimedia conference is an example of a multimedia session. | |
| Session Advertisement | |
| See session announcement. | |
| Session Announcement | |
| A session announcement is a mechanism by which a session | |
| description is conveyed to users in a proactive fashion, i.e., the | |
| session description was not explicitly requested by the user. | |
| Handley & Jacobson Standards Track [Page 2] | |
| RFC 2327 SDP April 1998 | |
| Session Description | |
| A well defined format for conveying sufficient information to | |
| discover and participate in a multimedia session. | |
| 3.1. Terminology | |
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |
| document are to be interpreted as described in RFC 2119. | |
| 4. SDP Usage | |
| 4.1. Multicast Announcements | |
| SDP is a session description protocol for multimedia sessions. A | |
| common mode of usage is for a client to announce a conference session | |
| by periodically multicasting an announcement packet to a well known | |
| multicast address and port using the Session Announcement Protocol | |
| (SAP). | |
| SAP packets are UDP packets with the following format: | |
| |--------------------| | |
| | SAP header | | |
| |--------------------| | |
| | text payload | | |
| |////////// | |
| The header is the Session Announcement Protocol header. SAP is | |
| described in more detail in a companion memo [4] | |
| The text payload is an SDP session description, as described in this | |
| memo. The text payload should be no greater than 1 Kbyte in length. | |
| If announced by SAP, only one session announcement is permitted in a | |
| single packet. | |
| 4.2. Email and WWW Announcements | |
| Alternative means of conveying session descriptions include | |
| electronic mail and the World Wide Web. For both email and WWW | |
| distribution, the use of the MIME content type "application/sdp" | |
| should be used. This enables the automatic launching of applications | |
| for participation in the session from the WWW client or mail reader | |
| in a standard manner. | |
| Handley & Jacobson Standards Track [Page 3] | |
| RFC 2327 SDP April 1998 | |
| Note that announcements of multicast sessions made only via email or | |
| the World Wide Web (WWW) do not have the property that the receiver | |
| of a session announcement can necessarily receive the session because | |
| the multicast sessions may be restricted in scope, and access to the | |
| WWW server or reception of email is possible outside this scope. SAP | |
| announcements do not suffer from this mismatch. | |
| 5. Requirements and Recommendations | |
| The purpose of SDP is to convey information about media streams in | |
| multimedia sessions to allow the recipients of a session description | |
| to participate in the session. SDP is primarily intended for use in | |
| an internetwork, although it is sufficiently general that it can | |
| describe conferences in other network environments. | |
| A multimedia session, for these purposes, is defined as a set of | |
| media streams that exist for some duration of time. Media streams | |
| can be many-to-many. The times during which the session is active | |
| need not be continuous. | |
| Thus far, multicast based sessions on the Internet have differed from | |
| many other forms of conferencing in that anyone receiving the traffic | |
| can join the session (unless the session traffic is encrypted). In | |
| such an environment, SDP serves two primary purposes. It is a means | |
| to communicate the existence of a session, and is a means to convey | |
| sufficient information to enable joining and participating in the | |
| session. In a unicast environment, only the latter purpose is likely | |
| to be relevant. | |
| Thus SDP includes: | |
| o Session name and purpose | |
| o Time(s) the session is active | |
| o The media comprising the session | |
| o Information to receive those media (addresses, ports, formats and | |
| so on) | |
| As resources necessary to participate in a session may be limited, | |
| some additional information may also be desirable: | |
| o Information about the bandwidth to be used by the conference | |
| o Contact information for the person responsible for the session | |
| Handley & Jacobson Standards Track [Page 4] | |
| RFC 2327 SDP April 1998 | |
| In general, SDP must convey sufficient information to be able to join | |
| a session (with the possible exception of encryption keys) and to | |
| announce the resources to be used to non-participants that may need | |
| to know. | |
| 5.1. Media Information | |
| SDP includes: | |
| o The type of media (video, audio, etc) | |
| o The transport protocol (RTP/UDP/IP, H.320, etc) | |
| o The format of the media (H.261 video, MPEG video, etc) | |
| For an IP multicast session, the following are also conveyed: | |
| o Multicast address for media | |
| o Transport Port for media | |
| This address and port are the destination address and destination | |
| port of the multicast stream, whether being sent, received, or both. | |
| For an IP unicast session, the following are conveyed: | |
| o Remote address for media | |
| o Transport port for contact address | |
| The semantics of this address and port depend on the media and | |
| transport protocol defined. By default, this is the remote address | |
| and remote port to which data is sent, and the remote address and | |
| local port on which to receive data. However, some media may define | |
| to use these to establish a control channel for the actual media | |
| flow. | |
| 5.2. Timing Information | |
| Sessions may either be bounded or unbounded in time. Whether or not | |
| they are bounded, they may be only active at specific times. | |
| SDP can convey: | |
| o An arbitrary list of start and stop times bounding the session | |
| o For each bound, repeat times such as "every Wednesday at 10am for | |
| one hour" | |
| Handley & Jacobson Standards Track [Page 5] | |
| RFC 2327 SDP April 1998 | |
| This timing information is globally consistent, irrespective of local | |
| time zone or daylight saving time. | |
| 5.3. Private Sessions | |
| It is possible to create both public sessions and private sessions. | |
| Private sessions will typically be conveyed by encrypting the session | |
| description to distribute it. The details of how encryption is | |
| performed are dependent on the mechanism used to convey SDP - see [4] | |
| for how this is done for session announcements. | |
| If a session announcement is private it is possible to use that | |
| private announcement to convey encryption keys necessary to decode | |
| each of the media in a conference, including enough information to | |
| know which encryption scheme is used for each media. | |
| 5.4. Obtaining Further Information about a Session | |
| A session description should convey enough information to decide | |
| whether or not to participate in a session. SDP may include | |
| additional pointers in the form of Universal Resources Identifiers | |
| (URIs) for more information about the session. | |
| 5.5. Categorisation | |
| When many session descriptions are being distributed by SAP or any | |
| other advertisement mechanism, it may be desirable to filter | |
| announcements that are of interest from those that are not. SDP | |
| supports a categorisation mechanism for sessions that is capable of | |
| being automated. | |
| 5.6. Internationalization | |
| The SDP specification recommends the use of the ISO 10646 character | |
| sets in the UTF-8 encoding (RFC 2044) to allow many different | |
| languages to be represented. However, to assist in compact | |
| representations, SDP also allows other character sets such as ISO | |
| 8859-1 to be used when desired. Internationalization only applies to | |
| free-text fields (session name and background information), and not | |
| to SDP as a whole. | |
| 6. SDP Specification | |
| SDP session descriptions are entirely textual using the ISO 10646 | |
| character set in UTF-8 encoding. SDP field names and attributes names | |
| use only the US-ASCII subset of UTF-8, but textual fields and | |
| attribute values may use the full ISO 10646 character set. The | |
| textual form, as opposed to a binary encoding such as ASN/1 or XDR, | |
| Handley & Jacobson Standards Track [Page 6] | |
| RFC 2327 SDP April 1998 | |
| was chosen to enhance portability, to enable a variety of transports | |
| to be used (e.g, session description in a MIME email message) and to | |
| allow flexible, text-based toolkits (e.g., Tcl/Tk ) to be used to | |
| generate and to process session descriptions. However, since the | |
| total bandwidth allocated to all SAP announcements is strictly | |
| limited, the encoding is deliberately compact. Also, since | |
| announcements may be transported via very unreliable means (e.g., | |
| email) or damaged by an intermediate caching server, the encoding was | |
| designed with strict order and formatting rules so that most errors | |
| would result in malformed announcements which could be detected | |
| easily and discarded. This also allows rapid discarding of encrypted | |
| announcements for which a receiver does not have the correct key. | |
| An SDP session description consists of a number of lines of text of | |
| the form <type>=<value> <type> is always exactly one character and is | |
| case-significant. <value> is a structured text string whose format | |
| depends on <type>. It also will be case-significant unless a | |
| specific field defines otherwise. Whitespace is not permitted either | |
| side of the `=' sign. In general <value> is either a number of fields | |
| delimited by a single space character or a free format string. | |
| A session description consists of a session-level description | |
| (details that apply to the whole session and all media streams) and | |
| optionally several media-level descriptions (details that apply onto | |
| to a single media stream). | |
| An announcement consists of a session-level section followed by zero | |
| or more media-level sections. The session-level part starts with a | |
| `v=' line and continues to the first media-level section. The media | |
| description starts with an `m=' line and continues to the next media | |
| description or end of the whole session description. In general, | |
| session-level values are the default for all media unless overridden | |
| by an equivalent media-level value. | |
| When SDP is conveyed by SAP, only one session description is allowed | |
| per packet. When SDP is conveyed by other means, many SDP session | |
| descriptions may be concatenated together (the `v=' line indicating | |
| the start of a session description terminates the previous | |
| description). Some lines in each description are required and some | |
| are optional but all must appear in exactly the order given here (the | |
| fixed order greatly enhances error detection and allows for a simple | |
| parser). Optional items are marked with a `*'. | |
| Session description | |
| v= (protocol version) | |
| o= (owner/creator and session identifier). | |
| s= (session name) | |
| i=* (session information) | |
| Handley & Jacobson Standards Track [Page 7] | |
| RFC 2327 SDP April 1998 | |
| u=* (URI of description) | |
| e=* (email address) | |
| p=* (phone number) | |
| c=* (connection information - not required if included in all media) | |
| b=* (bandwidth information) | |
| One or more time descriptions (see below) | |
| z=* (time zone adjustments) | |
| k=* (encryption key) | |
| a=* (zero or more session attribute lines) | |
| Zero or more media descriptions (see below) | |
| Time description | |
| t= (time the session is active) | |
| r=* (zero or more repeat times) | |
| Media description | |
| m= (media name and transport address) | |
| i=* (media title) | |
| c=* (connection information - optional if included at session-level) | |
| b=* (bandwidth information) | |
| k=* (encryption key) | |
| a=* (zero or more media attribute lines) | |
| The set of `type' letters is deliberately small and not intended to | |
| be extensible -- SDP parsers must completely ignore any announcement | |
| that contains a `type' letter that it does not understand. The | |
| `attribute' mechanism ("a=" described below) is the primary means for | |
| extending SDP and tailoring it to particular applications or media. | |
| Some attributes (the ones listed in this document) have a defined | |
| meaning but others may be added on an application-, media- or | |
| session-specific basis. A session directory must ignore any | |
| attribute it doesn't understand. | |
| The connection (`c=') and attribute (`a=') information in the | |
| session-level section applies to all the media of that session unless | |
| overridden by connection information or an attribute of the same name | |
| in the media description. For instance, in the example below, each | |
| media behaves as if it were given a `recvonly' attribute. | |
| An example SDP description is: | |
| v=0 | |
| o=mhandley 2890844526 2890842807 IN IP4 126.16.64.4 | |
| s=SDP Seminar | |
| i=A Seminar on the session description protocol | |
| u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps | |
| e=mjh@isi.edu (Mark Handley) | |
| c=IN IP4 224.2.17.12/127 | |
| Handley & Jacobson Standards Track [Page 8] | |
| RFC 2327 SDP April 1998 | |
| t=2873397496 2873404696 | |
| a=recvonly | |
| m=audio 49170 RTP/AVP 0 | |
| m=video 51372 RTP/AVP 31 | |
| m=application 32416 udp wb | |
| a=orient:portrait | |
| Text records such as the session name and information are bytes | |
| strings which may contain any byte with the exceptions of 0x00 (Nul), | |
| 0x0a (ASCII newline) and 0x0d (ASCII carriage return). The sequence | |
| CRLF (0x0d0a) is used to end a record, although parsers should be | |
| tolerant and also accept records terminated with a single newline | |
| character. By default these byte strings contain ISO-10646 | |
| characters in UTF-8 encoding, but this default may be changed using | |
| the `charset' attribute. | |
| Protocol Version | |
| v=0 | |
| The "v=" field gives the version of the Session Description Protocol. | |
| There is no minor version number. | |
| Origin | |
| o=<username> <session id> <version> <network type> <address type> | |
| <address> | |
| The "o=" field gives the originator of the session (their username | |
| and the address of the user's host) plus a session id and session | |
| version number. | |
| <username> is the user's login on the originating host, or it is "-" | |
| if the originating host does not support the concept of user ids. | |
| <username> must not contain spaces. <session id> is a numeric string | |
| such that the tuple of <username>, <session id>, <network type>, | |
| <address type> and <address> form a globally unique identifier for | |
| the session. | |
| The method of <session id> allocation is up to the creating tool, but | |
| it has been suggested that a Network Time Protocol (NTP) timestamp be | |
| used to ensure uniqueness [1]. | |
| <version> is a version number for this announcement. It is needed | |
| for proxy announcements to detect which of several announcements for | |
| the same session is the most recent. Again its usage is up to the | |
| Handley & Jacobson Standards Track [Page 9] | |
| RFC 2327 SDP April 1998 | |
| creating tool, so long as <version> is increased when a modification | |
| is made to the session data. Again, it is recommended (but not | |
| mandatory) that an NTP timestamp is used. | |
| <network type> is a text string giving the type of network. | |
| Initially "IN" is defined to have the meaning "Internet". <address | |
| type> is a text string giving the type of the address that follows. | |
| Initially "IP4" and "IP6" are defined. <address> is the globally | |
| unique address of the machine from which the session was created. | |
| For an address type of IP4, this is either the fully-qualified domain | |
| name of the machine, or the dotted-decimal representation of the IP | |
| version 4 address of the machine. For an address type of IP6, this | |
| is either the fully-qualified domain name of the machine, or the | |
| compressed textual representation of the IP version 6 address of the | |
| machine. For both IP4 and IP6, the fully-qualified domain name is | |
| the form that SHOULD be given unless this is unavailable, in which | |
| case the globally unique address may be substituted. A local IP | |
| address MUST NOT be used in any context where the SDP description | |
| might leave the scope in which the address is meaningful. | |
| In general, the "o=" field serves as a globally unique identifier for | |
| this version of this session description, and the subfields excepting | |
| the version taken together identify the session irrespective of any | |
| modifications. | |
| Session Name | |
| s=<session name> | |
| The "s=" field is the session name. There must be one and only one | |
| "s=" field per session description, and it must contain ISO 10646 | |
| characters (but see also the `charset' attribute below). | |
| Session and Media Information | |
| i=<session description> | |
| The "i=" field is information about the session. There may be at | |
| most one session-level "i=" field per session description, and at | |
| most one "i=" field per media. Although it may be omitted, this is | |
| discouraged for session announcements, and user interfaces for | |
| composing sessions should require text to be entered. If it is | |
| present it must contain ISO 10646 characters (but see also the | |
| `charset' attribute below). | |
| A single "i=" field can also be used for each media definition. In | |
| media definitions, "i=" fields are primarily intended for labeling | |
| media streams. As such, they are most likely to be useful when a | |
| Handley & Jacobson Standards Track [Page 10] | |
| RFC 2327 SDP April 1998 | |
| single session has more than one distinct media stream of the same | |
| media type. An example would be two different whiteboards, one for | |
| slides and one for feedback and questions. | |
| URI | |
| u=<URI> | |
| o A URI is a Universal Resource Identifier as used by WWW clients | |
| o The URI should be a pointer to additional information about the | |
| conference | |
| o This field is optional, but if it is present it should be specified | |
| before the first media field | |
| o No more than one URI field is allowed per session description | |
| Email Address and Phone Number | |
| e=<email address> | |
| p=<phone number> | |
| o These specify contact information for the person responsible for | |
| the conference. This is not necessarily the same person that | |
| created the conference announcement. | |
| o Either an email field or a phone field must be specified. | |
| Additional email and phone fields are allowed. | |
| o If these are present, they should be specified before the first | |
| media field. | |
| o More than one email or phone field can be given for a session | |
| description. | |
| o Phone numbers should be given in the conventional international | |
| format - preceded by a "+ and the international country code. | |
| There must be a space or a hyphen ("-") between the country code | |
| and the rest of the phone number. Spaces and hyphens may be used | |
| to split up a phone field to aid readability if desired. For | |
| example: | |
| p=+44-171-380-7777 or p=+1 617 253 6011 | |
| Handley & Jacobson Standards Track [Page 11] | |
| RFC 2327 SDP April 1998 | |
| o Both email addresses and phone numbers can have an optional free | |
| text string associated with them, normally giving the name of the | |
| person who may be contacted. This should be enclosed in | |
| parenthesis if it is present. For example: | |
| e=mjh@isi.edu (Mark Handley) | |
| The alternative RFC822 name quoting convention is also allowed for | |
| both email addresses and phone numbers. For example, | |
| e=Mark Handley <mjh@isi.edu> | |
| The free text string should be in the ISO-10646 character set with | |
| UTF-8 encoding, or alternatively in ISO-8859-1 or other encodings | |
| if the appropriate charset session-level attribute is set. | |
| Connection Data | |
| c=<network type> <address type> <connection address> | |
| The "c=" field contains connection data. | |
| A session announcement must contain one "c=" field in each media | |
| description (see below) or a "c=" field at the session-level. It may | |
| contain a session-level "c=" field and one additional "c=" field per | |
| media description, in which case the per-media values override the | |
| session-level settings for the relevant media. | |
| The first sub-field is the network type, which is a text string | |
| giving the type of network. Initially "IN" is defined to have the | |
| meaning "Internet". | |
| The second sub-field is the address type. This allows SDP to be used | |
| for sessions that are not IP based. Currently only IP4 is defined. | |
| The third sub-field is the connection address. Optional extra | |
| subfields may be added after the connection address depending on the | |
| value of the <address type> field. | |
| For IP4 addresses, the connection address is defined as follows: | |
| o Typically the connection address will be a class-D IP multicast | |
| group address. If the session is not multicast, then the | |
| connection address contains the fully-qualified domain name or the | |
| unicast IP address of the expected data source or data relay or | |
| data sink as determined by additional attribute fields. It is not | |
| expected that fully-qualified domain names or unicast addresses | |
| Handley & Jacobson Standards Track [Page 12] | |
| RFC 2327 SDP April 1998 | |
| will be given in a session description that is communicated by a | |
| multicast announcement, though this is not prohibited. If a | |
| unicast data stream is to pass through a network address | |
| translator, the use of a fully-qualified domain name rather than an | |
| unicast IP address is RECOMMENDED. In other cases, the use of an | |
| IP address to specify a particular interface on a multi-homed host | |
| might be required. Thus this specification leaves the decision as | |
| to which to use up to the individual application, but all | |
| applications MUST be able to cope with receiving both formats. | |
| o Conferences using an IP multicast connection address must also have | |
| a time to live (TTL) value present in addition to the multicast | |
| address. The TTL and the address together define the scope with | |
| which multicast packets sent in this conference will be sent. TTL | |
| values must be in the range 0-255. | |
| The TTL for the session is appended to the address using a slash as | |
| a separator. An example is: | |
| c=IN IP4 224.2.1.1/127 | |
| Hierarchical or layered encoding schemes are data streams where the | |
| encoding from a single media source is split into a number of | |
| layers. The receiver can choose the desired quality (and hence | |
| bandwidth) by only subscribing to a subset of these layers. Such | |
| layered encodings are normally transmitted in multiple multicast | |
| groups to allow multicast pruning. This technique keeps unwanted | |
| traffic from sites only requiring certain levels of the hierarchy. | |
| For applications requiring multiple multicast groups, we allow the | |
| following notation to be used for the connection address: | |
| <base multicast address>/<ttl>/<number of addresses> | |
| If the number of addresses is not given it is assumed to be one. | |
| Multicast addresses so assigned are contiguously allocated above | |
| the base address, so that, for example: | |
| c=IN IP4 224.2.1.1/127/3 | |
| would state that addresses 224.2.1.1, 224.2.1.2 and 224.2.1.3 are | |
| to be used at a ttl of 127. This is semantically identical to | |
| including multiple "c=" lines in a media description: | |
| c=IN IP4 224.2.1.1/127 | |
| c=IN IP4 224.2.1.2/127 | |
| c=IN IP4 224.2.1.3/127 | |
| Handley & Jacobson Standards Track [Page 13] | |
| RFC 2327 SDP April 1998 | |
| Multiple addresses or "c=" lines can only be specified on a per- | |
| media basis, and not for a session-level "c=" field. | |
| It is illegal for the slash notation described above to be used for | |
| IP unicast addresses. | |
| Bandwidth | |
| b=<modifier>:<bandwidth-value> | |
| o This specifies the proposed bandwidth to be used by the session or | |
| media, and is optional. | |
| o <bandwidth-value> is in kilobits per second | |
| o <modifier> is a single alphanumeric word giving the meaning of the | |
| bandwidth figure. | |
| o Two modifiers are initially defined: | |
| CT Conference Total: An implicit maximum bandwidth is associated with | |
| each TTL on the Mbone or within a particular multicast | |
| administrative scope region (the Mbone bandwidth vs. TTL limits are | |
| given in the MBone FAQ). If the bandwidth of a session or media in | |
| a session is different from the bandwidth implicit from the scope, | |
| a `b=CT:...' line should be supplied for the session giving the | |
| proposed upper limit to the bandwidth used. The primary purpose of | |
| this is to give an approximate idea as to whether two or more | |
| conferences can co-exist simultaneously. | |
| AS Application-Specific Maximum: The bandwidth is interpreted to be | |
| application-specific, i.e., will be the application's concept of | |
| maximum bandwidth. Normally this will coincide with what is set on | |
| the application's "maximum bandwidth" control if applicable. | |
| Note that CT gives a total bandwidth figure for all the media at | |
| all sites. AS gives a bandwidth figure for a single media at a | |
| single site, although there may be many sites sending | |
| simultaneously. | |
| o Extension Mechanism: Tool writers can define experimental bandwidth | |
| modifiers by prefixing their modifier with "X-". For example: | |
| b=X-YZ:128 | |
| SDP parsers should ignore bandwidth fields with unknown modifiers. | |
| Modifiers should be alpha-numeric and, although no length limit is | |
| given, they are recommended to be short. | |
| Handley & Jacobson Standards Track [Page 14] | |
| RFC 2327 SDP April 1998 | |
| Times, Repeat Times and Time Zones | |
| t=<start time> <stop time> | |
| o "t=" fields specify the start and stop times for a conference | |
| session. Multiple "t=" fields may be used if a session is active | |
| at multiple irregularly spaced times; each additional "t=" field | |
| specifies an additional period of time for which the session will | |
| be active. If the session is active at regular times, an "r=" | |
| field (see below) should be used in addition to and following a | |
| "t=" field - in which case the "t=" field specifies the start and | |
| stop times of the repeat sequence. | |
| o The first and second sub-fields give the start and stop times for | |
| the conference respectively. These values are the decimal | |
| representation of Network Time Protocol (NTP) time values in | |
| seconds [1]. To convert these values to UNIX time, subtract | |
| decimal 2208988800. | |
| o If the stop-time is set to zero, then the session is not bounded, | |
| though it will not become active until after the start-time. If | |
| the start-time is also zero, the session is regarded as permanent. | |
| User interfaces should strongly discourage the creation of | |
| unbounded and permanent sessions as they give no information about | |
| when the session is actually going to terminate, and so make | |
| scheduling difficult. | |
| The general assumption may be made, when displaying unbounded | |
| sessions that have not timed out to the user, that an unbounded | |
| session will only be active until half an hour from the current | |
| time or the session start time, whichever is the later. If | |
| behaviour other than this is required, an end-time should be given | |
| and modified as appropriate when new information becomes available | |
| about when the session should really end. | |
| Permanent sessions may be shown to the user as never being active | |
| unless there are associated repeat times which state precisely when | |
| the session will be active. In general, permanent sessions should | |
| not be created for any session expected to have a duration of less | |
| than 2 months, and should be discouraged for sessions expected to | |
| have a duration of less than 6 months. | |
| r=<repeat interval> <active duration> <list of offsets from start- | |
| time> | |
| o "r=" fields specify repeat times for a session. For example, if | |
| a session is active at 10am on Monday and 11am on Tuesday for one | |
| Handley & Jacobson Standards Track [Page 15] | |
| RFC 2327 SDP April 1998 | |
| hour each week for three months, then the <start time> in the | |
| corresponding "t=" field would be the NTP representation of 10am on | |
| the first Monday, the <repeat interval> would be 1 week, the | |
| <active duration> would be 1 hour, and the offsets would be zero | |
| and 25 hours. The corresponding "t=" field stop time would be the | |
| NTP representation of the end of the last session three months | |
| later. By default all fields are in seconds, so the "r=" and "t=" | |
| fields might be: | |
| t=3034423619 3042462419 | |
| r=604800 3600 0 90000 | |
| To make announcements more compact, times may also be given in units | |
| of days, hours or minutes. The syntax for these is a number | |
| immediately followed by a single case-sensitive character. | |
| Fractional units are not allowed - a smaller unit should be used | |
| instead. The following unit specification characters are allowed: | |
| d - days (86400 seconds) | |
| h - minutes (3600 seconds) | |
| m - minutes (60 seconds) | |
| s - seconds (allowed for completeness but not recommended) | |
| Thus, the above announcement could also have been written: | |
| r=7d 1h 0 25h | |
| Monthly and yearly repeats cannot currently be directly specified | |
| with a single SDP repeat time - instead separate "t" fields should | |
| be used to explicitly list the session times. | |
| z=<adjustment time> <offset> <adjustment time> <offset> .... | |
| o To schedule a repeated session which spans a change from daylight- | |
| saving time to standard time or vice-versa, it is necessary to | |
| specify offsets from the base repeat times. This is required | |
| because different time zones change time at different times of day, | |
| different countries change to or from daylight time on different | |
| dates, and some countries do not have daylight saving time at all. | |
| Thus in order to schedule a session that is at the same time winter | |
| and summer, it must be possible to specify unambiguously by whose | |
| time zone a session is scheduled. To simplify this task for | |
| receivers, we allow the sender to specify the NTP time that a time | |
| zone adjustment happens and the offset from the time when the | |
| session was first scheduled. The "z" field allows the sender to | |
| specify a list of these adjustment times and offsets from the base | |
| time. | |
| Handley & Jacobson Standards Track [Page 16] | |
| RFC 2327 SDP April 1998 | |
| An example might be: | |
| z=2882844526 -1h 2898848070 0 | |
| This specifies that at time 2882844526 the time base by which the | |
| session's repeat times are calculated is shifted back by 1 hour, | |
| and that at time 2898848070 the session's original time base is | |
| restored. Adjustments are always relative to the specified start | |
| time - they are not cumulative. | |
| o If a session is likely to last several years, it is expected | |
| that | |
| the session announcement will be modified periodically rather than | |
| transmit several years worth of adjustments in one announcement. | |
| Encryption Keys | |
| k=<method> | |
| k=<method>:<encryption key> | |
| o The session description protocol may be used to convey encryption | |
| keys. A key field is permitted before the first media entry (in | |
| which case it applies to all media in the session), or for each | |
| media entry as required. | |
| o The format of keys and their usage is outside the scope of this | |
| document, but see [3]. | |
| o The method indicates the mechanism to be used to obtain a usable | |
| key by external means, or from the encoded encryption key given. | |
| The following methods are defined: | |
| k=clear:<encryption key> | |
| The encryption key (as described in [3] for RTP media streams | |
| under the AV profile) is included untransformed in this key | |
| field. | |
| k=base64:<encoded encryption key> | |
| The encryption key (as described in [3] for RTP media streams | |
| under the AV profile) is included in this key field but has been | |
| base64 encoded because it includes characters that are | |
| prohibited in SDP. | |
| k=uri:<URI to obtain key> | |
| A Universal Resource Identifier as used by WWW clients is | |
| included in this key field. The URI refers to the data | |
| containing the key, and may require additional authentication | |
| Handley & Jacobson Standards Track [Page 17] | |
| RFC 2327 SDP April 1998 | |
| before the key can be returned. When a request is made to the | |
| given URI, the MIME content-type of the reply specifies the | |
| encoding for the key in the reply. The key should not be | |
| obtained until the user wishes to join the session to reduce | |
| synchronisation of requests to the WWW server(s). | |
| k=prompt | |
| No key is included in this SDP description, but the session or | |
| media stream referred to by this key field is encrypted. The | |
| user should be prompted for the key when attempting to join the | |
| session, and this user-supplied key should then be used to | |
| decrypt the media streams. | |
| Attributes | |
| a=<attribute> | |
| a=<attribute>:<value> | |
| Attributes are the primary means for extending SDP. Attributes may | |
| be defined to be used as "session-level" attributes, "media-level" | |
| attributes, or both. | |
| A media description may have any number of attributes ("a=" fields) | |
| which are media specific. These are referred to as "media-level" | |
| attributes and add information about the media stream. Attribute | |
| fields can also be added before the first media field; these | |
| "session-level" attributes convey additional information that applies | |
| to the conference as a whole rather than to individual media; an | |
| example might be the conference's floor control policy. | |
| Attribute fields may be of two forms: | |
| o property attributes. A property attribute is simply of the form | |
| "a=<flag>". These are binary attributes, and the presence of the | |
| attribute conveys that the attribute is a property of the session. | |
| An example might be "a=recvonly". | |
| o value attributes. A value attribute is of the form | |
| "a=<attribute>:<value>". An example might be that a whiteboard | |
| could have the value attribute "a=orient:landscape" | |
| Attribute interpretation depends on the media tool being invoked. | |
| Thus receivers of session descriptions should be configurable in | |
| their interpretation of announcements in general and of attributes in | |
| particular. | |
| Attribute names must be in the US-ASCII subset of ISO-10646/UTF-8. | |
| Handley & Jacobson Standards Track [Page 18] | |
| RFC 2327 SDP April 1998 | |
| Attribute values are byte strings, and MAY use any byte value except | |
| 0x00 (Nul), 0x0A (LF), and 0x0D (CR). By default, attribute values | |
| are to be interpreted as in ISO-10646 character set with UTF-8 | |
| encoding. Unlike other text fields, attribute values are NOT | |
| normally affected by the `charset' attribute as this would make | |
| comparisons against known values problematic. However, when an | |
| attribute is defined, it can be defined to be charset-dependent, in | |
| which case it's value should be interpreted in the session charset | |
| rather than in ISO-10646. | |
| Attributes that will be commonly used can be registered with IANA | |
| (see Appendix B). Unregistered attributes should begin with "X-" to | |
| prevent inadvertent collision with registered attributes. In either | |
| case, if an attribute is received that is not understood, it should | |
| simply be ignored by the receiver. | |
| Media Announcements | |
| m=<media> <port> <transport> <fmt list> | |
| A session description may contain a number of media descriptions. | |
| Each media description starts with an "m=" field, and is terminated | |
| by either the next "m=" field or by the end of the session | |
| description. A media field also has several sub-fields: | |
| o The first sub-field is the media type. Currently defined media are | |
| "audio", "video", "application", "data" and "control", though this | |
| list may be extended as new communication modalities emerge (e.g., | |
| telepresense). The difference between "application" and "data" is | |
| that the former is a media flow such as whiteboard information, and | |
| the latter is bulk-data transfer such as multicasting of program | |
| executables which will not typically be displayed to the user. | |
| "control" is used to specify an additional conference control | |
| channel for the session. | |
| o The second sub-field is the transport port to which the media | |
| stream will be sent. The meaning of the transport port depends on | |
| the network being used as specified in the relevant "c" field and | |
| on the transport protocol defined in the third sub-field. Other | |
| ports used by the media application (such as the RTCP port, see | |
| [2]) should be derived algorithmically from the base media port. | |
| Note: For transports based on UDP, the value should be in the range | |
| 1024 to 65535 inclusive. For RTP compliance it should be an even | |
| number. | |
| Handley & Jacobson Standards Track [Page 19] | |
| RFC 2327 SDP April 1998 | |
| For applications where hierarchically encoded streams are being | |
| sent to a unicast address, it may be necessary to specify multiple | |
| transport ports. This is done using a similar notation to that | |
| used for IP multicast addresses in the "c=" field: | |
| m=<media> <port>/<number of ports> <transport> <fmt list> | |
| In such a case, the ports used depend on the transport protocol. | |
| For RTP, only the even ports are used for data and the | |
| corresponding one-higher odd port is used for RTCP. For example: | |
| m=video 49170/2 RTP/AVP 31 | |
| would specify that ports 49170 and 49171 form one RTP/RTCP pair and | |
| 49172 and 49173 form the second RTP/RTCP pair. RTP/AVP is the | |
| transport protocol and 31 is the format (see below). | |
| It is illegal for both multiple addresses to be specified in the | |
| "c=" field and for multiple ports to be specified in the "m=" field | |
| in the same session description. | |
| o The third sub-field is the transport protocol. The transport | |
| protocol values are dependent on the address-type field in the "c=" | |
| fields. Thus a "c=" field of IP4 defines that the transport | |
| protocol runs over IP4. For IP4, it is normally expected that most | |
| media traffic will be carried as RTP over UDP. The following | |
| transport protocols are preliminarily defined, but may be extended | |
| through registration of new protocols with IANA: | |
| - RTP/AVP - the IETF's Realtime Transport Protocol using the | |
| Audio/Video profile carried over UDP. | |
| - udp - User Datagram Protocol | |
| If an application uses a single combined proprietary media format | |
| and transport protocol over UDP, then simply specifying the | |
| transport protocol as udp and using the format field to distinguish | |
| the combined protocol is recommended. If a transport protocol is | |
| used over UDP to carry several distinct media types that need to be | |
| distinguished by a session directory, then specifying the transport | |
| protocol and media format separately is necessary. RTP is an | |
| example of a transport-protocol that carries multiple payload | |
| formats that must be distinguished by the session directory for it | |
| to know how to start appropriate tools, relays, mixers or | |
| recorders. | |
| Handley & Jacobson Standards Track [Page 20] | |
| RFC 2327 SDP April 1998 | |
| The main reason to specify the transport-protocol in addition to | |
| the media format is that the same standard media formats may be | |
| carried over different transport protocols even when the network | |
| protocol is the same - a historical example is vat PCM audio and | |
| RTP PCM audio. In addition, relays and monitoring tools that are | |
| transport-protocol-specific but format-independent are possible. | |
| For RTP media streams operating under the RTP Audio/Video Profile | |
| [3], the protocol field is "RTP/AVP". Should other RTP profiles be | |
| defined in the future, their profiles will be specified in the same | |
| way. For example, the protocol field "RTP/XYZ" would specify RTP | |
| operating under a profile whose short name is "XYZ". | |
| o The fourth and subsequent sub-fields are media formats. For audio | |
| and video, these will normally be a media payload type as defined | |
| in the RTP Audio/Video Profile. | |
| When a list of payload formats is given, this implies that all of | |
| these formats may be used in the session, but the first of these | |
| formats is the default format for the session. | |
| For media whose transport protocol is not RTP or UDP the format | |
| field is protocol specific. Such formats should be defined in an | |
| additional specification document. | |
| For media whose transport protocol is RTP, SDP can be used to | |
| provide a dynamic binding of media encoding to RTP payload type. | |
| The encoding names in the RTP AV Profile do not specify unique | |
| audio encodings (in terms of clock rate and number of audio | |
| channels), and so they are not used directly in SDP format fields. | |
| Instead, the payload type number should be used to specify the | |
| format for static payload types and the payload type number along | |
| with additional encoding information should be used for dynamically | |
| allocated payload types. | |
| An example of a static payload type is u-law PCM coded single | |
| channel audio sampled at 8KHz. This is completely defined in the | |
| RTP Audio/Video profile as payload type 0, so the media field for | |
| such a stream sent to UDP port 49232 is: | |
| m=video 49232 RTP/AVP 0 | |
| An example of a dynamic payload type is 16 bit linear encoded | |
| stereo audio sampled at 16KHz. If we wish to use dynamic RTP/AVP | |
| payload type 98 for such a stream, additional information is | |
| required to decode it: | |
| m=video 49232 RTP/AVP 98 | |
| Handley & Jacobson Standards Track [Page 21] | |
| RFC 2327 SDP April 1998 | |
| a=rtpmap:98 L16/16000/2 | |
| The general form of an rtpmap attribute is: | |
| a=rtpmap:<payload type> <encoding name>/<clock rate>[/<encoding | |
| parameters>] | |
| For audio streams, <encoding parameters> may specify the number of | |
| audio channels. This parameter may be omitted if the number of | |
| channels is one provided no additional parameters are needed. For | |
| video streams, no encoding parameters are currently specified. | |
| Additional parameters may be defined in the future, but | |
| codecspecific parameters should not be added. Parameters added to | |
| an rtpmap attribute should only be those required for a session | |
| directory to make the choice of appropriate media too to | |
| participate in a session. Codec-specific parameters should be | |
| added in other attributes. | |
| Up to one rtpmap attribute can be defined for each media format | |
| specified. Thus we might have: | |
| m=audio 49230 RTP/AVP 96 97 98 | |
| a=rtpmap:96 L8/8000 | |
| a=rtpmap:97 L16/8000 | |
| a=rtpmap:98 L16/11025/2 | |
| RTP profiles that specify the use of dynamic payload types must | |
| define the set of valid encoding names and/or a means to register | |
| encoding names if that profile is to be used with SDP. | |
| Experimental encoding formats can also be specified using rtpmap. | |
| RTP formats that are not registered as standard format names must | |
| be preceded by "X-". Thus a new experimental redundant audio | |
| stream called GSMLPC using dynamic payload type 99 could be | |
| specified as: | |
| m=video 49232 RTP/AVP 99 | |
| a=rtpmap:99 X-GSMLPC/8000 | |
| Such an experimental encoding requires that any site wishing to | |
| receive the media stream has relevant configured state in its | |
| session directory to know which tools are appropriate. | |
| Note that RTP audio formats typically do not include information | |
| about the number of samples per packet. If a non-default (as | |
| defined in the RTP Audio/Video Profile) packetisation is required, | |
| the "ptime" attribute is used as given below. | |
| Handley & Jacobson Standards Track [Page 22] | |
| RFC 2327 SDP April 1998 | |
| For more details on RTP audio and video formats, see [3]. | |
| o Formats for non-RTP media should be registered as MIME content | |
| types as described in Appendix B. For example, the LBL whiteboard | |
| application might be registered as MIME content-type application/wb | |
| with encoding considerations specifying that it operates over UDP, | |
| with no appropriate file format. In SDP this would then be | |
| expressed using a combination of the "media" field and the "fmt" | |
| field, as follows: | |
| m=application 32416 udp wb | |
| Suggested Attributes | |
| The following attributes are suggested. Since application writers | |
| may add new attributes as they are required, this list is not | |
| exhaustive. | |
| a=cat:<category> | |
| This attribute gives the dot-separated hierarchical category of | |
| the session. This is to enable a receiver to filter unwanted | |
| sessions by category. It would probably have been a compulsory | |
| separate field, except for its experimental nature at this time. | |
| It is a session-level attribute, and is not dependent on charset. | |
| a=keywds:<keywords> | |
| Like the cat attribute, this is to assist identifying wanted | |
| sessions at the receiver. This allows a receiver to select | |
| interesting session based on keywords describing the purpose of | |
| the session. It is a session-level attribute. It is a charset | |
| dependent attribute, meaning that its value should be interpreted | |
| in the charset specified for the session description if one is | |
| specified, or by default in ISO 10646/UTF-8. | |
| a=tool:<name and version of tool> | |
| This gives the name and version number of the tool used to create | |
| the session description. It is a session-level attribute, and is | |
| not dependent on charset. | |
| a=ptime:<packet time> | |
| This gives the length of time in milliseconds represented by the | |
| media in a packet. This is probably only meaningful for audio | |
| data. It should not be necessary to know ptime to decode RTP or | |
| vat audio, and it is intended as a recommendation for the | |
| encoding/packetisation of audio. It is a media attribute, and is | |
| not dependent on charset. | |
| Handley & Jacobson Standards Track [Page 23] | |
| RFC 2327 SDP April 1998 | |
| a=recvonly | |
| This specifies that the tools should be started in receive-only | |
| mode where applicable. It can be either a session or media | |
| attribute, and is not dependent on charset. | |
| a=sendrecv | |
| This specifies that the tools should be started in send and | |
| receive mode. This is necessary for interactive conferences with | |
| tools such as wb which defaults to receive only mode. It can be | |
| either a session or media attribute, and is not dependent on | |
| charset. | |
| a=sendonly | |
| This specifies that the tools should be started in send-only | |
| mode. An example may be where a different unicast address is to | |
| be used for a traffic destination than for a traffic source. In | |
| such a case, two media descriptions may be use, one sendonly and | |
| one recvonly. It can be either a session or media attribute, but | |
| would normally only be used as a media attribute, and is not | |
| dependent on charset. | |
| a=orient:<whiteboard orientation> | |
| Normally this is only used in a whiteboard media specification. | |
| It specifies the orientation of a the whiteboard on the screen. | |
| It is a media attribute. Permitted values are `portrait', | |
| `landscape' and `seascape' (upside down landscape). It is not | |
| dependent on charset | |
| a=type:<conference type> | |
| This specifies the type of the conference. Suggested values are | |
| `broadcast', `meeting', `moderated', `test' and `H332'. | |
| `recvonly' should be the default for `type:broadcast' sessions, | |
| `type:meeting' should imply `sendrecv' and `type:moderated' | |
| should indicate the use of a floor control tool and that the | |
| media tools are started so as to "mute" new sites joining the | |
| conference. | |
| Specifying the attribute type:H332 indicates that this loosely | |
| coupled session is part of a H.332 session as defined in the ITU | |
| H.332 specification [10]. Media tools should be started | |
| `recvonly'. | |
| Specifying the attribute type:test is suggested as a hint that, | |
| unless explicitly requested otherwise, receivers can safely avoid | |
| displaying this session description to users. | |
| The type attribute is a session-level attribute, and is not | |
| dependent on charset. | |
| Handley & Jacobson Standards Track [Page 24] | |
| RFC 2327 SDP April 1998 | |
| a=charset:<character set> | |
| This specifies the character set to be used to display the | |
| session name and information data. By default, the ISO-10646 | |
| character set in UTF-8 encoding is used. If a more compact | |
| representation is required, other character sets may be used such | |
| as ISO-8859-1 for Northern European languages. In particular, | |
| the ISO 8859-1 is specified with the following SDP attribute: | |
| a=charset:ISO-8859-1 | |
| This is a session-level attribute; if this attribute is present, | |
| it must be before the first media field. The charset specified | |
| MUST be one of those registered with IANA, such as ISO-8859-1. | |
| The character set identifier is a US-ASCII string and MUST be | |
| compared against the IANA identifiers using a case-insensitive | |
| comparison. If the identifier is not recognised or not | |
| supported, all strings that are affected by it SHOULD be regarded | |
| as byte strings. | |
| Note that a character set specified MUST still prohibit the use | |
| of bytes 0x00 (Nul), 0x0A (LF) and 0x0d (CR). Character sets | |
| requiring the use of these characters MUST define a quoting | |
| mechanism that prevents these bytes appearing within text fields. | |
| a=sdplang:<language tag> | |
| This can be a session level attribute or a media level attribute. | |
| As a session level attribute, it specifies the language for the | |
| session description. As a media level attribute, it specifies | |
| the language for any media-level SDP information field associated | |
| with that media. Multiple sdplang attributes can be provided | |
| either at session or media level if multiple languages in the | |
| session description or media use multiple languages, in which | |
| case the order of the attributes indicates the order of | |
| importance of the various languages in the session or media from | |
| most important to least important. | |
| In general, sending session descriptions consisting of multiple | |
| languages should be discouraged. Instead, multiple descriptions | |
| should be sent describing the session, one in each language. | |
| However this is not possible with all transport mechanisms, and | |
| so multiple sdplang attributes are allowed although not | |
| recommended. | |
| The sdplang attribute value must be a single RFC 1766 language | |
| tag in US-ASCII. It is not dependent on the charset attribute. | |
| An sdplang attribute SHOULD be specified when a session is of | |
| Handley & Jacobson Standards Track [Page 25] | |
| RFC 2327 SDP April 1998 | |
| sufficient scope to cross geographic boundaries where the | |
| language of recipients cannot be assumed, or where the session is | |
| in a different language from the locally assumed norm. | |
| a=lang:<language tag> | |
| This can be a session level attribute or a media level attribute. | |
| As a session level attribute, it specifies the default language | |
| for the session being described. As a media level attribute, it | |
| specifies the language for that media, overriding any session- | |
| level language specified. Multiple lang attributes can be | |
| provided either at session or media level if multiple languages | |
| if the session description or media use multiple languages, in | |
| which case the order of the attributes indicates the order of | |
| importance of the various languages in the session or media from | |
| most important to least important. | |
| The lang attribute value must be a single RFC 1766 language tag | |
| in US-ASCII. It is not dependent on the charset attribute. A | |
| lang attribute SHOULD be specified when a session is of | |
| sufficient scope to cross geographic boundaries where the | |
| language of recipients cannot be assumed, or where the session is | |
| in a different language from the locally assumed norm. | |
| a=framerate:<frame rate> | |
| This gives the maximum video frame rate in frames/sec. It is | |
| intended as a recommendation for the encoding of video data. | |
| Decimal representations of fractional values using the notation | |
| "<integer>.<fraction>" are allowed. It is a media attribute, is | |
| only defined for video media, and is not dependent on charset. | |
| a=quality:<quality> | |
| This gives a suggestion for the quality of the encoding as an | |
| integer value. | |
| The intention of the quality attribute for video is to specify a | |
| non-default trade-off between frame-rate and still-image quality. | |
| For video, the value in the range 0 to 10, with the following | |
| suggested meaning: | |
| 10 - the best still-image quality the compression scheme can | |
| give. | |
| 5 - the default behaviour given no quality suggestion. | |
| 0 - the worst still-image quality the codec designer thinks is | |
| still usable. | |
| It is a media attribute, and is not dependent on charset. | |
| Handley & Jacobson Standards Track [Page 26] | |
| RFC 2327 SDP April 1998 | |
| a=fmtp:<format> <format specific parameters> | |
| This attribute allows parameters that are specific to a | |
| particular format to be conveyed in a way that SDP doesn't have | |
| to understand them. The format must be one of the formats | |
| specified for the media. Format-specific parameters may be any | |
| set of parameters required to be conveyed by SDP and given | |
| unchanged to the media tool that will use this format. | |
| It is a media attribute, and is not dependent on charset. | |
| 6.1. Communicating Conference Control Policy | |
| There is some debate over the way conference control policy should be | |
| communicated. In general, the authors believe that an implicit | |
| declarative style of specifying conference control is desirable where | |
| possible. | |
| A simple declarative style uses a single conference attribute field | |
| before the first media field, possibly supplemented by properties | |
| such as `recvonly' for some of the media tools. This conference | |
| attribute conveys the conference control policy. An example might be: | |
| a=type:moderated | |
| In some cases, however, it is possible that this may be insufficient | |
| to communicate the details of an unusual conference control policy. | |
| If this is the case, then a conference attribute specifying external | |
| control might be set, and then one or more "media" fields might be | |
| used to specify the conference control tools and configuration data | |
| for those tools. An example is an ITU H.332 session: | |
| c=IN IP4 224.5.6.7 | |
| a=type:H332 | |
| m=audio 49230 RTP/AVP 0 | |
| m=video 49232 RTP/AVP 31 | |
| m=application 12349 udp wb | |
| m=control 49234 H323 mc | |
| c=IN IP4 134.134.157.81 | |
| In this example, a general conference attribute (type:H332) is | |
| specified stating that conference control will be provided by an | |
| external H.332 tool, and a contact addresses for the H.323 session | |
| multipoint controller is given. | |
| In this document, only the declarative style of conference control | |
| declaration is specified. Other forms of conference control should | |
| specify an appropriate type attribute, and should define the | |
| implications this has for control media. | |
| Handley & Jacobson Standards Track [Page 27] | |
| RFC 2327 SDP April 1998 | |
| 7. Security Considerations | |
| SDP is a session description format that describes multimedia | |
| sessions. A session description should not be trusted unless it has | |
| been obtained by an authenticated transport protocol from a trusted | |
| source. Many different transport protocols may be used to distribute | |
| session description, and the nature of the authentication will differ | |
| from transport to transport. | |
| One transport that will frequently be used to distribute session | |
| descriptions is the Session Announcement Protocol (SAP). SAP | |
| provides both encryption and authentication mechanisms but due to the | |
| nature of session announcements it is likely that there are many | |
| occasions where the originator of a session announcement cannot be | |
| authenticated because they are previously unknown to the receiver of | |
| the announcement and because no common public key infrastructure is | |
| available. | |
| On receiving a session description over an unauthenticated transport | |
| mechanism or from an untrusted party, software parsing the session | |
| should take a few precautions. Session description contain | |
| information required to start software on the receivers system. | |
| Software that parses a session description MUST not be able to start | |
| other software except that which is specifically configured as | |
| appropriate software to participate in multimedia sessions. It is | |
| normally considered INAPPROPRIATE for software parsing a session | |
| description to start, on a user's system, software that is | |
| appropriate to participate in multimedia sessions, without the user | |
| first being informed that such software will be started and giving | |
| their consent. Thus a session description arriving by session | |
| announcement, email, session invitation, or WWW page SHOULD not | |
| deliver the user into an {it interactive} multimedia session without | |
| the user being aware that this will happen. As it is not always | |
| simple to tell whether a session is interactive or not, applications | |
| that are unsure should assume sessions are interactive. | |
| In this specification, there are no attributes which would allow the | |
| recipient of a session description to be informed to start multimedia | |
| tools in a mode where they default to transmitting. Under some | |
| circumstances it might be appropriate to define such attributes. If | |
| this is done an application parsing a session description containing | |
| such attributes SHOULD either ignore them, or inform the user that | |
| joining this session will result in the automatic transmission of | |
| multimedia data. The default behaviour for an unknown attribute is | |
| to ignore it. | |
| Handley & Jacobson Standards Track [Page 28] | |
| RFC 2327 SDP April 1998 | |
| Session descriptions may be parsed at intermediate systems such as | |
| firewalls for the purposes of opening a hole in the firewall to allow | |
| the participation in multimedia sessions. It is considered | |
| INAPPROPRIATE for a firewall to open such holes for unicast data | |
| streams unless the session description comes in a request from inside | |
| the firewall. | |
| For multicast sessions, it is likely that local administrators will | |
| apply their own policies, but the exclusive use of "local" or "site- | |
| local" administrative scope within the firewall and the refusal of | |
| the firewall to open a hole for such scopes will provide separation | |
| of global multicast sessions from local ones. | |
| Handley & Jacobson Standards Track [Page 29] | |
| RFC 2327 SDP April 1998 | |
| Appendix A: SDP Grammar | |
| This appendix provides an Augmented BNF grammar for SDP. ABNF is | |
| defined in RFC 2234. | |
| announcement = proto-version | |
| origin-field | |
| session-name-field | |
| information-field | |
| uri-field | |
| email-fields | |
| phone-fields | |
| connection-field | |
| bandwidth-fields | |
| time-fields | |
| key-field | |
| attribute-fields | |
| media-descriptions | |
| proto-version = "v=" 1*DIGIT CRLF | |
| ;this memo describes version 0 | |
| origin-field = "o=" username space | |
| sess-id space sess-version space | |
| nettype space addrtype space | |
| addr CRLF | |
| session-name-field = "s=" text CRLF | |
| information-field = ["i=" text CRLF] | |
| uri-field = ["u=" uri CRLF] | |
| email-fields = *("e=" email-address CRLF) | |
| phone-fields = *("p=" phone-number CRLF) | |
| connection-field = ["c=" nettype space addrtype space | |
| connection-address CRLF] | |
| ;a connection field must be present | |
| ;in every media description or at the | |
| ;session-level | |
| bandwidth-fields = *("b=" bwtype ":" bandwidth CRLF) | |
| Handley & Jacobson Standards Track [Page 30] | |
| RFC 2327 SDP April 1998 | |
| time-fields = 1*( "t=" start-time space stop-time | |
| *(CRLF repeat-fields) CRLF) | |
| [zone-adjustments CRLF] | |
| repeat-fields = "r=" repeat-interval space typed-time | |
| 1*(space typed-time) | |
| zone-adjustments = time space ["-"] typed-time | |
| *(space time space ["-"] typed-time) | |
| key-field = ["k=" key-type CRLF] | |
| key-type = "prompt" | | |
| "clear:" key-data | | |
| "base64:" key-data | | |
| "uri:" uri | |
| key-data = email-safe | "~" | " | |
| attribute-fields = *("a=" attribute CRLF) | |
| media-descriptions = *( media-field | |
| information-field | |
| *(connection-field) | |
| bandwidth-fields | |
| key-field | |
| attribute-fields ) | |
| media-field = "m=" media space port ["/" integer] | |
| space proto 1*(space fmt) CRLF | |
| media = 1*(alpha-numeric) | |
| ;typically "audio", "video", "application" | |
| ;or "data" | |
| fmt = 1*(alpha-numeric) | |
| ;typically an RTP payload type for audio | |
| ;and video media | |
| Handley & Jacobson Standards Track [Page 31] | |
| RFC 2327 SDP April 1998 | |
| proto = 1*(alpha-numeric) | |
| ;typically "RTP/AVP" or "udp" for IP4 | |
| port = 1*(DIGIT) | |
| ;should in the range "1024" to "65535" inclusive | |
| ;for UDP based media | |
| attribute = (att-field ":" att-value) | att-field | |
| att-field = 1*(alpha-numeric) | |
| att-value = byte-string | |
| sess-id = 1*(DIGIT) | |
| ;should be unique for this originating username/host | |
| sess-version = 1*(DIGIT) | |
| ;0 is a new session | |
| connection-address = multicast-address | |
| | addr | |
| multicast-address = 3*(decimal-uchar ".") decimal-uchar "/" ttl | |
| [ "/" integer ] | |
| ;multicast addresses may be in the range | |
| ;224.0.0.0 to 239.255.255.255 | |
| ttl = decimal-uchar | |
| start-time = time | "0" | |
| stop-time = time | "0" | |
| time = POS-DIGIT 9*(DIGIT) | |
| ;sufficient for 2 more centuries | |
| repeat-interval = typed-time | |
| Handley & Jacobson Standards Track [Page 32] | |
| RFC 2327 SDP April 1998 | |
| typed-time = 1*(DIGIT) [fixed-len-time-unit] | |
| fixed-len-time-unit = "d" | "h" | "m" | "s" | |
| bwtype = 1*(alpha-numeric) | |
| bandwidth = 1*(DIGIT) | |
| username = safe | |
| ;pretty wide definition, but doesn't include space | |
| email-address = email | email "(" email-safe ")" | | |
| email-safe "<" email ">" | |
| email = ;defined in RFC822 | |
| uri= ;defined in RFC1630 | |
| phone-number = phone | phone "(" email-safe ")" | | |
| email-safe "<" phone ">" | |
| phone = "+" POS-DIGIT 1*(space | "-" | DIGIT) | |
| ;there must be a space or hyphen between the | |
| ;international code and the rest of the number. | |
| nettype = "IN" | |
| ;list to be extended | |
| addrtype = "IP4" | "IP6" | |
| ;list to be extended | |
| addr = FQDN | unicast-address | |
| FQDN = 4*(alpha-numeric|"-"|".") | |
| ;fully qualified domain name as specified in RFC1035 | |
| Handley & Jacobson Standards Track [Page 33] | |
| RFC 2327 SDP April 1998 | |
| unicast-address = IP4-address | IP6-address | |
| IP4-address = b1 "." decimal-uchar "." decimal-uchar "." b4 | |
| b1 = decimal-uchar | |
| ;less than "224"; not "0" or "127" | |
| b4 = decimal-uchar | |
| ;not "0" | |
| IP6-address = ;to be defined | |
| text = byte-string | |
| ;default is to interpret this as IS0-10646 UTF8 | |
| ;ISO 8859-1 requires a "a=charset:ISO-8859-1" | |
| ;session-level attribute to be used | |
| byte-string = 1*(0x01..0x09|0x0b|0x0c|0x0e..0xff) | |
| ;any byte except NUL, CR or LF | |
| decimal-uchar = DIGIT | |
| | POS-DIGIT DIGIT | |
| | ("1" 2*(DIGIT)) | |
| | ("2" ("0"|"1"|"2"|"3"|"4") DIGIT) | |
| | ("2" "5" ("0"|"1"|"2"|"3"|"4"|"5")) | |
| integer = POS-DIGIT *(DIGIT) | |
| alpha-numeric = ALPHA | DIGIT | |
| DIGIT = "0" | POS-DIGIT | |
| POS-DIGIT = "1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9" | |
| ALPHA = "a"|"b"|"c"|"d"|"e"|"f"|"g"|"h"|"i"|"j"|"k"| | |
| "l"|"m"|"n"|"o "|"p"|"q"|"r"|"s"|"t"|"u"|"v"| | |
| "w"|"x"|"y"|"z"|"A"|"B"|"C "|"D"|"E"|"F"|"G"| | |
| "H"|"I"|"J"|"K"|"L"|"M"|"N"|"O"|"P"|" Q"|"R"| | |
| "S"|"T"|"U"|"V"|"W"|"X"|"Y"|"Z" | |
| Handley & Jacobson Standards Track [Page 34] | |
| RFC 2327 SDP April 1998 | |
| email-safe = safe | space | tab | |
| safe = alpha-numeric | | |
| "'" | "'" | "-" | "." | "/" | ":" | "?" | """ | | |
| "#" | "$" | "&" | "*" | ";" | "=" | "@" | "[" | | |
| "]" | "^" | "_" | "`" | "{" | "|" | "}" | "+" | | |
| "~" | " | |
| space = %d32 | |
| tab = %d9 | |
| CRLF = %d13.10 | |
| Handley & Jacobson Standards Track [Page 35] | |
| RFC 2327 SDP April 1998 | |
| Appendix B: Guidelines for registering SDP names with IANA | |
| There are seven field names that may be registered with IANA. Using | |
| the terminology in the SDP specification BNF, they are "media", | |
| "proto", "fmt", "att-field", "bwtype", "nettype" and "addrtype". | |
| "media" (eg, audio, video, application, data). | |
| Packetized media types, such as those used by RTP, share the | |
| namespace used by media types registry [RFC 2048] (i.e. "MIME | |
| types"). The list of valid media names is the set of top-level | |
| MIME content types. The set of media is intended to be small and | |
| not to be extended except under rare circumstances. (The MIME | |
| subtype corresponds to the "fmt" parameter below). | |
| "proto" | |
| In general this should be an IETF standards-track transport | |
| protocol identifier such as RTP/AVP (rfc 1889 under the rfc 1890 | |
| profile). | |
| However, people will want to invent their own proprietary | |
| transport protocols. Some of these should be registered as a | |
| "fmt" using "udp" as the protocol and some of which probably | |
| can't be. | |
| Where the protocol and the application are intimately linked, | |
| such as with the LBL whiteboard wb which used a proprietary and | |
| special purpose protocol over UDP, the protocol name should be | |
| "udp" and the format name that should be registered is "wb". The | |
| rules for formats (see below) apply to such registrations. | |
| Where the proprietary transport protocol really carries many | |
| different data formats, it is possible to register a new protocol | |
| name with IANA. In such a case, an RFC MUST be produced | |
| describing the protocol and referenced in the registration. Such | |
| an RFC MAY be informational, although it is preferable if it is | |
| standards-track. | |
| "fmt" | |
| The format namespace is dependent on the context of the "proto" | |
| field, so a format cannot be registered without specifying one or | |
| more transport protocols that it applies to. | |
| Formats cover all the possible encodings that might want to be | |
| transported in a multimedia session. | |
| Handley & Jacobson Standards Track [Page 36] | |
| RFC 2327 SDP April 1998 | |
| For RTP formats that have been assigned static payload types, the | |
| payload type number is used. For RTP formats using a dynamic | |
| payload type number, the dynamic payload type number is given as | |
| the format and an additional "rtpmap" attribute specifies the | |
| format and parameters. | |
| For non-RTP formats, any unregistered format name may be | |
| registered through the MIME-type registration process [RFC 2048]. | |
| The type given here is the MIME subtype only (the top-level MIME | |
| content type is specified by the media parameter). The MIME type | |
| registration SHOULD reference a standards-track RFC which | |
| describes the transport protocol for this media type. If there | |
| is an existing MIME type for this format, the MIME registration | |
| should be augmented to reference the transport specification for | |
| this media type. If there is not an existing MIME type for this | |
| format, and there exists no appropriate file format, this should | |
| be noted in the encoding considerations as "no appropriate file | |
| format". | |
| "att-field" (Attribute names) | |
| Attribute field names MAY be registered with IANA, although this | |
| is not compulsory, and unknown attributes are simply ignored. | |
| When an attribute is registered, it must be accompanied by a | |
| brief specification stating the following: | |
| o contact name, email address and telephone number | |
| o attribute-name (as it will appear in SDP) | |
| o long-form attribute name in English | |
| o type of attribute (session level, media level, or both) | |
| o whether the attribute value is subject to the charset | |
| attribute. | |
| o a one paragraph explanation of the purpose of the attribute. | |
| o a specification of appropriate attribute values for this | |
| attribute. | |
| IANA will not sanity check such attribute registrations except to | |
| ensure that they do not clash with existing registrations. | |
| Handley & Jacobson Standards Track [Page 37] | |
| RFC 2327 SDP April 1998 | |
| Although the above is the minimum that IANA will accept, if the | |
| attribute is expected to see widespread use and interoperability | |
| is an issue, authors are encouraged to produce a standards-track | |
| RFC that specifies the attribute more precisely. | |
| Submitters of registrations should ensure that the specification | |
| is in the spirit of SDP attributes, most notably that the | |
| attribute is platform independent in the sense that it makes no | |
| implicit assumptions about operating systems and does not name | |
| specific pieces of software in a manner that might inhibit | |
| interoperability. | |
| "bwtype" (bandwidth specifiers) | |
| A proliferation of bandwidth specifiers is strongly discouraged. | |
| New bandwidth specifiers may be registered with IANA. The | |
| submission MUST reference a standards-track RFC specifying the | |
| semantics of the bandwidth specifier precisely, and indicating | |
| when it should be used, and why the existing registered bandwidth | |
| specifiers do not suffice. | |
| "nettype" (Network Type) | |
| New network types may be registered with IANA if SDP needs to be | |
| used in the context of non-internet environments. Whilst these | |
| are not normally the preserve of IANA, there may be circumstances | |
| when an Internet application needs to interoperate with a non- | |
| internet application, such as when gatewaying an internet | |
| telephony call into the PSTN. The number of network types should | |
| be small and should be rarely extended. A new network type | |
| cannot be registered without registering at least one address | |
| type to be used with that network type. A new network type | |
| registration MUST reference an RFC which gives details of the | |
| network type and address type and specifies how and when they | |
| would be used. Such an RFC MAY be Informational. | |
| "addrtype" (Address Type) | |
| New address types may be registered with IANA. An address type | |
| is only meaningful in the context of a network type, and any | |
| registration of an address type MUST specify a registered network | |
| type, or be submitted along with a network type registration. A | |
| new address type registration MUST reference an RFC giving | |
| details of the syntax of the address type. Such an RFC MAY be | |
| Informational. Address types are not expected to be registered | |
| frequently. | |
| Handley & Jacobson Standards Track [Page 38] | |
| RFC 2327 SDP April 1998 | |
| Registration Procedure | |
| To register a name the above guidelines should be followed regarding | |
| the required level of documentation that is required. The | |
| registration itself should be sent to IANA. Attribute registrations | |
| should include the information given above. Other registrations | |
| should include the following additional information: | |
| o contact name, email address and telephone number | |
| o name being registered (as it will appear in SDP) | |
| o long-form name in English | |
| o type of name ("media", "proto", "fmt", "bwtype", "nettype", or | |
| "addrtype") | |
| o a one paragraph explanation of the purpose of the registered name. | |
| o a reference to the specification (eg RFC number) of the registered | |
| name. | |
| IANA may refer any registration to the IESG or to any appropriate | |
| IETF working group for review, and may request revisions to be made | |
| before a registration will be made. | |
| Handley & Jacobson Standards Track [Page 39] | |
| RFC 2327 SDP April 1998 | |
| Appendix C: Authors' Addresses | |
| Mark Handley | |
| Information Sciences Institute | |
| c/o MIT Laboratory for Computer Science | |
| 545 Technology Square | |
| Cambridge, MA 02139 | |
| United States | |
| electronic mail: mjh@isi.edu | |
| Van Jacobson | |
| MS 46a-1121 | |
| Lawrence Berkeley Laboratory | |
| Berkeley, CA 94720 | |
| United States | |
| electronic mail: van@ee.lbl.gov | |
| Acknowledgments | |
| Many people in the IETF MMUSIC working group have made comments and | |
| suggestions contributing to this document. In particular, we would | |
| like to thank Eve Schooler, Steve Casner, Bill Fenner, Allison | |
| Mankin, Ross Finlayson, Peter Parnes, Joerg Ott, Carsten Bormann, Rob | |
| Lanphier and Steve Hanna. | |
| References | |
| [1] Mills, D., "Network Time Protocol (version 3) specification and | |
| implementation", RFC 1305, March 1992. | |
| [2] Schulzrinne, H., Casner, S., Frederick, R. and V. Jacobson, "RTP: | |
| A Transport Protocol for Real-Time Applications", RFC 1889, January | |
| 1996. | |
| [3] Schulzrinne, H., "RTP Profile for Audio and Video Conferences | |
| with Minimal Control", RFC 1890, January 1996 | |
| [4] Handley, M., "SAP - Session Announcement Protocol", Work in | |
| Progress. | |
| [5] V. Jacobson, S. McCanne, "vat - X11-based audio teleconferencing | |
| tool" vat manual page, Lawrence Berkeley Laboratory, 1994. | |
| [6] The Unicode Consortium, "The Unicode Standard -- Version 2.0", | |
| Addison-Wesley, 1996. | |
| Handley & Jacobson Standards Track [Page 40] | |
| RFC 2327 SDP April 1998 | |
| [7] ISO/IEC 10646-1:1993. International Standard -- Information | |
| technol- ogy -- Universal Multiple-Octet Coded Character Set (UCS) -- | |
| Part 1: Architecture and Basic Multilingual Plane. Five amendments | |
| and a techn- ical corrigendum have been published up to now. UTF-8 | |
| is described in Annex R, published as Amendment 2. | |
| [8] Goldsmith, D., and M. Davis, "Using Unicode with MIME", RFC 1641, | |
| July 1994. | |
| [9] Yergeau, F., "UTF-8, a transformation format of Unicode and ISO | |
| 10646", RFC 2044, October 1996. | |
| [10] ITU-T Recommendation H.332 (1998): "Multimedia Terminal for | |
| Receiving Internet-based H.323 Conferences", ITU, Geneva. | |
| [11] Handley, M., Schooler, E., and H. Schulzrinne, "Session | |
| Initiation Protocol (SIP)", Work in Progress. | |
| [12] Schulzrinne, H., Rao, A., and R. Lanphier, "Real Time Streaming | |
| Protocol (RTSP)", RFC 2326, April 1998. | |
| Handley & Jacobson Standards Track [Page 41] | |
| RFC 2327 SDP April 1998 | |
| Full Copyright Statement | |
| Copyright (C) The Internet Society (1998). All Rights Reserved. | |
| This document and translations of it may be copied and furnished to | |
| others, and derivative works that comment on or otherwise explain it | |
| or assist in its implementation may be prepared, copied, published | |
| and distributed, in whole or in part, without restriction of any | |
| kind, provided that the above copyright notice and this paragraph are | |
| included on all such copies and derivative works. However, this | |
| document itself may not be modified in any way, such as by removing | |
| the copyright notice or references to the Internet Society or other | |
| Internet organizations, except as needed for the purpose of | |
| developing Internet standards in which case the procedures for | |
| copyrights defined in the Internet Standards process must be | |
| followed, or as required to translate it into languages other than | |
| English. | |
| The limited permissions granted above are perpetual and will not be | |
| revoked by the Internet Society or its successors or assigns. | |
| This document and the information contained herein is provided on an | |
| "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING | |
| TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING | |
| BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION | |
| HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF | |
| MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | |
| Handley & Jacobson Standards Track [Page 42] | |