2356 lines
85 KiB
Plaintext
2356 lines
85 KiB
Plaintext
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
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]
|
|||
|
|