draft-ietf-avt-rtp-vorbis-08.xml 53.4 KB
Newer Older
ivo's avatar
ivo committed
1 2
<?xml version="1.0"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
lu_zero's avatar
lu_zero committed
3
<?rfc toc="yes" ?>
ivo's avatar
ivo committed
4 5
<?rfc compact="yes" ?>
<?rfc rfcedstyle="yes" ?>
lu_zero's avatar
lu_zero committed
6

ivo's avatar
ivo committed
7
<rfc ipr="full3978" docName="draft-ietf-avt-rtp-vorbis-08">
lu_zero's avatar
lu_zero committed
8 9

<front>
ivo's avatar
ivo committed
10
<title>RTP Payload Format for Vorbis Encoded Audio</title>
lu_zero's avatar
lu_zero committed
11 12

<author initials="L" surname="Barbato" fullname="Luca Barbato">
ivo's avatar
ivo committed
13
<organization abbrev="Xiph">Xiph.Org Foundation</organization>
lu_zero's avatar
lu_zero committed
14 15
<address>
<email>lu_zero@gentoo.org</email>
ivo's avatar
ivo committed
16
<uri>http://xiph.org/</uri>
lu_zero's avatar
lu_zero committed
17 18 19
</address>
</author>

20
<date day="28" month="Oct" year="2007" />
lu_zero's avatar
lu_zero committed
21 22 23 24 25 26 27 28 29 30

<area>General</area>
<workgroup>AVT Working Group</workgroup>
<keyword>I-D</keyword>

<keyword>Internet-Draft</keyword>
<keyword>Vorbis</keyword>
<keyword>RTP</keyword>

<abstract>
lu_zero's avatar
lu_zero committed
31

lu_zero's avatar
lu_zero committed
32
<t>
lu_zero's avatar
lu_zero committed
33 34 35 36
This document describes an RTP payload format for transporting Vorbis encoded
audio. It details the RTP encapsulation mechanism for raw Vorbis data and 
details the delivery mechanisms for the decoder probability model, referred to
as a codebook and other setup information.
lu_zero's avatar
lu_zero committed
37 38 39
</t>

<t>
lu_zero's avatar
lu_zero committed
40 41
Also included within this memo are media type registrations, and the details
necessary for the use of Vorbis with the Session Description Protocol (SDP).
lu_zero's avatar
lu_zero committed
42 43 44 45 46 47
</t>

</abstract>

<note title="Editors Note">
<t>
lu_zero's avatar
lu_zero committed
48 49
All references to RFC XXXX are to be replaced by references to the RFC number
of this memo, when published.
lu_zero's avatar
lu_zero committed
50 51 52 53 54 55 56 57 58 59 60 61 62 63
</t>
</note>

</front>

<middle>

<section anchor="Introduction" title="Introduction">

<t>
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 bitrates. At the high 
quality/bitrate end of the scale (CD or DAT rate stereo, 16/24 bits), it 
64
is in the same league as MPEG-4 AAC.
65
Vorbis is also intended for lower and higher sample rates (from 
lu_zero's avatar
lu_zero committed
66 67 68 69 70 71
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).
</t>

<t>
lu_zero's avatar
lu_zero committed
72 73 74 75
Vorbis encoded audio is generally encapsulated within an Ogg format bitstream
<xref target="rfc3533"></xref>, 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.
lu_zero's avatar
lu_zero committed
76 77
</t>

ivo's avatar
ivo committed
78
<section anchor="Terminology" title="Conformance and Document Conventions">
lu_zero's avatar
lu_zero committed
79

ivo's avatar
ivo committed
80 81 82
<t>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, <xref target="RFC2119"/> and indicate requirement levels for compliant implementations.  Requirements apply to all implementations unless otherwise stated.</t>
<t>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.</t>
<t>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".</t>
lu_zero's avatar
lu_zero committed
83 84 85 86 87 88 89

</section>
</section>

<section anchor="Payload Format" title="Payload Format">

<t>
lu_zero's avatar
lu_zero committed
90 91 92 93 94 95
For RTP based transport of Vorbis encoded audio the standard RTP header is
followed by a 4 octets payload header, then the payload data. The payload
headers are used to associate the Vorbis data with its associated decoding
codebooks as well as indicating 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
96
data, an RTP payload MUST contain just one of them at a time.
lu_zero's avatar
lu_zero committed
97 98 99 100 101
</t>

<section anchor="RTP Header" title="RTP Header">

<t>
lu_zero's avatar
lu_zero committed
102 103 104
The format of the RTP header is specified in <xref target="rfc3550"></xref>
and shown in Figure <xref target="RTP Header Figure"/>.  This payload format
uses the fields of the header in a manner consistent with that specification.
lu_zero's avatar
lu_zero committed
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
</t>

<t>
<figure anchor="RTP Header Figure" title="RTP Header">
<artwork><![CDATA[
    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             |
   |                              ...                              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>
</t>

<t>
lu_zero's avatar
lu_zero committed
127 128 129 130
The RTP header begins with an octet of fields (V, P, X, and CC) to support
specialized RTP uses (see <xref target="rfc3550"></xref> and 
<xref target="rfc3551"></xref> for details). For Vorbis RTP, the following
values are used.
lu_zero's avatar
lu_zero committed
131 132 133 134 135
</t>

<t>
Version (V): 2 bits</t>
<t>
lu_zero's avatar
lu_zero committed
136 137
This field identifies the version of RTP. The version used by this
specification is two (2).
lu_zero's avatar
lu_zero committed
138 139 140 141 142
</t>

<t>
Padding (P): 1 bit</t>
<t>
lu_zero's avatar
lu_zero committed
143 144
Padding MAY be used with this payload format according to section 5.1 of
<xref target="rfc3550"></xref>.
lu_zero's avatar
lu_zero committed
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
</t>

<t>
Extension (X): 1 bit</t>
<t>
The Extension bit is used in accordance with <xref target="rfc3550"></xref>.
</t>

<t>
CSRC count (CC): 4 bits</t>
<t>
The CSRC count is used in accordance with <xref target="rfc3550"></xref>.
</t>

<t>
Marker (M): 1 bit</t>
<t>
lu_zero's avatar
lu_zero committed
162 163
Set to zero.  Audio silence suppression not used.  This conforms to section 4.1
of <xref target="vorbis-spec-ref"></xref>.
lu_zero's avatar
lu_zero committed
164 165 166 167 168
</t>

<t>
Payload Type (PT): 7 bits</t>
<t>
lu_zero's avatar
lu_zero committed
169 170 171
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 which
designates the payload as Vorbis.
lu_zero's avatar
lu_zero committed
172 173 174 175 176
</t>

<t>
Sequence number: 16 bits</t>
<t>
lu_zero's avatar
lu_zero committed
177 178 179
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 packet sequence. This
field is detailed further in <xref target="rfc3550"></xref>.
lu_zero's avatar
lu_zero committed
180 181 182 183 184
</t>

<t>
Timestamp: 32 bits</t>
<t>
lu_zero's avatar
lu_zero committed
185
A timestamp representing the sampling time of the first sample of the first
186
Vorbis packet in the RTP payload. The clock frequency MUST be set to the sample
187
rate of the encoded audio data and is conveyed out-of-band (e.g. as an SDP parameter).
lu_zero's avatar
lu_zero committed
188 189 190 191 192
</t>

<t>
SSRC/CSRC identifiers: </t>
<t>
lu_zero's avatar
lu_zero committed
193 194
These two fields, 32 bits each with one SSRC field and a maximum of 16 CSRC
fields, are as defined in <xref target="rfc3550">
lu_zero's avatar
lu_zero committed
195 196 197 198 199 200 201 202
</xref>.  
</t>

</section>

<section anchor="Payload Header" title="Payload Header">

<t>
lu_zero's avatar
lu_zero committed
203 204 205
The 4 octets following the RTP Header section are the Payload Header. This
header is split into a number of bitfields detailing the format of the
following payload data packets.
lu_zero's avatar
lu_zero committed
206 207 208 209 210 211 212 213 214 215 216 217 218 219 220
</t>

<figure anchor="Payload Header Figure" title="Payload Header">
<artwork><![CDATA[
    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.|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>

<t>
Ident: 24 bits</t>
<t>
lu_zero's avatar
lu_zero committed
221 222
This 24 bit field is used to associate the Vorbis data to a decoding
Configuration. It is stored as network byte order integer.
lu_zero's avatar
lu_zero committed
223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240
</t>

<t>
Fragment type (F): 2 bits</t>
<t>
This field is set according to the following list
</t>
<vspace blankLines="1" />
<list style="empty">
<t>      0 = Not Fragmented</t>
<t>      1 = Start Fragment</t>
<t>      2 = Continuation Fragment</t>
<t>      3 = End Fragment</t>
</list>

<t>
Vorbis Data Type (VDT): 2 bits</t>
<t>
lu_zero's avatar
lu_zero committed
241
This field specifies the kind of Vorbis data stored in this RTP packet. There
242
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)
lu_zero's avatar
lu_zero committed
243 244 245 246 247 248 249 250 251 252
</t>

<vspace blankLines="1" />
<list style="empty">
<t>      0 = Raw Vorbis payload</t>
<t>      1 = Vorbis Packed Configuration payload</t>
<t>      2 = Legacy Vorbis Comment payload</t>
<t>      3 = Reserved</t>
</list>

253
<t> The packets with a VDT of value 3 MUST be ignored </t>
lu_zero's avatar
lu_zero committed
254 255

<t>
lu_zero's avatar
lu_zero committed
256 257
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
258
payload contains fragmented data the number of packets MUST be set to 0.
lu_zero's avatar
lu_zero committed
259 260 261 262 263 264 265
</t>

</section>

<section anchor="Payload Data" title="Payload Data">

<t>
lu_zero's avatar
lu_zero committed
266 267 268 269 270 271
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
<xref target="libvorbis"></xref> 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
lu_zero's avatar
lu_zero committed
272
sufficiently small so that after adding the RTP and payload headers, the
lu_zero's avatar
lu_zero committed
273
complete RTP packet is smaller than the path MTU.
lu_zero's avatar
lu_zero committed
274 275 276 277 278 279 280 281 282 283 284 285 286
</t>

<figure anchor="Payload Data Figure" title="Payload Data Header">
<artwork><![CDATA[
    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     ..
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>

<t>
lu_zero's avatar
lu_zero committed
287 288
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, followed by the
lu_zero's avatar
lu_zero committed
289
raw Vorbis data padded to the nearest byte boundary, as explained by the <xref target="vorbis-spec-ref">vorbis specification</xref>. The length value is stored
lu_zero's avatar
lu_zero committed
290
as network byte order integer.
lu_zero's avatar
lu_zero committed
291 292 293
</t>

<t>
lu_zero's avatar
lu_zero committed
294 295 296
For payloads which 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.
lu_zero's avatar
lu_zero committed
297 298 299
</t>

<t>
lu_zero's avatar
lu_zero committed
300
The Vorbis packet length header is the length of the Vorbis data block only and
301
does not include the length field.
lu_zero's avatar
lu_zero committed
302 303 304
</t>

<t>
lu_zero's avatar
lu_zero committed
305
The payload packing of the Vorbis data packets MUST follow the guidelines
306 307
set-out in <xref target="rfc3551"></xref> where the oldest Vorbis packet occurs
immediately after the RTP packet header. Subsequent Vorbis packets, if any, MUST
lu_zero's avatar
lu_zero committed
308
follow in temporal order.
lu_zero's avatar
lu_zero committed
309 310 311
</t>

<t>
lu_zero's avatar
lu_zero committed
312 313
Channel mapping of the audio is in accordance with the
<xref target="vorbis-spec-ref">Vorbis I Specification</xref>.
lu_zero's avatar
lu_zero committed
314 315 316 317 318 319 320
</t>

</section>

<section anchor="Example RTP Packet" title="Example RTP Packet">

<t>
321
Here is an example RTP payload containing two Vorbis packets.
lu_zero's avatar
lu_zero committed
322 323
</t>

lu_zero's avatar
lu_zero committed
324
<figure anchor="Example Raw Vorbis Packet" title="Example Raw Vorbis Packet">
lu_zero's avatar
lu_zero committed
325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340
<artwork><![CDATA[
    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 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
lu_zero's avatar
lu_zero committed
341
   |            length             |          vorbis data         ..
lu_zero's avatar
lu_zero committed
342 343 344 345 346
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   ..                        vorbis data                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |            length             |   next vorbis packet data    ..
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
lu_zero's avatar
lu_zero committed
347
   ..                        vorbis data                          ..
lu_zero's avatar
lu_zero committed
348
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
lu_zero's avatar
lu_zero committed
349 350
   ..               vorbis data                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
lu_zero's avatar
lu_zero committed
351 352 353 354
]]></artwork>
</figure>

<t>
lu_zero's avatar
lu_zero committed
355 356 357 358 359
The payload data section of the RTP packet begins with the 24 bit Ident field
followed by the one octet bitfield 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.
lu_zero's avatar
lu_zero committed
360 361 362 363 364 365 366 367 368 369 370 371
</t>

</section>
</section>



<section anchor="Configuration Headers" title="Configuration Headers">

<t>
Unlike other mainstream audio codecs Vorbis has no statically 
configured probability model. Instead, it packs all entropy decoding 
lu_zero's avatar
lu_zero committed
372 373 374
configuration, Vector Quantization and Huffman models into a data block
that must be transmitted to the decoder along with the compressed data.
A decoder also requires information detailing the number of audio 
lu_zero's avatar
lu_zero committed
375 376 377 378 379 380 381 382 383 384 385 386
channels, bitrates and similar information to configure itself for a 
particular compressed data stream. These two blocks of information are 
often referred to collectively as the "codebooks" for a Vorbis stream,
and are nominally included as special "header" packets at the start 
of the compressed data. In addition,
the <xref target="vorbis-spec-ref">Vorbis I specification</xref>
requires the presence of a comment header packet which gives simple
metadata about the stream, but this information is not required for 
decoding the frame sequence.
</t>

<t>
lu_zero's avatar
lu_zero committed
387 388
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,
lu_zero's avatar
lu_zero committed
389 390 391 392 393 394 395 396
which is often used over unreliable transports.
</t>

<t>
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 is detailed below. SDP 
lu_zero's avatar
lu_zero committed
397 398 399
delivery is typically used to set up an initial state for the client 
application. The changes may be due to different codebooks as well as 
different bitrates of the stream.
lu_zero's avatar
lu_zero committed
400 401 402
</t>

<t>
lu_zero's avatar
lu_zero committed
403
The delivery vectors in use can be specified by an SDP attribute to indicate the
lu_zero's avatar
lu_zero committed
404 405 406 407 408
method and the optional URI where the Vorbis
<xref target="Packed Configuration">Packed Configuration</xref> Packets could
be fetched. Different delivery methods MAY be advertised for the same session.
The in-band Configuration delivery SHOULD be considered as baseline,
out-of-band delivery methods that don't use RTP will not be described in this
409
document. For non chained streams, the recommended Configuration delivery
lu_zero's avatar
lu_zero committed
410
method is inline the <xref target="Packed Configuration">Packed Configuration</xref> in the SDP as explained in the <xref target="Mapping Media Type Parameters into SDP"> IANA considerations</xref>.
lu_zero's avatar
lu_zero committed
411 412 413
</t>

<t>
lu_zero's avatar
lu_zero committed
414 415 416 417 418 419
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 and if the client detects a change in the Ident value and
does not have this information it MUST NOT decode the raw Vorbis data
associated until it fetches the correct Configuration.
lu_zero's avatar
lu_zero committed
420 421 422 423 424
</t>

<section anchor="In-band Header Transmission" title="In-band Header Transmission">

<t>
lu_zero's avatar
lu_zero committed
425 426 427
The <xref target="Packed Configuration">Packed Configuration</xref> 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
428
<xref target="rfc4588">re-transmission of</xref> the configuration headers.
429
The RTP timestamp value MUST reflect the transmission time of the next data packet.
lu_zero's avatar
lu_zero committed
430 431 432 433 434
</t>

<section anchor="Packed Configuration" title="Packed Configuration">

<t>
lu_zero's avatar
lu_zero committed
435
A Vorbis Packed Configuration is indicated with the Vorbis Data Type field set
436
to 1. Of the three headers defined in the
lu_zero's avatar
lu_zero committed
437
<xref target="vorbis-spec-ref">Vorbis I specification</xref>, the
lu_zero's avatar
Clarify  
lu_zero committed
438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464
Identification and the Setup MUST be packed as they are, while the comment
header MAY be replaced with a dummy one.</t>
<t>
The packed configuration follows a generic way to store Xiph codec
configurations: 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), the headers immediately follow the list of length fields.
The size of the last header is implicit.</t>
<t>
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 flag
and the following 7 used to store the value.
The first N bit are to be taken, where N is number of bits needed to represent
the value, taken modulo 7, and stored in the first byte.
If there are more bits, the flag bit is set to 1 and the subsequent 7bit 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. In order to decode it is enough to
iterate over the bytes until the flag bit set to 0, for every byte the data is
added to the accumulated value multiplied by 128.</t>
<t>
The headers are packed in the same order they are present in ogg:
Identification, Comment, Setup.</t>

<t>
The 2 byte length tag defines the length of the packed headers as the sum of
the Configuration, Comment and Setup lengths.</t>
lu_zero's avatar
lu_zero committed
465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480

<figure anchor="Packed Configuration Figure" title="Packed Configuration Figure">
<artwork><![CDATA[
    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             |
   |                              ...                              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
481
   |                      Ident                    | 1 | 0 |      0|
lu_zero's avatar
lu_zero committed
482
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
483 484 485
   |           length              | n. of headers |    length1    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    length2    |                  Identification              ..
lu_zero's avatar
lu_zero committed
486 487 488 489 490 491 492
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   ..                        Identification                       ..
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   ..                        Identification                       ..
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   ..                        Identification                       ..
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
493 494 495 496 497 498 499 500 501
   ..               Identification                 |    Comment   ..
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   ..                            Comment                          ..
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   ..                            Comment                          ..
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   ..                            Comment                          ..
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   ..           Comment            |             Setup            ..
lu_zero's avatar
lu_zero committed
502 503 504
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   ..                            Setup                            ..
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
505
   ..                            Setup                            ..
lu_zero's avatar
lu_zero committed
506 507 508 509
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>

lu_zero's avatar
lu_zero committed
510 511 512
<t>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 since the
packet bears the full Packed configuration, the number of packet is set to 1.</t>
lu_zero's avatar
lu_zero committed
513 514 515 516 517 518
</section>
</section>

<section anchor="Out of Band Transmission" title="Out of Band Transmission">

<t>
lu_zero's avatar
lu_zero committed
519 520 521 522
This section, as stated above, does not cover all the possible out-of-band
delivery methods since they rely on different protocols and are linked to
specific applications. The following packet definition SHOULD be used in
out-of-band delivery and MUST be used when Configuration is inlined in the SDP.
lu_zero's avatar
lu_zero committed
523 524 525 526 527
</t>

<section anchor="Packed Headers" title="Packed Headers"> 

<t>
lu_zero's avatar
lu_zero committed
528 529 530 531
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
532
starts with a 32 bit (network byte ordered) count field which details the number of
lu_zero's avatar
lu_zero committed
533 534
packed headers that are contained in the bundle. Next is the Packed header
payload for each chained Vorbis stream.
lu_zero's avatar
lu_zero committed
535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555
</t>

<figure anchor="Packed Headers Overview Figure" title="Packed Headers Overview">
<artwork><![CDATA[
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Number of packed headers                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          Packed header                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          Packed header                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>

<figure anchor="Packed Headers Detail Figure" title="Packed Headers Detail">
<artwork><![CDATA[
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
556
   |                   Ident                       |    length    ..
557
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
558
   ..              | n. of headers |    length1    |    length2   ..
lu_zero's avatar
lu_zero committed
559
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
560
   ..              |             Identification Header            ..
lu_zero's avatar
lu_zero committed
561
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
562
   .................................................................
lu_zero's avatar
lu_zero committed
563
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
564
   ..              |         Comment Header                       ..
565 566 567
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   .................................................................
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
568
   ..                        Comment Header                        |
569
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
lu_zero's avatar
lu_zero committed
570 571
   |                          Setup Header                        ..
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
572 573
   .................................................................
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
lu_zero's avatar
lu_zero committed
574 575 576 577 578
   ..                         Setup Header                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>
<t>
579 580 581
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.
lu_zero's avatar
lu_zero committed
582 583 584 585 586
</t>
</section>

</section>

lu_zero's avatar
lu_zero committed
587
<section anchor="Loss of Configuration Headers" title="Loss of Configuration Headers">
lu_zero's avatar
lu_zero committed
588 589

<t>
lu_zero's avatar
lu_zero committed
590
Unlike the loss of raw Vorbis payload data, loss of a configuration header
lu_zero's avatar
lu_zero committed
591
lead to a situation where it will not be possible to successfully decode the
lu_zero's avatar
lu_zero committed
592
stream. Implementations MAY try to recover from error requesting again the missing Configuration, the baseline reaction SHOULD be either reset or end the connection.
lu_zero's avatar
lu_zero committed
593 594 595 596 597 598 599 600 601
</t>

</section>

</section>

<section anchor="Comment Headers" title="Comment Headers">

<t>
lu_zero's avatar
lu_zero committed
602 603 604 605 606
With the Vorbis Data Type flag set to 2, this indicates that the packet contain
the comment metadata, such as artist name, track title and so on. These
metadata messages are not intended to be fully descriptive but to offer basic
track/song information. Clients MAY ignore it completely. The details on the
format of the comments can be found in the <xref target="vorbis-spec-ref">Vorbis documentation</xref>.
lu_zero's avatar
lu_zero committed
607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633
</t>
<figure anchor="Comment Packet Figure" title="Comment Packet">
<artwork><![CDATA[
    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                            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>

lu_zero's avatar
lu_zero committed
634 635 636
<t>
The 2 bytes length field is necessary since this packet could be fragmented.
</t>
lu_zero's avatar
lu_zero committed
637 638 639 640 641

</section>
<section anchor="Frame Packetization" title="Frame Packetization">

<t>
642
Each RTP payload contains either one Vorbis packet fragment, or an integer
lu_zero's avatar
lu_zero committed
643 644
number of complete Vorbis packets (up to a maximum of 15 packets, since the
number of packets is defined by a 4 bit value).
lu_zero's avatar
lu_zero committed
645 646 647
</t>

<t>
lu_zero's avatar
lu_zero committed
648
Any Vorbis data packet that is less than path MTU SHOULD be bundled in the RTP
649
payload with as many Vorbis packets as will fit, up to a maximum of 15, except
lu_zero's avatar
lu_zero committed
650
when such bundling would exceed an application's desired transmission latency.
lu_zero's avatar
lu_zero committed
651
Path MTU is detailed in <xref target="rfc1191"></xref> and <xref target="rfc1981"></xref>.
lu_zero's avatar
lu_zero committed
652 653 654
</t>

<t>
lu_zero's avatar
lu_zero committed
655 656
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
657 658 659 660 661 662 663 664
first will set the Fragment type to 2 in the payload header. The consecutive
fragments MUST be sent without any other payloads 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 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.
lu_zero's avatar
lu_zero committed
665 666 667 668 669
</t>

<section anchor="Example Fragmented Vorbis Packet" title="Example Fragmented Vorbis Packet">

<t>
670 671
Here is an example fragmented Vorbis packet split over three RTP payloads.
Each of them contains the standard RTP headers as well as the 4 octets Vorbis
lu_zero's avatar
lu_zero committed
672
headers.
lu_zero's avatar
lu_zero committed
673 674 675 676 677 678 679 680 681 682 683
</t>

<figure anchor="Example Fragmented Packet (Packet 1)" title="Example Fragmented Packet (Packet 1)">
<artwork><![CDATA[
   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                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
lu_zero's avatar
lu_zero committed
684
   |                            12345                              |
lu_zero's avatar
lu_zero committed
685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           synchronization source (SSRC) identifier            |
   +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
   |            contributing source (CSRC) identifiers             |
   |                              ...                              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Ident                   | 1 | 0 |      0|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |             length            |            vorbis data       ..
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   ..                        vorbis data                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>

<t>
702
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
lu_zero's avatar
lu_zero committed
703
the payload is raw Vorbis data the VDT field is set to 0.
lu_zero's avatar
lu_zero committed
704 705 706 707 708 709 710 711 712 713 714
</t>

<figure anchor="Example Fragmented Packet (Packet 2)" title="Example Fragmented Packet (Packet 2)">
<artwork><![CDATA[
   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                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
lu_zero's avatar
lu_zero committed
715
   |                             12345                             |
lu_zero's avatar
lu_zero committed
716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           synchronization source (SSRC) identifier            |
   +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
   |            contributing source (CSRC) identifiers             |
   |                              ...                              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Ident                   | 2 | 0 |      0|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |             length            |          vorbis data         ..
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   ..                        vorbis data                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>

<t>
lu_zero's avatar
lu_zero committed
733
The Fragment type field is set to 2 and the number of packets field is set to 0.
734 735
For large Vorbis fragments there can be several of this type of payloads.
The maximum packet size SHOULD be no greater than the path MTU,
lu_zero's avatar
lu_zero committed
736
including all RTP and payload headers. The sequence number has been incremented
737
by one but the timestamp field remains the same as the initial payload.
lu_zero's avatar
lu_zero committed
738 739 740 741 742 743 744 745 746 747 748
</t>

<figure anchor="Example Fragmented Packet (Packet 3)" title="Example Fragmented Packet (Packet 3)">
<artwork><![CDATA[
   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                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
lu_zero's avatar
lu_zero committed
749
   |                             12345                             |
lu_zero's avatar
lu_zero committed
750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           synchronization source (SSRC) identifier            |
   +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
   |            contributing source (CSRC) identifiers             |
   |                              ...                              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Ident                    | 3 | 0 |      0|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |             length            |          vorbis data         ..
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   ..                        vorbis data                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>

<t>
767 768 769 770
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.
lu_zero's avatar
lu_zero committed
771 772 773 774 775 776
</t>
</section>

<section anchor="Packet Loss" title="Packet Loss">

<t>
lu_zero's avatar
lu_zero committed
777 778 779 780
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
781
remaining Vorbis fragments and decode the incomplete packet. If we use the
782 783
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
784
to 0 and the Fragment type 2 and MUST drop it.
lu_zero's avatar
lu_zero committed
785 786 787 788
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 received two fragments will be
kept and the incomplete Vorbis packet decoded.
lu_zero's avatar
lu_zero committed
789 790 791
</t>

<t>
lu_zero's avatar
lu_zero committed
792 793
Loss of any of the Configuration fragment will result in the loss of the full
Configuration packet with the result detailed in the <xref target="Loss of Configuration Headers">Loss of Configuration Headers</xref> section.
lu_zero's avatar
lu_zero committed
794 795 796 797 798 799 800
</t>

</section>
</section>
<section anchor="IANA Considerations" title="IANA Considerations"> 

<vspace blankLines="1" />
lu_zero's avatar
lu_zero committed
801
<list style="hanging">
lu_zero's avatar
lu_zero committed
802
<t hangText="Type name:"> audio </t>
lu_zero's avatar
lu_zero committed
803 804
<vspace blankLines="1" />

lu_zero's avatar
lu_zero committed
805
<t hangText="Subtype name:"> vorbis </t>
lu_zero's avatar
lu_zero committed
806 807
<vspace blankLines="1" />

lu_zero's avatar
lu_zero committed
808
<t hangText="Required parameters:">
lu_zero's avatar
lu_zero committed
809 810 811

<vspace blankLines="1" />

812
<list style="hanging">
lu_zero's avatar
lu_zero committed
813
<t hangText="rate:"> indicates the RTP timestamp clock rate as described in <xref target="rfc3551">RTP Profile for Audio and Video Conferences with Minimal Control.</xref>
814 815 816
</t>
<vspace blankLines="1" />

lu_zero's avatar
lu_zero committed
817
<t hangText="channels:"> indicates the number of audio channels as described in <xref target="rfc3551">RTP Profile for Audio and Video Conferences with Minimal Control.</xref>
818 819 820 821
</t>

<vspace blankLines="1" />

lu_zero's avatar
lu_zero committed
822
<t hangText="delivery-method:"> indicates the delivery methods in use, the possible values are: inline, in_band, out_band. The parameter MAY be included multiple time, followed by the configuration or configuration-uri parameter associated.
lu_zero's avatar
lu_zero committed
823 824 825 826
</t>

<vspace blankLines="1" />

lu_zero's avatar
lu_zero committed
827
<t hangText="configuration:"> the <xref target="rfc3548">base64</xref> representation of the <xref target="Packed Headers">Packed Headers</xref>. It MUST follow the associated delivery-method parameter ("inline").
lu_zero's avatar
lu_zero committed
828 829 830 831 832 833
</t>
</list>
</t>

<vspace blankLines="1" />

lu_zero's avatar
lu_zero committed
834
<t hangText="Optional parameters:">
lu_zero's avatar
lu_zero committed
835 836 837 838

<vspace blankLines="1" />

<list style="hanging">
lu_zero's avatar
lu_zero committed
839 840
<t hangText="configuration-uri:"> the <xref target="rfc3986">URI</xref> of
the configuration headers in case of out of band transmission.
841
In the form of "scheme://path/to/resource/", depending on the specific
lu_zero's avatar
lu_zero committed
842 843
method, a single configuration packet could be retrived by its Ident number, or
multiple packets could be aggregated in a single stream. 
lu_zero's avatar
lu_zero committed
844 845
Non hierarchical protocols MAY point to a resource using their specific
syntax.
lu_zero's avatar
lu_zero committed
846
</t>
lu_zero's avatar
lu_zero committed
847 848 849 850 851 852 853 854 855 856 857 858
</list>
</t>

<vspace blankLines="1" />

<t hangText="Encoding considerations:">
<vspace blankLines="1" />
This media type is framed and contains binary data.
</t>

<vspace blankLines="1" />

lu_zero's avatar
lu_zero committed
859
<t hangText="Security considerations:">
lu_zero's avatar
lu_zero committed
860
<vspace blankLines="1" />
lu_zero's avatar
lu_zero committed
861
See Section 10 of RFC XXXX.</t>
lu_zero's avatar
lu_zero committed
862 863 864 865 866 867 868 869 870 871

<vspace blankLines="1" />
<t hangText="Interoperability considerations:">
<vspace blankLines="1" />
None</t>

<vspace blankLines="1" />
<t hangText="Published specification:">

<vspace blankLines="1" />
lu_zero's avatar
lu_zero committed
872
RFC XXXX [RFC Editor: please replace by the RFC number of  this memo, when published]
lu_zero's avatar
lu_zero committed
873
<vspace blankLines="1" />
ivo's avatar
ivo committed
874
Ogg Vorbis I specification: Codec setup and packet decode.  Available from the Xiph website, http://xiph.org
lu_zero's avatar
lu_zero committed
875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894
</t>

<vspace blankLines="1" />

<t hangText="Applications which use this media type:">
<vspace blankLines="1"/>
Audio streaming and conferencing tools </t>

<vspace blankLines="1" />

<t hangText="Additional information:">
<vspace blankLines="1" />
None </t>

<vspace blankLines="1" />

<t hangText="Person &amp; email address to contact for further information:">

<vspace blankLines="1" />

lu_zero's avatar
lu_zero committed
895 896
Luca Barbato: &lt;lu_zero@gentoo.org&gt;<br/>
IETF Audio/Video Transport Working Group
lu_zero's avatar
lu_zero committed
897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918

</t>

<vspace blankLines="1" />

<t hangText="Intended usage:">
<vspace blankLines="1" />
COMMON</t>

<vspace blankLines="1" />

<t hangText="Restriction on usage:">
<vspace blankLines="1" />
This media type depends on RTP framing, and hence is only defined for transfer via <xref target="rfc3550">RTP</xref></t>

<vspace blankLines="1" />

<t hangText="Author:">
<vspace blankLines="1"/>Luca Barbato</t>

<vspace blankLines="1" />

lu_zero's avatar
lu_zero committed
919 920
<t hangText="Change controller:">
<vspace blankLines="1"/>IETF AVT Working Group delegated from the IESG</t>
lu_zero's avatar
lu_zero committed
921 922 923

<vspace blankLines="1" />
</list>
lu_zero's avatar
lu_zero committed
924 925 926 927

<section anchor="Packed Headers IANA Considerations" title="Packed Headers IANA Considerations"> 

<t>
928
The following IANA considerations MUST only be applied to the <xref target="Packed Headers">Packed Headers</xref>.
lu_zero's avatar
lu_zero committed
929 930 931 932 933 934 935 936 937 938 939 940 941
</t>

<vspace blankLines="1" />

<list style="hanging">
<t hangText="Type name:"> audio </t>

<vspace blankLines="1" />

<t hangText="Subtype name:"> vorbis-config </t>

<vspace blankLines="1" />

lu_zero's avatar
lu_zero committed
942
<t hangText="Required parameters:">
lu_zero's avatar
lu_zero committed
943 944 945 946 947 948
<vspace blankLines="1" />
None
</t>

<vspace blankLines="1" />

lu_zero's avatar
lu_zero committed
949
<t hangText="Optional parameters:">
lu_zero's avatar
lu_zero committed
950 951 952 953 954 955 956 957 958 959 960 961 962
<vspace blankLines="1" />
None
</t>

<vspace blankLines="1" />

<t hangText="Encoding considerations:">
<vspace blankLines="1" />
This media type contains binary data.
</t>

<vspace blankLines="1" />

lu_zero's avatar
lu_zero committed
963
<t hangText="Security considerations:">
lu_zero's avatar
lu_zero committed
964
<vspace blankLines="1" />
lu_zero's avatar
lu_zero committed
965
See Section 10 of RFC XXXX.
lu_zero's avatar
lu_zero committed
966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033
</t>

<vspace blankLines="1" />

<t hangText="Interoperability considerations:">
<vspace blankLines="1" />
None
</t>

<vspace blankLines="1" />

<t hangText="Published specification:">
<vspace blankLines="1" />
RFC XXXX [RFC Editor: please replace by the RFC number of  this memo,
       when published]
</t>

<vspace blankLines="1" />

<t hangText="Applications which use this media type:">
<vspace blankLines="1" />
Vorbis encoded audio, configuration data.
</t>

<vspace blankLines="1" />

<t hangText="Additional information:"> 
<vspace blankLines="1" />
None
</t>

<vspace blankLines="1" />

<t hangText="Person &amp; email address to contact for further information:">
<vspace blankLines="1" />
Luca Barbato: &lt;lu_zero@gentoo.org&gt;
<vspace blankLines="0" />
IETF Audio/Video Transport Working Group
</t>

<vspace blankLines="1" />

<t hangText="Intended usage:">
COMMON
</t>

<vspace blankLines="1" />

<t hangText="Restriction on usage:">
<vspace blankLines="1" />
This media type doesn't depend on the transport.
</t>

<vspace blankLines="1" />

<t hangText="Author:">
<vspace blankLines="1" />
Luca Barbato</t>

<vspace blankLines="1" />

<t hangText="Change controller:">
<vspace blankLines="1" />
IETF AVT Working Group delegated from the IESG</t>
</list>

</section>

lu_zero's avatar
lu_zero committed
1034 1035 1036 1037
</section>

<section anchor="SDP related considerations" title="SDP related considerations">
<t>
1038
The following paragraphs define the mapping of the parameters described in the IANA considerations section and their usage in the <xref target="rfc3264">Offer/Answer Model</xref>.
lu_zero's avatar
lu_zero committed
1039
</t>
lu_zero's avatar
lu_zero committed
1040

lu_zero's avatar
lu_zero committed
1041
<section anchor="Mapping Media Type Parameters into SDP" title="Mapping Media Type Parameters into SDP"> 
lu_zero's avatar
lu_zero committed
1042 1043

<t>
1044
The information carried in the Media Type specification has a
lu_zero's avatar
lu_zero committed
1045 1046 1047
specific mapping to fields in the <xref target="rfc4566">Session Description
Protocol (SDP)</xref>, which is commonly used to describe RTP sessions.
When SDP is used to specify sessions the mapping are as follows:
lu_zero's avatar
lu_zero committed
1048 1049 1050 1051 1052
</t>

<vspace blankLines="1" />
<list style="symbols">

lu_zero's avatar
lu_zero committed
1053
<t>The type name ("audio") goes in SDP "m=" as the media name.</t>
lu_zero's avatar
lu_zero committed
1054 1055
<vspace blankLines="1" />

lu_zero's avatar
lu_zero committed
1056
<t>The subtype name ("vorbis") goes in SDP "a=rtpmap" as the encoding name.</t>
lu_zero's avatar
lu_zero committed
1057 1058 1059 1060 1061 1062 1063 1064
<vspace blankLines="1" />

<t>The parameter "rate" also goes in "a=rtpmap" as clock rate.</t>
<vspace blankLines="1" />

<t>The parameter "channels" also goes in "a=rtpmap" as channel count.</t>
<vspace blankLines="1" />

lu_zero's avatar
lu_zero committed
1065
<t>The mandated parameters "delivery-method" and "configuration" MUST be
lu_zero's avatar
lu_zero committed
1066
included in the SDP "a=fmtp" attribute.</t>
lu_zero's avatar
lu_zero committed
1067 1068
<vspace blankLines="1" />

lu_zero's avatar
lu_zero committed
1069
<t>The optional parameter "configuration-uri", when present, MUST be included
lu_zero's avatar
lu_zero committed
1070
in the SDP "a=fmtp" attribute and MUST follow the delivery-method that applies.</t>
lu_zero's avatar
lu_zero committed
1071 1072 1073 1074

</list>

<t>
lu_zero's avatar
lu_zero committed
1075 1076 1077
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.
lu_zero's avatar
lu_zero committed
1078 1079 1080
</t>

<t>
lu_zero's avatar
lu_zero committed
1081 1082 1083
The URI specified in the configuration-uri attribute MUST point to a location
where all of the Configuration Packets needed for the life of the session
reside.
lu_zero's avatar
lu_zero committed
1084 1085 1086
</t>

<t>
lu_zero's avatar
lu_zero committed
1087
The port value is specified by the server application bound to the address
lu_zero's avatar
lu_zero committed
1088
specified in the c= line. The bitrate value and channels specified in the
lu_zero's avatar
lu_zero committed
1089 1090
rtpmap attribute MUST match the Vorbis sample rate value.  An example is found
below.
lu_zero's avatar
lu_zero committed
1091 1092 1093
</t>

<section anchor="SDP Example" title="SDP Example">
lu_zero's avatar
lu_zero committed
1094
<t>The following example shows a basic SDP single stream. The first
1095 1096 1097 1098
configuration packet is inlined in the SDP, other configurations could be
fetched at any time from the URIs provided. The inline
<xref target="rfc3548">base64</xref> configuration string is folded in this
example due to RFC line length limitations.</t>
lu_zero's avatar
lu_zero committed
1099 1100

<list style="empty">
lu_zero's avatar
lu_zero committed
1101
<t>c=IN IP4 192.0.2.1</t>
lu_zero's avatar
lu_zero committed
1102 1103
<t>m=audio  RTP/AVP 98</t>
<t>a=rtpmap:98 vorbis/44100/2</t>
lu_zero's avatar
lu_zero committed
1104
<t>a=fmtp:98 delivery-method=inline; configuration=AAAAAZ2f4g9NAh4aAXZvcmJpcwA...; delivery-method=out_band; configuration-uri=rtsp://path/to/the/resource; delivery-method=out_band; configuration-uri=http://another/path/to/resource/;</t>
lu_zero's avatar
lu_zero committed
1105 1106 1107 1108 1109
</list>
</section>


<t>
lu_zero's avatar
lu_zero committed
1110
Note that the payload format (encoding) names are commonly shown in upper case.
lu_zero's avatar
lu_zero committed
1111
Media Type subtypes are commonly shown in lower case. These names are
lu_zero's avatar
lu_zero committed
1112
case-insensitive in both places.  Similarly, parameter names are
lu_zero's avatar
lu_zero committed
1113
case-insensitive both in Media Type types and in the default mapping to the SDP
lu_zero's avatar
lu_zero committed
1114 1115
a=fmtp attribute. The exception regarding case sensitivity is the
configuration-uri URI which MUST be regarded as being case sensitive. The
1116 1117
a=fmtp line is a single line even if it is shown as multiple lines in this
document for clarity.
lu_zero's avatar
lu_zero committed
1118 1119 1120 1121 1122 1123 1124
</t>

</section>

<section anchor="Usage with the SDP Offer/Answer Mode" title="Usage with the SDP Offer/Answer Model">

<t>
1125
The only parameter negotiable is the delivery method. All the others are
lu_zero's avatar
lu_zero committed
1126 1127 1128 1129 1130
declarative: the offer, as described in <xref target="rfc3264">An Offer/Answer
Model Session Description Protocol</xref>, may contain a large number of
delivery methods per single fmtp attribute, the answerer MUST remove every
delivery-method and configuration-uri not supported. All the parameters MUST
not be altered on answer otherwise.
lu_zero's avatar
lu_zero committed
1131 1132 1133 1134 1135 1136
</t>

</section>

</section>

1137
<section anchor="Example" title="Example">
lu_zero's avatar
lu_zero committed
1138 1139

<t>
1140 1141 1142
The following example shows a common usage pattern that MAY be applied in
such situation, the main scope of this section is to explain better usage
of the transmission vectors.
lu_zero's avatar
lu_zero committed
1143 1144 1145 1146
</t>

<section anchor="Stream Radio" title="Stream Radio">

lu_zero's avatar
lu_zero committed
1147 1148
<t>This is one of the most common situation: one single server streaming
content in multicast, the clients may start a session at random time. The
1149 1150
content itself could be a mix of live stream, as the webjockey's voice,
and stored streams as the music she plays.</t>
lu_zero's avatar
lu_zero committed
1151

lu_zero's avatar
lu_zero committed
1152 1153 1154
<t>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.</t>
lu_zero's avatar
lu_zero committed
1155

lu_zero's avatar
lu_zero committed
1156 1157 1158
<t>On join the client will receive the current Configuration necessary to
decode the current stream inlined in the SDP so that the decoding will start
immediately after.</t>
lu_zero's avatar
lu_zero committed
1159

lu_zero's avatar
lu_zero committed
1160
<t>When the streamed content changes the new Configuration is sent in-band
lu_zero's avatar
lu_zero committed
1161
before the actual stream and the Configuration that has to be sent inline in
lu_zero's avatar
lu_zero committed
1162 1163
the SDP updated. Since the in-band method is unreliable, an out of band
fallback is provided.</t>
lu_zero's avatar
lu_zero committed
1164

1165
<t>The client may choose to fetch the Configuration from the alternate source
lu_zero's avatar
lu_zero committed
1166
as soon as it discovers a Configuration packet got lost in-band or use
lu_zero's avatar
lu_zero committed
1167 1168
<xref target="RFC3611">selective retransmission</xref>, if the server supports
the feature.</t>
lu_zero's avatar
lu_zero committed
1169

lu_zero's avatar
lu_zero committed
1170 1171 1172
<t>A serverside optimization would be to keep an hash list of the
Configurations per session to avoid packing all of them and send the same
Configuration with different Ident tags</t>
lu_zero's avatar
lu_zero committed
1173

lu_zero's avatar
lu_zero committed
1174 1175
<t>A clientside optimization would be to keep a tag list of the Configurations
per session and don't process configuration packets already known.</t>
lu_zero's avatar
lu_zero committed
1176 1177 1178 1179 1180 1181

</section>
</section>

<section anchor="Security Considerations" title="Security Considerations"> 
<t>
lu_zero's avatar
lu_zero committed
1182 1183 1184 1185 1186 1187
RTP packets using this payload format are subject to the security 
considerations discussed in the 
<xref target="rfc3550">RTP specification</xref>, the
<xref target="rfc3548">base64 specification</xref> and the
<xref target="rfc3986">URI Generic syntax specification</xref>.
Among other considerations, this implies that the confidentiality of the
1188
media stream is archieved by using encryption. Because the data compression used
lu_zero's avatar
lu_zero committed
1189
with this payload format is applied end-to-end, encryption may be performed on
lu_zero's avatar
lu_zero committed
1190 1191 1192 1193
the compressed data. Additional care MAY be needed for delivery methods that
point to external resources, using secure protocols to fetch the configuration
payloads. Where the size of a data block is set, care MUST be taken to prevent
buffer overflows in the client applications.
lu_zero's avatar
lu_zero committed
1194 1195 1196
</t>

</section> 
lu_zero's avatar
lu_zero committed
1197 1198 1199 1200 1201 1202 1203
<section title="Copying Conditions">
  <t>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.</t>
</section>
lu_zero's avatar
lu_zero committed
1204 1205 1206
<section anchor="Acknowledgments" title="Acknowledgments"> 

<t>
lu_zero's avatar
lu_zero committed
1207
This document is a continuation of draft-moffitt-vorbis-rtp-00.txt and
1208
draft-kerr-avt-vorbis-rtp-04.txt.  The Media Type declaration is a
lu_zero's avatar
lu_zero committed
1209
continuation of draft-short-avt-rtp-vorbis-mime-00.txt.
lu_zero's avatar
lu_zero committed
1210 1211 1212
</t>

<t>
ivo's avatar
ivo committed
1213
Thanks to the AVT, Vorbis Communities / Xiph.Org Foundation including Steve Casner,
lu_zero's avatar
lu_zero committed
1214 1215
Aaron Colwell, Ross Finlayson, Fluendo, Ramon Garcia, Pascal Hennequin, Ralph
Giles, Tor-Einar Jarnbjo, Colin Law, John Lazzaro, Jack Moffitt, Christopher
lu_zero's avatar
lu_zero committed
1216
Montgomery, Colin Perkins, Barry Short, Mike Smith, Phil Kerr, Michael Sparks,
lu_zero's avatar
lu_zero committed
1217 1218
Magnus Westerlund, David Barrett, Silvia Pfeiffer, Stefan Ehmann, Alessandro
Salvatori. Politecnico di Torino (LS)³/IMG Group in particular Federico
1219
Ridolfo, Francesco Varano, Giampaolo Mancini, Dario Gallucci, Juan Carlos De Martin.
lu_zero's avatar
lu_zero committed
1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235
</t>

</section> 

</middle>

<back>

<references title="Normative References">

<reference anchor="rfc2119">
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels </title>
<author initials="S." surname="Bradner" fullname="Scott Bradner"></author>
</front>
<seriesInfo name="RFC" value="2119" />
ivo's avatar
ivo committed
1236
</reference>
lu_zero's avatar
lu_zero committed
1237 1238 1239 1240 1241 1242 1243 1244 1245

<reference anchor="rfc3550">
<front>
<title>RTP: A Transport Protocol for real-time applications</title>
<author initials="H." surname="Schulzrinne" fullname=""></author>
<author initials="S." surname="Casner" fullname=""></author>
<author initials="R." surname="Frederick" fullname=""></author>
<author initials="V." surname="Jacobson" fullname=""></author>
</front>
1246
<seriesInfo name="STD" value="64"/>
lu_zero's avatar
lu_zero committed
1247 1248 1249 1250 1251 1252 1253 1254 1255 1256
<seriesInfo name="RFC" value="3550" />
</reference> 

<reference anchor="rfc3551">
<front>
<title>RTP Profile for Audio and Video Conferences with Minimal Control.</title>
<author initials="H." surname="Schulzrinne" fullname=""></author>
<author initials="S." surname="Casner" fullname=""></author>
</front>
<date month="July" year="2003" />
1257
<seriesInfo name="STD" value="65"/>
lu_zero's avatar
lu_zero committed
1258 1259
<seriesInfo name="RFC" value="3551" />
</reference> 
lu_zero's avatar
lu_zero committed
1260

ivo's avatar
ivo committed
1261
<reference anchor="rfc3986">
lu_zero's avatar
lu_zero committed
1262
<front>
ivo's avatar
ivo committed
1263 1264
<title abbrev="URI Generic Syntax">Uniform Resource Identifier (URI): Generic Syntax</title>
<author initials="T." surname="Berners-Lee" fullname="Tim Berners-Lee">
lu_zero's avatar
lu_zero committed
1265
</author>
ivo's avatar
ivo committed
1266
<author initials="R." surname="Fielding" fullname="Roy T. Fielding">
lu_zero's avatar
lu_zero committed
1267
</author>
ivo's avatar
ivo committed
1268
<author initials="L." surname="Masinter" fullname="Larry Masinter">
lu_zero's avatar
lu_zero committed
1269 1270
</author>
</front>
ivo's avatar
ivo committed
1271
<date year="2005" month="January" />
1272
<seriesInfo name="STD" value="66"/>
ivo's avatar
ivo committed
1273
<seriesInfo name="RFC" value="3986" />
lu_zero's avatar
lu_zero committed
1274 1275
</reference>

ivo's avatar
ivo committed
1276
<reference anchor="rfc4566">
lu_zero's avatar
lu_zero committed
1277 1278
<front>
<title>SDP: Session Description Protocol</title>
ivo's avatar
ivo committed
1279
<author initials="M." surname="Handley" fullname="M. Handley">
lu_zero's avatar
lu_zero committed
1280
<organization /></author>
ivo's avatar
ivo committed
1281
<author initials="V." surname="Jacobson" fullname="V. Jacobson">
lu_zero's avatar
lu_zero committed
1282
<organization /></author>
ivo's avatar
ivo committed
1283
<author initials="C." surname="Perkins" fullname="C. Perkins">
lu_zero's avatar
lu_zero committed
1284
<organization /></author>
ivo's avatar
ivo committed
1285
<date year="2006" month="July" />
lu_zero's avatar
lu_zero committed
1286
</front>
ivo's avatar
ivo committed
1287 1288
<seriesInfo name="RFC" value="4566" />
<format type="TXT" octets="108820" target="ftp://ftp.isi.edu/in-notes/rfc4566.txt" />
lu_zero's avatar
lu_zero committed
1289 1290
</reference>

ivo's avatar
ivo committed
1291
<reference anchor="rfc1191">
lu_zero's avatar
lu_zero committed
1292
<front>
lu_zero's avatar
lu_zero committed
1293
<title>Path MTU discovery</title>
ivo's avatar
ivo committed
1294
<author initials="J." surname="Mogul" fullname="Jeffrey Mogul">
lu_zero's avatar
lu_zero committed
1295 1296 1297
<organization>Digital Equipment Corporation (DEC) , Western Research Laboratory</organization>
<address>
<email>mogul@decwrl.dec.com</email></address></author>
ivo's avatar
ivo committed
1298
<author initials="S." surname="Deering" fullname="Steve Deering">
lu_zero's avatar
lu_zero committed
1299 1300 1301
<organization>Xerox Palo Alto Research Center</organization>
<address>
<email>deering@xerox.com</email></address></author>
ivo's avatar
ivo committed
1302
<date year="1990" day="1" month="November" />
lu_zero's avatar
lu_zero committed
1303
</front>
ivo's avatar
ivo committed
1304 1305
<seriesInfo name="RFC" value="1191" />
<format type="TXT" octets="47936" target="ftp://ftp.isi.edu/in-notes/rfc1191.txt" />