





Network Working Group                                         L. Barbato
Request for Comments: 5215                                          Xiph
Category: Standards Track                                    August 2008


              RTP Payload Format for Vorbis Encoded Audio

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.

Abstract

   This document describes an RTP payload format for transporting Vorbis
   encoded audio.  It details the RTP encapsulation mechanism for raw
   Vorbis data and the delivery mechanisms for the decoder probability
   model (referred to as a codebook), as well as other setup
   information.

   Also included within this memo are media type registrations and the
   details necessary for the use of Vorbis with the Session Description
   Protocol (SDP).

























Barbato                     Standards Track                     [Page 1]

RFC 5215               Vorbis RTP Payload Format             August 2008


Table of Contents

   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  3
     1.1.  Conformance and Document Conventions . . . . . . . . . . .  3
   2.  Payload Format . . . . . . . . . . . . . . . . . . . . . . . .  3
     2.1.  RTP Header . . . . . . . . . . . . . . . . . . . . . . . .  4
     2.2.  Payload Header . . . . . . . . . . . . . . . . . . . . . .  5
     2.3.  Payload Data . . . . . . . . . . . . . . . . . . . . . . .  6
     2.4.  Example RTP Packet . . . . . . . . . . . . . . . . . . . .  8
   3.  Configuration Headers  . . . . . . . . . . . . . . . . . . . .  8
     3.1.  In-band Header Transmission  . . . . . . . . . . . . . . .  9
       3.1.1.  Packed Configuration . . . . . . . . . . . . . . . . . 10
     3.2.  Out of Band Transmission . . . . . . . . . . . . . . . . . 12
       3.2.1.  Packed Headers . . . . . . . . . . . . . . . . . . . . 12
     3.3.  Loss of Configuration Headers  . . . . . . . . . . . . . . 13
   4.  Comment Headers  . . . . . . . . . . . . . . . . . . . . . . . 13
   5.  Frame Packetization  . . . . . . . . . . . . . . . . . . . . . 14
     5.1.  Example Fragmented Vorbis Packet . . . . . . . . . . . . . 15
     5.2.  Packet Loss  . . . . . . . . . . . . . . . . . . . . . . . 17
   6.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 18
     6.1.  Packed Headers IANA Considerations . . . . . . . . . . . . 19
   7.  SDP Related Considerations . . . . . . . . . . . . . . . . . . 20
     7.1.  Mapping Media Type Parameters into SDP . . . . . . . . . . 20
       7.1.1.  SDP Example  . . . . . . . . . . . . . . . . . . . . . 21
     7.2.  Usage with the SDP Offer/Answer Model  . . . . . . . . . . 22
   8.  Congestion Control . . . . . . . . . . . . . . . . . . . . . . 22
   9.  Example  . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
     9.1.  Stream Radio . . . . . . . . . . . . . . . . . . . . . . . 22
   10. Security Considerations  . . . . . . . . . . . . . . . . . . . 23
   11. Copying Conditions . . . . . . . . . . . . . . . . . . . . . . 23
   12. Acknowledgments  . . . . . . . . . . . . . . . . . . . . . . . 23
   13. References . . . . . . . . . . . . . . . . . . . . . . . . . . 24
     13.1. Normative References . . . . . . . . . . . . . . . . . . . 24
     13.2. Informative References . . . . . . . . . . . . . . . . . . 25

















Barbato                     Standards Track                     [Page 2]

RFC 5215               Vorbis RTP Payload Format             August 2008


1.  Introduction

   Vorbis is a general purpose perceptual audio codec intended to allow
   maximum encoder flexibility, thus allowing it to scale competitively
   over an exceptionally wide range of bit rates.  At the high quality/
   bitrate end of the scale (CD or DAT rate stereo, 16/24 bits), it is
   in the same league as MPEG-4 AAC.  Vorbis is also intended for lower
   and higher sample rates (from 8kHz telephony to 192kHz digital
   masters) and a range of channel representations (monaural,
   polyphonic, stereo, quadraphonic, 5.1, ambisonic, or up to 255
   discrete channels).

   Vorbis encoded audio is generally encapsulated within an Ogg format
   bitstream [RFC3533], which provides framing and synchronization.  For
   the purposes of RTP transport, this layer is unnecessary, and so raw
   Vorbis packets are used in the payload.

1.1.  Conformance and Document Conventions

   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 BCP 14, [RFC2119] and
   indicate requirement levels for compliant implementations.
   Requirements apply to all implementations unless otherwise stated.

   An implementation is a software module that supports one of the media
   types defined in this document.  Software modules may support
   multiple media types, but conformance is considered individually for
   each type.

   Implementations that fail to satisfy one or more "MUST" requirements
   are considered non-compliant.  Implementations that satisfy all
   "MUST" requirements, but fail to satisfy one or more "SHOULD"
   requirements, are said to be "conditionally compliant".  All other
   implementations are "unconditionally compliant".

2.  Payload Format

   For RTP-based transport of Vorbis-encoded audio, the standard RTP
   header is followed by a 4-octet payload header, and then the payload
   data.  The payload headers are used to associate the Vorbis data with
   its associated decoding codebooks as well as indicate if the
   following packet contains fragmented Vorbis data and/or the number of
   whole Vorbis data frames.  The payload data contains the raw Vorbis
   bitstream information.  There are 3 types of Vorbis data; an RTP
   payload MUST contain just one of them at a time.





Barbato                     Standards Track                     [Page 3]

RFC 5215               Vorbis RTP Payload Format             August 2008


2.1.  RTP Header

   The format of the RTP header is specified in [RFC3550] and shown in
   Figure 1.  This payload format uses the fields of the header in a
   manner consistent with that specification.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |V=2|P|X|  CC   |M|     PT      |       sequence number         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                           timestamp                           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |           synchronization source (SSRC) identifier            |
      +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
      |            contributing source (CSRC) identifiers             |
      |                              ...                              |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                           Figure 1: RTP Header

   The RTP header begins with an octet of fields (V, P, X, and CC) to
   support specialized RTP uses (see [RFC3550] and [RFC3551] for
   details).  For Vorbis RTP, the following values are used.

   Version (V): 2 bits

   This field identifies the version of RTP.  The version used by this
   specification is two (2).

   Padding (P): 1 bit

   Padding MAY be used with this payload format according to Section 5.1
   of [RFC3550].

   Extension (X): 1 bit

   The Extension bit is used in accordance with [RFC3550].

   CSRC count (CC): 4 bits

   The CSRC count is used in accordance with [RFC3550].

   Marker (M): 1 bit

   Set to zero.  Audio silence suppression is not used.  This conforms
   to Section 4.1 of [VORBIS-SPEC-REF].




Barbato                     Standards Track                     [Page 4]

RFC 5215               Vorbis RTP Payload Format             August 2008


   Payload Type (PT): 7 bits

   An RTP profile for a class of applications is expected to assign a
   payload type for this format, or a dynamically allocated payload type
   SHOULD be chosen that designates the payload as Vorbis.

   Sequence number: 16 bits

   The sequence number increments by one for each RTP data packet sent,
   and may be used by the receiver to detect packet loss and to restore
   the packet sequence.  This field is detailed further in [RFC3550].

   Timestamp: 32 bits

   A timestamp representing the sampling time of the first sample of the
   first Vorbis packet in the RTP payload.  The clock frequency MUST be
   set to the sample rate of the encoded audio data and is conveyed out-
   of-band (e.g., as an SDP parameter).

   SSRC/CSRC identifiers:

   These two fields, 32 bits each with one SSRC field and a maximum of
   16 CSRC fields, are as defined in [RFC3550].

2.2.  Payload Header

   The 4 octets following the RTP Header section are the Payload Header.
   This header is split into a number of bit fields detailing the format
   of the following payload data packets.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                     Ident                     | F |VDT|# pkts.|
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                         Figure 2: Payload Header

   Ident: 24 bits

   This 24-bit field is used to associate the Vorbis data to a decoding
   Configuration.  It is stored as a network byte order integer.

   Fragment type (F): 2 bits







Barbato                     Standards Track                     [Page 5]

RFC 5215               Vorbis RTP Payload Format             August 2008


   This field is set according to the following list:

      0 = Not Fragmented

      1 = Start Fragment

      2 = Continuation Fragment

      3 = End Fragment

   Vorbis Data Type (VDT): 2 bits

   This field specifies the kind of Vorbis data stored in this RTP
   packet.  There are currently three different types of Vorbis
   payloads.  Each packet MUST contain only a single type of Vorbis
   packet (e.g., you must not aggregate configuration and comment
   packets in the same RTP payload).

      0 = Raw Vorbis payload

      1 = Vorbis Packed Configuration payload

      2 = Legacy Vorbis Comment payload

      3 = Reserved

   The packets with a VDT of value 3 MUST be ignored.

   The last 4 bits represent the number of complete packets in this
   payload.  This provides for a maximum number of 15 Vorbis packets in
   the payload.  If the payload contains fragmented data, the number of
   packets MUST be set to 0.

2.3.  Payload Data

   Raw Vorbis packets are currently unbounded in length; application
   profiles will likely define a practical limit.  Typical Vorbis packet
   sizes range from very small (2-3 bytes) to quite large (8-12
   kilobytes).  The reference implementation [LIBVORBIS] typically
   produces packets less than ~800 bytes, except for the setup header
   packets, which are ~4-12 kilobytes.  Within an RTP context, to avoid
   fragmentation, the Vorbis data packet size SHOULD be kept
   sufficiently small so that after adding the RTP and payload headers,
   the complete RTP packet is smaller than the path MTU.







Barbato                     Standards Track                     [Page 6]

RFC 5215               Vorbis RTP Payload Format             August 2008


       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            length             |       vorbis packet data     ..
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                       Figure 3: Payload Data Header

   Each Vorbis payload packet starts with a two octet length header,
   which is used to represent the size in bytes of the following data
   payload, and is followed by the raw Vorbis data padded to the nearest
   byte boundary, as explained by the Vorbis I Specification
   [VORBIS-SPEC-REF].  The length value is stored as a network byte
   order integer.

   For payloads that consist of multiple Vorbis packets, the payload
   data consists of the packet length followed by the packet data for
   each of the Vorbis packets in the payload.

   The Vorbis packet length header is the length of the Vorbis data
   block only and does not include the length field.

   The payload packing of the Vorbis data packets MUST follow the
   guidelines set out in [RFC3551], where the oldest Vorbis packet
   occurs immediately after the RTP packet header.  Subsequent Vorbis
   packets, if any, MUST follow in temporal order.

   Audio channel mapping is in accordance with the Vorbis I
   Specification [VORBIS-SPEC-REF].






















Barbato                     Standards Track                     [Page 7]

RFC 5215               Vorbis RTP Payload Format             August 2008


2.4.  Example RTP Packet

   Here is an example RTP payload containing two Vorbis packets.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | 2 |0|0|  0    |0|      PT     |       sequence number         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |               timestamp (in sample rate units)                |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |           synchronisation source (SSRC) identifier            |
      +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
      |            contributing source (CSRC) identifiers             |
      |                              ...                              |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                     Ident                     | 0 | 0 | 2 pks |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            length             |          vorbis data         ..
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ..                        vorbis data                           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            length             |   next vorbis packet data    ..
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ..                        vorbis data                          ..
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ..               vorbis data                    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                    Figure 4: Example Raw Vorbis Packet

   The payload data section of the RTP packet begins with the 24-bit
   Ident field followed by the one octet bit field header, which has the
   number of Vorbis frames set to 2.  Each of the Vorbis data frames is
   prefixed by the two octets length field.  The Packet Type and
   Fragment Type are set to 0.  The Configuration that will be used to
   decode the packets is the one indexed by the ident value.

3.  Configuration Headers

   Unlike other mainstream audio codecs, Vorbis has no statically
   configured probability model.  Instead, it packs all entropy decoding
   configuration, Vector Quantization and Huffman models into a data
   block that must be transmitted to the decoder with the compressed
   data.  A decoder also requires information detailing the number of
   audio channels, bitrates, and similar information to configure itself
   for a particular compressed data stream.  These two blocks of



Barbato                     Standards Track                     [Page 8]

RFC 5215               Vorbis RTP Payload Format             August 2008


   information are often referred to collectively as the "codebooks" for
   a Vorbis stream, and are included as special "header" packets at the
   start of the compressed data.  In addition, the Vorbis I
   specification [VORBIS-SPEC-REF] requires the presence of a comment
   header packet that gives simple metadata about the stream, but this
   information is not required for decoding the frame sequence.

   Thus, these two codebook header packets must be received by the
   decoder before any audio data can be interpreted.  These requirements
   pose problems in RTP, which is often used over unreliable transports.

   Since this information must be transmitted reliably and, as the RTP
   stream may change certain configuration data mid-session, there are
   different methods for delivering this configuration data to a client,
   both in-band and out-of-band, which are detailed below.  In order to
   set up an initial state for the client application, the configuration
   MUST be conveyed via the signalling channel used to set up the
   session.  One example of such signalling is SDP [RFC4566] with the
   Offer/Answer Model [RFC3264].  Changes to the configuration MAY be
   communicated via a re-invite, conveying a new SDP, or sent in-band in
   the RTP channel.  Implementations MUST support an in-band delivery of
   updated codebooks, and SHOULD support out-of-band codebook update
   using a new SDP file.  The changes may be due to different codebooks
   as well as different bitrates of the RTP stream.

   For non-chained streams, the recommended Configuration delivery
   method is inside the Packed Configuration (Section 3.1.1) in the SDP
   as explained the Mapping Media Type Parameters into SDP
   (Section 7.1).

   The 24-bit Ident field is used to map which Configuration will be
   used to decode a packet.  When the Ident field changes, it indicates
   that a change in the stream has taken place.  The client application
   MUST have in advance the correct configuration.  If the client
   detects a change in the Ident value and does not have this
   information, it MUST NOT decode the raw associated Vorbis data until
   it fetches the correct Configuration.

3.1.  In-band Header Transmission

   The Packed Configuration (Section 3.1.1) Payload is sent in-band with
   the packet type bits set to match the Vorbis Data Type.  Clients MUST
   be capable of dealing with fragmentation and periodic re-transmission
   of [RFC4588] the configuration headers.  The RTP timestamp value MUST
   reflect the transmission time of the first data packet for which this
   configuration applies.





Barbato                     Standards Track                     [Page 9]

RFC 5215               Vorbis RTP Payload Format             August 2008


3.1.1.  Packed Configuration

   A Vorbis Packed Configuration is indicated with the Vorbis Data Type
   field set to 1.  Of the three headers defined in the Vorbis I
   specification [VORBIS-SPEC-REF], the Identification and the Setup
   MUST be packed as they are, while the Comment header MAY be replaced
   with a dummy one.

   The packed configuration stores Xiph codec configurations in a
   generic way: the first field stores the number of the following
   packets minus one (count field), the next ones represent the size of
   the headers (length fields), and the headers immediately follow the
   list of length fields.  The size of the last header is implicit.

   The count and the length fields are encoded using the following
   logic: the data is in network byte order; every byte has the most
   significant bit used as a flag, and the following 7 bits are used to
   store the value.  The first 7 most significant bits are stored in the
   first byte.  If there are remaining bits, the flag bit is set to 1
   and the subsequent 7 bits are stored in the following byte.  If there
   are remaining bits, set the flag to 1 and the same procedure is
   repeated.  The ending byte has the flag bit set to 0.  To decode,
   simply iterate over the bytes until the flag bit is set to 0.  For
   every byte, the data is added to the accumulated value multiplied by
   128.

   The headers are packed in the same order as they are present in Ogg
   [VORBIS-SPEC-REF]: Identification, Comment, Setup.

   The 2 byte length tag defines the length of the packed headers as the
   sum of the Configuration, Comment, and Setup lengths.




















Barbato                     Standards Track                    [Page 10]

RFC 5215               Vorbis RTP Payload Format             August 2008


       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |V=2|P|X|  CC   |M|     PT      |             xxxx              |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                             xxxxx                             |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |           synchronization source (SSRC) identifier            |
      +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
      |            contributing source (CSRC) identifiers             |
      |                              ...                              |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                      Ident                    | 0 | 1 |      1|
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |           length              | n. of headers |    length1    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |    length2    |                  Identification              ..
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ..                        Identification                       ..
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ..                        Identification                       ..
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ..                        Identification                       ..
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ..               Identification                 |    Comment   ..
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ..                            Comment                          ..
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ..                            Comment                          ..
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ..                            Comment                          ..
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ..           Comment            |             Setup            ..
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ..                            Setup                            ..
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ..                            Setup                            ..
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                   Figure 5: Packed Configuration Figure

   The Ident field is set with the value that will be used by the Raw
   Payload Packets to address this Configuration.  The Fragment type is
   set to 0 because the packet bears the full Packed configuration.  The
   number of the packet is set to 1.





Barbato                     Standards Track                    [Page 11]

RFC 5215               Vorbis RTP Payload Format             August 2008


3.2.  Out of Band Transmission

   The following packet definition MUST be used when Configuration is
   inside in the SDP.

3.2.1.  Packed Headers

   As mentioned above, the RECOMMENDED delivery vector for Vorbis
   configuration data is via a retrieval method that can be performed
   using a reliable transport protocol.  As the RTP headers are not
   required for this method of delivery, the structure of the
   configuration data is slightly different.  The packed header starts
   with a 32-bit (network-byte ordered) count field, which details the
   number of packed headers that are contained in the bundle.  The
   following shows the Packed header payload for each chained Vorbis
   stream.

      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                     Number of packed headers                  |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          Packed header                        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          Packed header                        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                     Figure 6: Packed Headers Overview























Barbato                     Standards Track                    [Page 12]

RFC 5215               Vorbis RTP Payload Format             August 2008


       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                   Ident                       |    length    ..
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ..              | n. of headers |    length1    |    length2   ..
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ..              |             Identification Header            ..
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      .................................................................
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ..              |         Comment Header                       ..
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      .................................................................
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ..                        Comment Header                        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          Setup Header                        ..
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      .................................................................
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ..                         Setup Header                         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                      Figure 7: Packed Headers Detail

   The key difference between the in-band format and this one is that
   there is no need for the payload header octet.  In this figure, the
   comment has a size bigger than 127 bytes.

3.3.  Loss of Configuration Headers

   Unlike the loss of raw Vorbis payload data, loss of a configuration
   header leads to a situation where it will not be possible to
   successfully decode the stream.  Implementations MAY try to recover
   from an error by requesting again the missing Configuration or, if
   the delivery method is in-band, by buffering the payloads waiting for
   the Configuration needed to decode them.  The baseline reaction
   SHOULD either be reset or end the RTP session.

4.  Comment Headers

   Vorbis Data Type flag set to 2 indicates that the packet contains the
   comment metadata, such as artist name, track title, and so on.  These
   metadata messages are not intended to be fully descriptive but rather
   to offer basic track/song information.  Clients MAY ignore it
   completely.  The details on the format of the comments can be found
   in the Vorbis I Specification [VORBIS-SPEC-REF].



Barbato                     Standards Track                    [Page 13]

RFC 5215               Vorbis RTP Payload Format             August 2008


       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |V=2|P|X|  CC   |M|     PT      |             xxxx              |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                             xxxxx                             |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |           synchronization source (SSRC) identifier            |
      +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
      |            contributing source (CSRC) identifiers             |
      |                              ...                              |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                      Ident                    | 0 | 2 |      1|
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            length             |            Comment           ..
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ..                           Comment                           ..
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ..                           Comment                            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                         Figure 8: Comment Packet

   The 2-byte length field is necessary since this packet could be
   fragmented.

5.  Frame Packetization

   Each RTP payload contains either one Vorbis packet fragment or an
   integer number of complete Vorbis packets (up to a maximum of 15
   packets, since the number of packets is defined by a 4-bit value).

   Any Vorbis data packet that is less than path MTU SHOULD be bundled
   in the RTP payload with as many Vorbis packets as will fit, up to a
   maximum of 15, except when such bundling would exceed an
   application's desired transmission latency.  Path MTU is detailed in
   [RFC1191] and [RFC1981].

   A fragmented packet has a zero in the last four bits of the payload
   header.  The first fragment will set the Fragment type to 1.  Each
   fragment after the first will set the Fragment type to 2 in the
   payload header.  The consecutive fragments MUST be sent without any
   other payload being sent between the first and the last fragment.
   The RTP payload containing the last fragment of the Vorbis packet
   will have the Fragment type set to 3.  To maintain the correct
   sequence for fragmented packet reception, the timestamp field of
   fragmented packets MUST be the same as the first packet sent, with



Barbato                     Standards Track                    [Page 14]

RFC 5215               Vorbis RTP Payload Format             August 2008


   the sequence number incremented as normal for the subsequent RTP
   payloads; this will affect the RTCP jitter measurement.  The length
   field shows the fragment length.

5.1.  Example Fragmented Vorbis Packet

   Here is an example of a fragmented Vorbis packet split over three RTP
   payloads.  Each of them contains the standard RTP headers as well as
   the 4-octet Vorbis headers.

      Packet 1:

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |V=2|P|X|  CC   |M|     PT      |           1000                |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                            12345                              |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |           synchronization source (SSRC) identifier            |
      +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
      |            contributing source (CSRC) identifiers             |
      |                              ...                              |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       Ident                   | 1 | 0 |      0|
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |             length            |            vorbis data       ..
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ..                        vorbis data                           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

              Figure 9: Example Fragmented Packet (Packet 1)

   In this payload, the initial sequence number is 1000 and the
   timestamp is 12345.  The Fragment type is set to 1, the number of
   packets field is set to 0, and as the payload is raw Vorbis data, the
   VDT field is set to 0.













Barbato                     Standards Track                    [Page 15]

RFC 5215               Vorbis RTP Payload Format             August 2008


      Packet 2:

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |V=2|P|X|  CC   |M|     PT      |           1001                |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                             12345                             |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |           synchronization source (SSRC) identifier            |
      +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
      |            contributing source (CSRC) identifiers             |
      |                              ...                              |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       Ident                   | 2 | 0 |      0|
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |             length            |          vorbis data         ..
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ..                        vorbis data                           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

              Figure 10: Example Fragmented Packet (Packet 2)

   The Fragment type field is set to 2, and the number of packets field
   is set to 0.  For large Vorbis fragments, there can be several of
   these types of payloads.  The maximum packet size SHOULD be no
   greater than the path MTU, including all RTP and payload headers.
   The sequence number has been incremented by one, but the timestamp
   field remains the same as the initial payload.





















Barbato                     Standards Track                    [Page 16]

RFC 5215               Vorbis RTP Payload Format             August 2008


      Packet 3:

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |V=2|P|X|  CC   |M|     PT      |           1002                |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                             12345                             |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |           synchronization source (SSRC) identifier            |
      +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
      |            contributing source (CSRC) identifiers             |
      |                              ...                              |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                      Ident                    | 3 | 0 |      0|
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |             length            |          vorbis data         ..
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ..                        vorbis data                           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

              Figure 11: Example Fragmented Packet (Packet 3)

   This is the last Vorbis fragment payload.  The Fragment type is set
   to 3 and the packet count remains set to 0.  As in the previous
   payloads, the timestamp remains set to the first payload timestamp in
   the sequence and the sequence number has been incremented.

5.2.  Packet Loss

   As there is no error correction within the Vorbis stream, packet loss
   will result in a loss of signal.  Packet loss is more of an issue for
   fragmented Vorbis packets as the client will have to cope with the
   handling of the Fragment Type.  In case of loss of fragments, the
   client MUST discard all the remaining Vorbis fragments and decode the
   incomplete packet.  If we use the fragmented Vorbis packet example
   above and the first RTP payload is lost, the client MUST detect that
   the next RTP payload has the packet count field set to 0 and the
   Fragment type 2 and MUST drop it.  The next RTP payload, which is the
   final fragmented packet, MUST be dropped in the same manner.  If the
   missing RTP payload is the last, the two fragments received will be
   kept and the incomplete Vorbis packet decoded.

   Loss of any of the Configuration fragment will result in the loss of
   the full Configuration packet with the result detailed in the Loss of
   Configuration Headers (Section 3.3) section.




Barbato                     Standards Track                    [Page 17]

RFC 5215               Vorbis RTP Payload Format             August 2008


6.  IANA Considerations

   Type name:  audio

   Subtype name:  vorbis

   Required parameters:

      rate:  indicates the RTP timestamp clock rate as described in RTP
         Profile for Audio and Video Conferences with Minimal Control
         [RFC3551].

      channels:  indicates the number of audio channels as described in
         RTP Profile for Audio and Video Conferences with Minimal
         Control [RFC3551].

      configuration:  the base64 [RFC4648] representation of the Packed
         Headers (Section 3.2.1).

   Encoding considerations:

      This media type is framed and contains binary data.

   Security considerations:

      See Section 10 of RFC 5215.

   Interoperability considerations:

      None

   Published specification:

      RFC 5215

      Ogg Vorbis I specification: Codec setup and packet decode.
      Available from the Xiph website, http://xiph.org/

   Applications which use this media type:

      Audio streaming and conferencing tools

   Additional information:

      None






Barbato                     Standards Track                    [Page 18]

RFC 5215               Vorbis RTP Payload Format             August 2008


   Person & email address to contact for further information:

      Luca Barbato: <lu_zero@gentoo.org>
      IETF Audio/Video Transport Working Group

   Intended usage:

      COMMON

   Restriction on usage:

      This media type depends on RTP framing, hence is only defined for
      transfer via RTP [RFC3550].

   Author:

      Luca Barbato

   Change controller:

      IETF AVT Working Group delegated from the IESG

6.1.  Packed Headers IANA Considerations

   The following IANA considerations refers to the split configuration
   Packed Headers (Section 3.2.1) used within RFC 5215.

   Type name:  audio

   Subtype name:  vorbis-config

   Required parameters:

      None

   Optional parameters:

      None

   Encoding considerations:

      This media type contains binary data.

   Security considerations:

      See Section 10 of RFC 5215.





Barbato                     Standards Track                    [Page 19]

RFC 5215               Vorbis RTP Payload Format             August 2008


   Interoperability considerations:

      None

   Published specification:

      RFC 5215

   Applications which use this media type:

      Vorbis encoded audio, configuration data

   Additional information:

      None

   Person & email address to contact for further information:

      Luca Barbato: <lu_zero@gentoo.org>
      IETF Audio/Video Transport Working Group

   Intended usage:  COMMON

   Restriction on usage:

      This media type doesn't depend on the transport.

   Author:

      Luca Barbato

   Change controller:

      IETF AVT Working Group delegated from the IESG

7.  SDP Related Considerations

   The following paragraphs define the mapping of the parameters
   described in the IANA considerations section and their usage in the
   Offer/Answer Model [RFC3264].  In order to be forward compatible, the
   implementation MUST ignore unknown parameters.

7.1.  Mapping Media Type Parameters into SDP

   The information carried in the Media Type specification has a
   specific mapping to fields in the Session Description Protocol (SDP)
   [RFC4566], which is commonly used to describe RTP sessions.  When SDP
   is used to specify sessions, the mapping are as follows:



Barbato                     Standards Track                    [Page 20]

RFC 5215               Vorbis RTP Payload Format             August 2008


   o  The type name ("audio") goes in SDP "m=" as the media name.

   o  The subtype name ("vorbis") goes in SDP "a=rtpmap" as the encoding
      name.

   o  The parameter "rate" also goes in "a=rtpmap" as the clock rate.

   o  The parameter "channels" also goes in "a=rtpmap" as the channel
      count.

   o  The mandated parameters "configuration" MUST be included in the
      SDP "a=fmtp" attribute.

   If the stream comprises chained Vorbis files and all of them are
   known in advance, the Configuration Packet for each file SHOULD be
   passed to the client using the configuration attribute.

   The port value is specified by the server application bound to the
   address specified in the c= line.  The channel count value specified
   in the rtpmap attribute SHOULD match the current Vorbis stream or
   should be considered the maximum number of channels to be expected.
   The timestamp clock rate MUST be a multiple of the sample rate; a
   different payload number MUST be used if the clock rate changes.  The
   Configuration payload delivers the exact information, thus the SDP
   information SHOULD be considered a hint.  An example is found below.

7.1.1.  SDP Example

   The following example shows a basic SDP single stream.  The first
   configuration packet is inside the SDP; other configurations could be
   fetched at any time from the URIs provided.  The following base64
   [RFC4648] configuration string is folded in this example due to RFC
   line length limitations.

      c=IN IP4 192.0.2.1

      m=audio RTP/AVP 98

      a=rtpmap:98 vorbis/44100/2

      a=fmtp:98 configuration=AAAAAZ2f4g9NAh4aAXZvcmJpcwA...;

   Note that the payload format (encoding) names are commonly shown in
   uppercase.  Media Type subtypes are commonly shown in lowercase.
   These names are case-insensitive in both places.  Similarly,
   parameter names are case-insensitive both in Media Type types and in
   the default mapping to the SDP a=fmtp attribute.  The a=fmtp line is




Barbato                     Standards Track                    [Page 21]

RFC 5215               Vorbis RTP Payload Format             August 2008


   a single line, even if it is shown as multiple lines in this document
   for clarity.

7.2.  Usage with the SDP Offer/Answer Model

   There are no negotiable parameters.  All of them are declarative.

8.  Congestion Control

   The general congestion control considerations for transporting RTP
   data apply to Vorbis audio over RTP as well.  See the RTP
   specification [RFC3550] and any applicable RTP profile (e.g.,
   [RFC3551]).  Audio data can be encoded using a range of different bit
   rates, so it is possible to adapt network bandwidth by adjusting the
   encoder bit rate in real time or by having multiple copies of content
   encoded at different bit rates.

9.  Example

   The following example shows a common usage pattern that MAY be
   applied in such a situation.  The main scope of this section is to
   explain better usage of the transmission vectors.

9.1.  Stream Radio

   This is one of the most common situations: there is one single server
   streaming content in multicast, and the clients may start a session
   at a random time.  The content itself could be a mix of a live stream
   (as the webjockey's voice) and stored streams (as the music she
   plays).

   In this situation, we don't know in advance how many codebooks we
   will use.  The clients can join anytime and users expect to start
   listening to the content in a short time.

   Upon joining, the client will receive the current Configuration
   necessary to decode the current stream inside the SDP so that the
   decoding will start immediately after.

   When the streamed content changes, the new Configuration is sent in-
   band before the actual stream, and the Configuration that has to be
   sent inside the SDP is updated.  Since the in-band method is
   unreliable, an out-of-band fallback is provided.

   The client may choose to fetch the Configuration from the alternate
   source as soon as it discovers a Configuration packet got lost in-
   band, or use selective retransmission [RFC3611] if the server
   supports this feature.



Barbato                     Standards Track                    [Page 22]

RFC 5215               Vorbis RTP Payload Format             August 2008


   A server-side optimization would be to keep a hash list of the
   Configurations per session, which avoids packing all of them and
   sending the same Configuration with different Ident tags.

   A client-side optimization would be to keep a tag list of the
   Configurations per session and not process configuration packets that
   are already known.

10.  Security Considerations

   RTP packets using this payload format are subject to the security
   considerations discussed in the RTP specification [RFC3550], the
   base64 specification [RFC4648], and the URI Generic syntax
   specification [RFC3986].  Among other considerations, this implies
   that the confidentiality of the media stream is achieved by using
   encryption.  Because the data compression used with this payload
   format is applied end-to-end, encryption may be performed on the
   compressed data.

11.  Copying Conditions

   The authors agree to grant third parties the irrevocable right to
   copy, use, and distribute the work, with or without modification, in
   any medium, without royalty, provided that, unless separate
   permission is granted, redistributed modified works do not contain
   misleading author, version, name of work, or endorsement information.

12.  Acknowledgments

   This document is a continuation of the following documents:

   Moffitt, J., "RTP Payload Format for Vorbis Encoded Audio", February
   2001.

   Kerr, R., "RTP Payload Format for Vorbis Encoded Audio", December
   2004.

   The Media Type declaration is a continuation of the following
   document:

   Short, B., "The audio/rtp-vorbis MIME Type", January 2008.

   Thanks to the AVT, Vorbis Communities / Xiph.Org Foundation including
   Steve Casner, Aaron Colwell, Ross Finlayson, Fluendo, Ramon Garcia,
   Pascal Hennequin, Ralph Giles, Tor-Einar Jarnbjo, Colin Law, John
   Lazzaro, Jack Moffitt, Christopher Montgomery, Colin Perkins, Barry
   Short, Mike Smith, Phil Kerr, Michael Sparks, Magnus Westerlund,
   David Barrett, Silvia Pfeiffer, Stefan Ehmann, Gianni Ceccarelli, and



Barbato                     Standards Track                    [Page 23]

RFC 5215               Vorbis RTP Payload Format             August 2008


   Alessandro Salvatori.  Thanks to the LScube Group, in particular
   Federico Ridolfo, Francesco Varano, Giampaolo Mancini, Dario
   Gallucci, and Juan Carlos De Martin.

13.  References

13.1.  Normative References

   [RFC1191]          Mogul, J. and S. Deering, "Path MTU discovery",
                      RFC 1191, November 1990.

   [RFC1981]          McCann, J., Deering, S., and J. Mogul, "Path MTU
                      Discovery for IP version 6", RFC 1981,
                      August 1996.

   [RFC2119]          Bradner, S., "Key words for use in RFCs to
                      Indicate Requirement Levels", BCP 14, RFC 2119,
                      March 1997.

   [RFC3264]          Rosenberg, J. and H. Schulzrinne, "An Offer/Answer
                      Model with Session Description Protocol (SDP)",
                      RFC 3264, June 2002.

   [RFC3550]          Schulzrinne, H., Casner, S., Frederick, R., and V.
                      Jacobson, "RTP: A Transport Protocol for Real-Time
                      Applications", STD 64, RFC 3550, July 2003.

   [RFC3551]          Schulzrinne, H. and S. Casner, "RTP Profile for
                      Audio and Video Conferences with Minimal Control",
                      STD 65, RFC 3551, July 2003.

   [RFC3986]          Berners-Lee, T., Fielding, R., and L. Masinter,
                      "Uniform Resource Identifier (URI): Generic
                      Syntax", STD 66, RFC 3986, January 2005.

   [RFC4566]          Handley, M., Jacobson, V., and C. Perkins, "SDP:
                      Session Description Protocol", RFC 4566,
                      July 2006.

   [RFC4648]          Josefsson, S., "The Base16, Base32, and Base64
                      Data Encodings", RFC 4648, October 2006.

   [VORBIS-SPEC-REF]  "Ogg Vorbis I specification:  Codec setup and
                      packet decode.  Available from the Xiph website,
                      http://xiph.org/vorbis/doc/Vorbis_I_spec.html".






Barbato                     Standards Track                    [Page 24]

RFC 5215               Vorbis RTP Payload Format             August 2008


13.2.  Informative References

   [LIBVORBIS]        "libvorbis: Available from the dedicated website,
                      http://vorbis.com/".

   [RFC3533]          Pfeiffer, S., "The Ogg Encapsulation Format
                      Version 0", RFC 3533, May 2003.

   [RFC3611]          Friedman, T., Caceres, R., and A. Clark, "RTP
                      Control Protocol Extended Reports (RTCP XR)",
                      RFC 3611, November 2003.

   [RFC4588]          Rey, J., Leon, D., Miyazaki, A., Varsa, V., and R.
                      Hakenberg, "RTP Retransmission Payload Format",
                      RFC 4588, July 2006.

Author's Address

   Luca Barbato
   Xiph.Org Foundation

   EMail: lu_zero@gentoo.org
   URI:   http://xiph.org/




























Barbato                     Standards Track                    [Page 25]

RFC 5215               Vorbis RTP Payload Format             August 2008


Full Copyright Statement

   Copyright (C) The IETF Trust (2008).

   This document is subject to the rights, licenses and restrictions
   contained in BCP 78, and except as set forth therein, the authors
   retain all their rights.

   This document and the information contained herein are provided on an
   "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND
   THE INTERNET ENGINEERING TASK FORCE DISCLAIM 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.

Intellectual Property

   The IETF takes no position regarding the validity or scope of any
   Intellectual Property Rights or other rights that might be claimed to
   pertain to the implementation or use of the technology described in
   this document or the extent to which any license under such rights
   might or might not be available; nor does it represent that it has
   made any independent effort to identify any such rights.  Information
   on the procedures with respect to rights in RFC documents can be
   found in BCP 78 and BCP 79.

   Copies of IPR disclosures made to the IETF Secretariat and any
   assurances of licenses to be made available, or the result of an
   attempt made to obtain a general license or permission for the use of
   such proprietary rights by implementers or users of this
   specification can be obtained from the IETF on-line IPR repository at
   http://www.ietf.org/ipr.

   The IETF invites any interested party to bring to its attention any
   copyrights, patents or patent applications, or other proprietary
   rights that may cover technology that may be required to implement
   this standard.  Please address the information to the IETF at
   ietf-ipr@ietf.org.












Barbato                     Standards Track                    [Page 26]

