Chris@1
|
1
|
Chris@1
|
2
|
Chris@1
|
3
|
Chris@1
|
4
|
Chris@1
|
5
|
Chris@1
|
6
|
Chris@1
|
7 Network Working Group L. Barbato
|
Chris@1
|
8 Request for Comments: 5215 Xiph
|
Chris@1
|
9 Category: Standards Track August 2008
|
Chris@1
|
10
|
Chris@1
|
11
|
Chris@1
|
12 RTP Payload Format for Vorbis Encoded Audio
|
Chris@1
|
13
|
Chris@1
|
14 Status of This Memo
|
Chris@1
|
15
|
Chris@1
|
16 This document specifies an Internet standards track protocol for the
|
Chris@1
|
17 Internet community, and requests discussion and suggestions for
|
Chris@1
|
18 improvements. Please refer to the current edition of the "Internet
|
Chris@1
|
19 Official Protocol Standards" (STD 1) for the standardization state
|
Chris@1
|
20 and status of this protocol. Distribution of this memo is unlimited.
|
Chris@1
|
21
|
Chris@1
|
22 Abstract
|
Chris@1
|
23
|
Chris@1
|
24 This document describes an RTP payload format for transporting Vorbis
|
Chris@1
|
25 encoded audio. It details the RTP encapsulation mechanism for raw
|
Chris@1
|
26 Vorbis data and the delivery mechanisms for the decoder probability
|
Chris@1
|
27 model (referred to as a codebook), as well as other setup
|
Chris@1
|
28 information.
|
Chris@1
|
29
|
Chris@1
|
30 Also included within this memo are media type registrations and the
|
Chris@1
|
31 details necessary for the use of Vorbis with the Session Description
|
Chris@1
|
32 Protocol (SDP).
|
Chris@1
|
33
|
Chris@1
|
34
|
Chris@1
|
35
|
Chris@1
|
36
|
Chris@1
|
37
|
Chris@1
|
38
|
Chris@1
|
39
|
Chris@1
|
40
|
Chris@1
|
41
|
Chris@1
|
42
|
Chris@1
|
43
|
Chris@1
|
44
|
Chris@1
|
45
|
Chris@1
|
46
|
Chris@1
|
47
|
Chris@1
|
48
|
Chris@1
|
49
|
Chris@1
|
50
|
Chris@1
|
51
|
Chris@1
|
52
|
Chris@1
|
53
|
Chris@1
|
54
|
Chris@1
|
55
|
Chris@1
|
56
|
Chris@1
|
57
|
Chris@1
|
58 Barbato Standards Track [Page 1]
|
Chris@1
|
59
|
Chris@1
|
60 RFC 5215 Vorbis RTP Payload Format August 2008
|
Chris@1
|
61
|
Chris@1
|
62
|
Chris@1
|
63 Table of Contents
|
Chris@1
|
64
|
Chris@1
|
65 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
|
Chris@1
|
66 1.1. Conformance and Document Conventions . . . . . . . . . . . 3
|
Chris@1
|
67 2. Payload Format . . . . . . . . . . . . . . . . . . . . . . . . 3
|
Chris@1
|
68 2.1. RTP Header . . . . . . . . . . . . . . . . . . . . . . . . 4
|
Chris@1
|
69 2.2. Payload Header . . . . . . . . . . . . . . . . . . . . . . 5
|
Chris@1
|
70 2.3. Payload Data . . . . . . . . . . . . . . . . . . . . . . . 6
|
Chris@1
|
71 2.4. Example RTP Packet . . . . . . . . . . . . . . . . . . . . 8
|
Chris@1
|
72 3. Configuration Headers . . . . . . . . . . . . . . . . . . . . 8
|
Chris@1
|
73 3.1. In-band Header Transmission . . . . . . . . . . . . . . . 9
|
Chris@1
|
74 3.1.1. Packed Configuration . . . . . . . . . . . . . . . . . 10
|
Chris@1
|
75 3.2. Out of Band Transmission . . . . . . . . . . . . . . . . . 12
|
Chris@1
|
76 3.2.1. Packed Headers . . . . . . . . . . . . . . . . . . . . 12
|
Chris@1
|
77 3.3. Loss of Configuration Headers . . . . . . . . . . . . . . 13
|
Chris@1
|
78 4. Comment Headers . . . . . . . . . . . . . . . . . . . . . . . 13
|
Chris@1
|
79 5. Frame Packetization . . . . . . . . . . . . . . . . . . . . . 14
|
Chris@1
|
80 5.1. Example Fragmented Vorbis Packet . . . . . . . . . . . . . 15
|
Chris@1
|
81 5.2. Packet Loss . . . . . . . . . . . . . . . . . . . . . . . 17
|
Chris@1
|
82 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 18
|
Chris@1
|
83 6.1. Packed Headers IANA Considerations . . . . . . . . . . . . 19
|
Chris@1
|
84 7. SDP Related Considerations . . . . . . . . . . . . . . . . . . 20
|
Chris@1
|
85 7.1. Mapping Media Type Parameters into SDP . . . . . . . . . . 20
|
Chris@1
|
86 7.1.1. SDP Example . . . . . . . . . . . . . . . . . . . . . 21
|
Chris@1
|
87 7.2. Usage with the SDP Offer/Answer Model . . . . . . . . . . 22
|
Chris@1
|
88 8. Congestion Control . . . . . . . . . . . . . . . . . . . . . . 22
|
Chris@1
|
89 9. Example . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
|
Chris@1
|
90 9.1. Stream Radio . . . . . . . . . . . . . . . . . . . . . . . 22
|
Chris@1
|
91 10. Security Considerations . . . . . . . . . . . . . . . . . . . 23
|
Chris@1
|
92 11. Copying Conditions . . . . . . . . . . . . . . . . . . . . . . 23
|
Chris@1
|
93 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 23
|
Chris@1
|
94 13. References . . . . . . . . . . . . . . . . . . . . . . . . . . 24
|
Chris@1
|
95 13.1. Normative References . . . . . . . . . . . . . . . . . . . 24
|
Chris@1
|
96 13.2. Informative References . . . . . . . . . . . . . . . . . . 25
|
Chris@1
|
97
|
Chris@1
|
98
|
Chris@1
|
99
|
Chris@1
|
100
|
Chris@1
|
101
|
Chris@1
|
102
|
Chris@1
|
103
|
Chris@1
|
104
|
Chris@1
|
105
|
Chris@1
|
106
|
Chris@1
|
107
|
Chris@1
|
108
|
Chris@1
|
109
|
Chris@1
|
110
|
Chris@1
|
111
|
Chris@1
|
112
|
Chris@1
|
113
|
Chris@1
|
114 Barbato Standards Track [Page 2]
|
Chris@1
|
115
|
Chris@1
|
116 RFC 5215 Vorbis RTP Payload Format August 2008
|
Chris@1
|
117
|
Chris@1
|
118
|
Chris@1
|
119 1. Introduction
|
Chris@1
|
120
|
Chris@1
|
121 Vorbis is a general purpose perceptual audio codec intended to allow
|
Chris@1
|
122 maximum encoder flexibility, thus allowing it to scale competitively
|
Chris@1
|
123 over an exceptionally wide range of bit rates. At the high quality/
|
Chris@1
|
124 bitrate end of the scale (CD or DAT rate stereo, 16/24 bits), it is
|
Chris@1
|
125 in the same league as MPEG-4 AAC. Vorbis is also intended for lower
|
Chris@1
|
126 and higher sample rates (from 8kHz telephony to 192kHz digital
|
Chris@1
|
127 masters) and a range of channel representations (monaural,
|
Chris@1
|
128 polyphonic, stereo, quadraphonic, 5.1, ambisonic, or up to 255
|
Chris@1
|
129 discrete channels).
|
Chris@1
|
130
|
Chris@1
|
131 Vorbis encoded audio is generally encapsulated within an Ogg format
|
Chris@1
|
132 bitstream [RFC3533], which provides framing and synchronization. For
|
Chris@1
|
133 the purposes of RTP transport, this layer is unnecessary, and so raw
|
Chris@1
|
134 Vorbis packets are used in the payload.
|
Chris@1
|
135
|
Chris@1
|
136 1.1. Conformance and Document Conventions
|
Chris@1
|
137
|
Chris@1
|
138 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
|
Chris@1
|
139 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
|
Chris@1
|
140 document are to be interpreted as described in BCP 14, [RFC2119] and
|
Chris@1
|
141 indicate requirement levels for compliant implementations.
|
Chris@1
|
142 Requirements apply to all implementations unless otherwise stated.
|
Chris@1
|
143
|
Chris@1
|
144 An implementation is a software module that supports one of the media
|
Chris@1
|
145 types defined in this document. Software modules may support
|
Chris@1
|
146 multiple media types, but conformance is considered individually for
|
Chris@1
|
147 each type.
|
Chris@1
|
148
|
Chris@1
|
149 Implementations that fail to satisfy one or more "MUST" requirements
|
Chris@1
|
150 are considered non-compliant. Implementations that satisfy all
|
Chris@1
|
151 "MUST" requirements, but fail to satisfy one or more "SHOULD"
|
Chris@1
|
152 requirements, are said to be "conditionally compliant". All other
|
Chris@1
|
153 implementations are "unconditionally compliant".
|
Chris@1
|
154
|
Chris@1
|
155 2. Payload Format
|
Chris@1
|
156
|
Chris@1
|
157 For RTP-based transport of Vorbis-encoded audio, the standard RTP
|
Chris@1
|
158 header is followed by a 4-octet payload header, and then the payload
|
Chris@1
|
159 data. The payload headers are used to associate the Vorbis data with
|
Chris@1
|
160 its associated decoding codebooks as well as indicate if the
|
Chris@1
|
161 following packet contains fragmented Vorbis data and/or the number of
|
Chris@1
|
162 whole Vorbis data frames. The payload data contains the raw Vorbis
|
Chris@1
|
163 bitstream information. There are 3 types of Vorbis data; an RTP
|
Chris@1
|
164 payload MUST contain just one of them at a time.
|
Chris@1
|
165
|
Chris@1
|
166
|
Chris@1
|
167
|
Chris@1
|
168
|
Chris@1
|
169
|
Chris@1
|
170 Barbato Standards Track [Page 3]
|
Chris@1
|
171
|
Chris@1
|
172 RFC 5215 Vorbis RTP Payload Format August 2008
|
Chris@1
|
173
|
Chris@1
|
174
|
Chris@1
|
175 2.1. RTP Header
|
Chris@1
|
176
|
Chris@1
|
177 The format of the RTP header is specified in [RFC3550] and shown in
|
Chris@1
|
178 Figure 1. This payload format uses the fields of the header in a
|
Chris@1
|
179 manner consistent with that specification.
|
Chris@1
|
180
|
Chris@1
|
181 0 1 2 3
|
Chris@1
|
182 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
|
Chris@1
|
183 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
184 |V=2|P|X| CC |M| PT | sequence number |
|
Chris@1
|
185 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
186 | timestamp |
|
Chris@1
|
187 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
188 | synchronization source (SSRC) identifier |
|
Chris@1
|
189 +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|
Chris@1
|
190 | contributing source (CSRC) identifiers |
|
Chris@1
|
191 | ... |
|
Chris@1
|
192 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
193
|
Chris@1
|
194 Figure 1: RTP Header
|
Chris@1
|
195
|
Chris@1
|
196 The RTP header begins with an octet of fields (V, P, X, and CC) to
|
Chris@1
|
197 support specialized RTP uses (see [RFC3550] and [RFC3551] for
|
Chris@1
|
198 details). For Vorbis RTP, the following values are used.
|
Chris@1
|
199
|
Chris@1
|
200 Version (V): 2 bits
|
Chris@1
|
201
|
Chris@1
|
202 This field identifies the version of RTP. The version used by this
|
Chris@1
|
203 specification is two (2).
|
Chris@1
|
204
|
Chris@1
|
205 Padding (P): 1 bit
|
Chris@1
|
206
|
Chris@1
|
207 Padding MAY be used with this payload format according to Section 5.1
|
Chris@1
|
208 of [RFC3550].
|
Chris@1
|
209
|
Chris@1
|
210 Extension (X): 1 bit
|
Chris@1
|
211
|
Chris@1
|
212 The Extension bit is used in accordance with [RFC3550].
|
Chris@1
|
213
|
Chris@1
|
214 CSRC count (CC): 4 bits
|
Chris@1
|
215
|
Chris@1
|
216 The CSRC count is used in accordance with [RFC3550].
|
Chris@1
|
217
|
Chris@1
|
218 Marker (M): 1 bit
|
Chris@1
|
219
|
Chris@1
|
220 Set to zero. Audio silence suppression is not used. This conforms
|
Chris@1
|
221 to Section 4.1 of [VORBIS-SPEC-REF].
|
Chris@1
|
222
|
Chris@1
|
223
|
Chris@1
|
224
|
Chris@1
|
225
|
Chris@1
|
226 Barbato Standards Track [Page 4]
|
Chris@1
|
227
|
Chris@1
|
228 RFC 5215 Vorbis RTP Payload Format August 2008
|
Chris@1
|
229
|
Chris@1
|
230
|
Chris@1
|
231 Payload Type (PT): 7 bits
|
Chris@1
|
232
|
Chris@1
|
233 An RTP profile for a class of applications is expected to assign a
|
Chris@1
|
234 payload type for this format, or a dynamically allocated payload type
|
Chris@1
|
235 SHOULD be chosen that designates the payload as Vorbis.
|
Chris@1
|
236
|
Chris@1
|
237 Sequence number: 16 bits
|
Chris@1
|
238
|
Chris@1
|
239 The sequence number increments by one for each RTP data packet sent,
|
Chris@1
|
240 and may be used by the receiver to detect packet loss and to restore
|
Chris@1
|
241 the packet sequence. This field is detailed further in [RFC3550].
|
Chris@1
|
242
|
Chris@1
|
243 Timestamp: 32 bits
|
Chris@1
|
244
|
Chris@1
|
245 A timestamp representing the sampling time of the first sample of the
|
Chris@1
|
246 first Vorbis packet in the RTP payload. The clock frequency MUST be
|
Chris@1
|
247 set to the sample rate of the encoded audio data and is conveyed out-
|
Chris@1
|
248 of-band (e.g., as an SDP parameter).
|
Chris@1
|
249
|
Chris@1
|
250 SSRC/CSRC identifiers:
|
Chris@1
|
251
|
Chris@1
|
252 These two fields, 32 bits each with one SSRC field and a maximum of
|
Chris@1
|
253 16 CSRC fields, are as defined in [RFC3550].
|
Chris@1
|
254
|
Chris@1
|
255 2.2. Payload Header
|
Chris@1
|
256
|
Chris@1
|
257 The 4 octets following the RTP Header section are the Payload Header.
|
Chris@1
|
258 This header is split into a number of bit fields detailing the format
|
Chris@1
|
259 of the following payload data packets.
|
Chris@1
|
260
|
Chris@1
|
261 0 1 2 3
|
Chris@1
|
262 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
|
Chris@1
|
263 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
264 | Ident | F |VDT|# pkts.|
|
Chris@1
|
265 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
266
|
Chris@1
|
267 Figure 2: Payload Header
|
Chris@1
|
268
|
Chris@1
|
269 Ident: 24 bits
|
Chris@1
|
270
|
Chris@1
|
271 This 24-bit field is used to associate the Vorbis data to a decoding
|
Chris@1
|
272 Configuration. It is stored as a network byte order integer.
|
Chris@1
|
273
|
Chris@1
|
274 Fragment type (F): 2 bits
|
Chris@1
|
275
|
Chris@1
|
276
|
Chris@1
|
277
|
Chris@1
|
278
|
Chris@1
|
279
|
Chris@1
|
280
|
Chris@1
|
281
|
Chris@1
|
282 Barbato Standards Track [Page 5]
|
Chris@1
|
283
|
Chris@1
|
284 RFC 5215 Vorbis RTP Payload Format August 2008
|
Chris@1
|
285
|
Chris@1
|
286
|
Chris@1
|
287 This field is set according to the following list:
|
Chris@1
|
288
|
Chris@1
|
289 0 = Not Fragmented
|
Chris@1
|
290
|
Chris@1
|
291 1 = Start Fragment
|
Chris@1
|
292
|
Chris@1
|
293 2 = Continuation Fragment
|
Chris@1
|
294
|
Chris@1
|
295 3 = End Fragment
|
Chris@1
|
296
|
Chris@1
|
297 Vorbis Data Type (VDT): 2 bits
|
Chris@1
|
298
|
Chris@1
|
299 This field specifies the kind of Vorbis data stored in this RTP
|
Chris@1
|
300 packet. There are currently three different types of Vorbis
|
Chris@1
|
301 payloads. Each packet MUST contain only a single type of Vorbis
|
Chris@1
|
302 packet (e.g., you must not aggregate configuration and comment
|
Chris@1
|
303 packets in the same RTP payload).
|
Chris@1
|
304
|
Chris@1
|
305 0 = Raw Vorbis payload
|
Chris@1
|
306
|
Chris@1
|
307 1 = Vorbis Packed Configuration payload
|
Chris@1
|
308
|
Chris@1
|
309 2 = Legacy Vorbis Comment payload
|
Chris@1
|
310
|
Chris@1
|
311 3 = Reserved
|
Chris@1
|
312
|
Chris@1
|
313 The packets with a VDT of value 3 MUST be ignored.
|
Chris@1
|
314
|
Chris@1
|
315 The last 4 bits represent the number of complete packets in this
|
Chris@1
|
316 payload. This provides for a maximum number of 15 Vorbis packets in
|
Chris@1
|
317 the payload. If the payload contains fragmented data, the number of
|
Chris@1
|
318 packets MUST be set to 0.
|
Chris@1
|
319
|
Chris@1
|
320 2.3. Payload Data
|
Chris@1
|
321
|
Chris@1
|
322 Raw Vorbis packets are currently unbounded in length; application
|
Chris@1
|
323 profiles will likely define a practical limit. Typical Vorbis packet
|
Chris@1
|
324 sizes range from very small (2-3 bytes) to quite large (8-12
|
Chris@1
|
325 kilobytes). The reference implementation [LIBVORBIS] typically
|
Chris@1
|
326 produces packets less than ~800 bytes, except for the setup header
|
Chris@1
|
327 packets, which are ~4-12 kilobytes. Within an RTP context, to avoid
|
Chris@1
|
328 fragmentation, the Vorbis data packet size SHOULD be kept
|
Chris@1
|
329 sufficiently small so that after adding the RTP and payload headers,
|
Chris@1
|
330 the complete RTP packet is smaller than the path MTU.
|
Chris@1
|
331
|
Chris@1
|
332
|
Chris@1
|
333
|
Chris@1
|
334
|
Chris@1
|
335
|
Chris@1
|
336
|
Chris@1
|
337
|
Chris@1
|
338 Barbato Standards Track [Page 6]
|
Chris@1
|
339
|
Chris@1
|
340 RFC 5215 Vorbis RTP Payload Format August 2008
|
Chris@1
|
341
|
Chris@1
|
342
|
Chris@1
|
343 0 1 2 3
|
Chris@1
|
344 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
|
Chris@1
|
345 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
346 | length | vorbis packet data ..
|
Chris@1
|
347 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
348
|
Chris@1
|
349 Figure 3: Payload Data Header
|
Chris@1
|
350
|
Chris@1
|
351 Each Vorbis payload packet starts with a two octet length header,
|
Chris@1
|
352 which is used to represent the size in bytes of the following data
|
Chris@1
|
353 payload, and is followed by the raw Vorbis data padded to the nearest
|
Chris@1
|
354 byte boundary, as explained by the Vorbis I Specification
|
Chris@1
|
355 [VORBIS-SPEC-REF]. The length value is stored as a network byte
|
Chris@1
|
356 order integer.
|
Chris@1
|
357
|
Chris@1
|
358 For payloads that consist of multiple Vorbis packets, the payload
|
Chris@1
|
359 data consists of the packet length followed by the packet data for
|
Chris@1
|
360 each of the Vorbis packets in the payload.
|
Chris@1
|
361
|
Chris@1
|
362 The Vorbis packet length header is the length of the Vorbis data
|
Chris@1
|
363 block only and does not include the length field.
|
Chris@1
|
364
|
Chris@1
|
365 The payload packing of the Vorbis data packets MUST follow the
|
Chris@1
|
366 guidelines set out in [RFC3551], where the oldest Vorbis packet
|
Chris@1
|
367 occurs immediately after the RTP packet header. Subsequent Vorbis
|
Chris@1
|
368 packets, if any, MUST follow in temporal order.
|
Chris@1
|
369
|
Chris@1
|
370 Audio channel mapping is in accordance with the Vorbis I
|
Chris@1
|
371 Specification [VORBIS-SPEC-REF].
|
Chris@1
|
372
|
Chris@1
|
373
|
Chris@1
|
374
|
Chris@1
|
375
|
Chris@1
|
376
|
Chris@1
|
377
|
Chris@1
|
378
|
Chris@1
|
379
|
Chris@1
|
380
|
Chris@1
|
381
|
Chris@1
|
382
|
Chris@1
|
383
|
Chris@1
|
384
|
Chris@1
|
385
|
Chris@1
|
386
|
Chris@1
|
387
|
Chris@1
|
388
|
Chris@1
|
389
|
Chris@1
|
390
|
Chris@1
|
391
|
Chris@1
|
392
|
Chris@1
|
393
|
Chris@1
|
394 Barbato Standards Track [Page 7]
|
Chris@1
|
395
|
Chris@1
|
396 RFC 5215 Vorbis RTP Payload Format August 2008
|
Chris@1
|
397
|
Chris@1
|
398
|
Chris@1
|
399 2.4. Example RTP Packet
|
Chris@1
|
400
|
Chris@1
|
401 Here is an example RTP payload containing two Vorbis packets.
|
Chris@1
|
402
|
Chris@1
|
403 0 1 2 3
|
Chris@1
|
404 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
|
Chris@1
|
405 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
406 | 2 |0|0| 0 |0| PT | sequence number |
|
Chris@1
|
407 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
408 | timestamp (in sample rate units) |
|
Chris@1
|
409 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
410 | synchronisation source (SSRC) identifier |
|
Chris@1
|
411 +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|
Chris@1
|
412 | contributing source (CSRC) identifiers |
|
Chris@1
|
413 | ... |
|
Chris@1
|
414 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
415 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
416 | Ident | 0 | 0 | 2 pks |
|
Chris@1
|
417 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
418 | length | vorbis data ..
|
Chris@1
|
419 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
420 .. vorbis data |
|
Chris@1
|
421 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
422 | length | next vorbis packet data ..
|
Chris@1
|
423 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
424 .. vorbis data ..
|
Chris@1
|
425 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
426 .. vorbis data |
|
Chris@1
|
427 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
428
|
Chris@1
|
429 Figure 4: Example Raw Vorbis Packet
|
Chris@1
|
430
|
Chris@1
|
431 The payload data section of the RTP packet begins with the 24-bit
|
Chris@1
|
432 Ident field followed by the one octet bit field header, which has the
|
Chris@1
|
433 number of Vorbis frames set to 2. Each of the Vorbis data frames is
|
Chris@1
|
434 prefixed by the two octets length field. The Packet Type and
|
Chris@1
|
435 Fragment Type are set to 0. The Configuration that will be used to
|
Chris@1
|
436 decode the packets is the one indexed by the ident value.
|
Chris@1
|
437
|
Chris@1
|
438 3. Configuration Headers
|
Chris@1
|
439
|
Chris@1
|
440 Unlike other mainstream audio codecs, Vorbis has no statically
|
Chris@1
|
441 configured probability model. Instead, it packs all entropy decoding
|
Chris@1
|
442 configuration, Vector Quantization and Huffman models into a data
|
Chris@1
|
443 block that must be transmitted to the decoder with the compressed
|
Chris@1
|
444 data. A decoder also requires information detailing the number of
|
Chris@1
|
445 audio channels, bitrates, and similar information to configure itself
|
Chris@1
|
446 for a particular compressed data stream. These two blocks of
|
Chris@1
|
447
|
Chris@1
|
448
|
Chris@1
|
449
|
Chris@1
|
450 Barbato Standards Track [Page 8]
|
Chris@1
|
451
|
Chris@1
|
452 RFC 5215 Vorbis RTP Payload Format August 2008
|
Chris@1
|
453
|
Chris@1
|
454
|
Chris@1
|
455 information are often referred to collectively as the "codebooks" for
|
Chris@1
|
456 a Vorbis stream, and are included as special "header" packets at the
|
Chris@1
|
457 start of the compressed data. In addition, the Vorbis I
|
Chris@1
|
458 specification [VORBIS-SPEC-REF] requires the presence of a comment
|
Chris@1
|
459 header packet that gives simple metadata about the stream, but this
|
Chris@1
|
460 information is not required for decoding the frame sequence.
|
Chris@1
|
461
|
Chris@1
|
462 Thus, these two codebook header packets must be received by the
|
Chris@1
|
463 decoder before any audio data can be interpreted. These requirements
|
Chris@1
|
464 pose problems in RTP, which is often used over unreliable transports.
|
Chris@1
|
465
|
Chris@1
|
466 Since this information must be transmitted reliably and, as the RTP
|
Chris@1
|
467 stream may change certain configuration data mid-session, there are
|
Chris@1
|
468 different methods for delivering this configuration data to a client,
|
Chris@1
|
469 both in-band and out-of-band, which are detailed below. In order to
|
Chris@1
|
470 set up an initial state for the client application, the configuration
|
Chris@1
|
471 MUST be conveyed via the signalling channel used to set up the
|
Chris@1
|
472 session. One example of such signalling is SDP [RFC4566] with the
|
Chris@1
|
473 Offer/Answer Model [RFC3264]. Changes to the configuration MAY be
|
Chris@1
|
474 communicated via a re-invite, conveying a new SDP, or sent in-band in
|
Chris@1
|
475 the RTP channel. Implementations MUST support an in-band delivery of
|
Chris@1
|
476 updated codebooks, and SHOULD support out-of-band codebook update
|
Chris@1
|
477 using a new SDP file. The changes may be due to different codebooks
|
Chris@1
|
478 as well as different bitrates of the RTP stream.
|
Chris@1
|
479
|
Chris@1
|
480 For non-chained streams, the recommended Configuration delivery
|
Chris@1
|
481 method is inside the Packed Configuration (Section 3.1.1) in the SDP
|
Chris@1
|
482 as explained the Mapping Media Type Parameters into SDP
|
Chris@1
|
483 (Section 7.1).
|
Chris@1
|
484
|
Chris@1
|
485 The 24-bit Ident field is used to map which Configuration will be
|
Chris@1
|
486 used to decode a packet. When the Ident field changes, it indicates
|
Chris@1
|
487 that a change in the stream has taken place. The client application
|
Chris@1
|
488 MUST have in advance the correct configuration. If the client
|
Chris@1
|
489 detects a change in the Ident value and does not have this
|
Chris@1
|
490 information, it MUST NOT decode the raw associated Vorbis data until
|
Chris@1
|
491 it fetches the correct Configuration.
|
Chris@1
|
492
|
Chris@1
|
493 3.1. In-band Header Transmission
|
Chris@1
|
494
|
Chris@1
|
495 The Packed Configuration (Section 3.1.1) Payload is sent in-band with
|
Chris@1
|
496 the packet type bits set to match the Vorbis Data Type. Clients MUST
|
Chris@1
|
497 be capable of dealing with fragmentation and periodic re-transmission
|
Chris@1
|
498 of [RFC4588] the configuration headers. The RTP timestamp value MUST
|
Chris@1
|
499 reflect the transmission time of the first data packet for which this
|
Chris@1
|
500 configuration applies.
|
Chris@1
|
501
|
Chris@1
|
502
|
Chris@1
|
503
|
Chris@1
|
504
|
Chris@1
|
505
|
Chris@1
|
506 Barbato Standards Track [Page 9]
|
Chris@1
|
507
|
Chris@1
|
508 RFC 5215 Vorbis RTP Payload Format August 2008
|
Chris@1
|
509
|
Chris@1
|
510
|
Chris@1
|
511 3.1.1. Packed Configuration
|
Chris@1
|
512
|
Chris@1
|
513 A Vorbis Packed Configuration is indicated with the Vorbis Data Type
|
Chris@1
|
514 field set to 1. Of the three headers defined in the Vorbis I
|
Chris@1
|
515 specification [VORBIS-SPEC-REF], the Identification and the Setup
|
Chris@1
|
516 MUST be packed as they are, while the Comment header MAY be replaced
|
Chris@1
|
517 with a dummy one.
|
Chris@1
|
518
|
Chris@1
|
519 The packed configuration stores Xiph codec configurations in a
|
Chris@1
|
520 generic way: the first field stores the number of the following
|
Chris@1
|
521 packets minus one (count field), the next ones represent the size of
|
Chris@1
|
522 the headers (length fields), and the headers immediately follow the
|
Chris@1
|
523 list of length fields. The size of the last header is implicit.
|
Chris@1
|
524
|
Chris@1
|
525 The count and the length fields are encoded using the following
|
Chris@1
|
526 logic: the data is in network byte order; every byte has the most
|
Chris@1
|
527 significant bit used as a flag, and the following 7 bits are used to
|
Chris@1
|
528 store the value. The first 7 most significant bits are stored in the
|
Chris@1
|
529 first byte. If there are remaining bits, the flag bit is set to 1
|
Chris@1
|
530 and the subsequent 7 bits are stored in the following byte. If there
|
Chris@1
|
531 are remaining bits, set the flag to 1 and the same procedure is
|
Chris@1
|
532 repeated. The ending byte has the flag bit set to 0. To decode,
|
Chris@1
|
533 simply iterate over the bytes until the flag bit is set to 0. For
|
Chris@1
|
534 every byte, the data is added to the accumulated value multiplied by
|
Chris@1
|
535 128.
|
Chris@1
|
536
|
Chris@1
|
537 The headers are packed in the same order as they are present in Ogg
|
Chris@1
|
538 [VORBIS-SPEC-REF]: Identification, Comment, Setup.
|
Chris@1
|
539
|
Chris@1
|
540 The 2 byte length tag defines the length of the packed headers as the
|
Chris@1
|
541 sum of the Configuration, Comment, and Setup lengths.
|
Chris@1
|
542
|
Chris@1
|
543
|
Chris@1
|
544
|
Chris@1
|
545
|
Chris@1
|
546
|
Chris@1
|
547
|
Chris@1
|
548
|
Chris@1
|
549
|
Chris@1
|
550
|
Chris@1
|
551
|
Chris@1
|
552
|
Chris@1
|
553
|
Chris@1
|
554
|
Chris@1
|
555
|
Chris@1
|
556
|
Chris@1
|
557
|
Chris@1
|
558
|
Chris@1
|
559
|
Chris@1
|
560
|
Chris@1
|
561
|
Chris@1
|
562 Barbato Standards Track [Page 10]
|
Chris@1
|
563
|
Chris@1
|
564 RFC 5215 Vorbis RTP Payload Format August 2008
|
Chris@1
|
565
|
Chris@1
|
566
|
Chris@1
|
567 0 1 2 3
|
Chris@1
|
568 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
|
Chris@1
|
569 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
570 |V=2|P|X| CC |M| PT | xxxx |
|
Chris@1
|
571 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
572 | xxxxx |
|
Chris@1
|
573 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
574 | synchronization source (SSRC) identifier |
|
Chris@1
|
575 +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|
Chris@1
|
576 | contributing source (CSRC) identifiers |
|
Chris@1
|
577 | ... |
|
Chris@1
|
578 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
579 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
580 | Ident | 0 | 1 | 1|
|
Chris@1
|
581 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
582 | length | n. of headers | length1 |
|
Chris@1
|
583 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
584 | length2 | Identification ..
|
Chris@1
|
585 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
586 .. Identification ..
|
Chris@1
|
587 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
588 .. Identification ..
|
Chris@1
|
589 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
590 .. Identification ..
|
Chris@1
|
591 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
592 .. Identification | Comment ..
|
Chris@1
|
593 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
594 .. Comment ..
|
Chris@1
|
595 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
596 .. Comment ..
|
Chris@1
|
597 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
598 .. Comment ..
|
Chris@1
|
599 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
600 .. Comment | Setup ..
|
Chris@1
|
601 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
602 .. Setup ..
|
Chris@1
|
603 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
604 .. Setup ..
|
Chris@1
|
605 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
606
|
Chris@1
|
607 Figure 5: Packed Configuration Figure
|
Chris@1
|
608
|
Chris@1
|
609 The Ident field is set with the value that will be used by the Raw
|
Chris@1
|
610 Payload Packets to address this Configuration. The Fragment type is
|
Chris@1
|
611 set to 0 because the packet bears the full Packed configuration. The
|
Chris@1
|
612 number of the packet is set to 1.
|
Chris@1
|
613
|
Chris@1
|
614
|
Chris@1
|
615
|
Chris@1
|
616
|
Chris@1
|
617
|
Chris@1
|
618 Barbato Standards Track [Page 11]
|
Chris@1
|
619
|
Chris@1
|
620 RFC 5215 Vorbis RTP Payload Format August 2008
|
Chris@1
|
621
|
Chris@1
|
622
|
Chris@1
|
623 3.2. Out of Band Transmission
|
Chris@1
|
624
|
Chris@1
|
625 The following packet definition MUST be used when Configuration is
|
Chris@1
|
626 inside in the SDP.
|
Chris@1
|
627
|
Chris@1
|
628 3.2.1. Packed Headers
|
Chris@1
|
629
|
Chris@1
|
630 As mentioned above, the RECOMMENDED delivery vector for Vorbis
|
Chris@1
|
631 configuration data is via a retrieval method that can be performed
|
Chris@1
|
632 using a reliable transport protocol. As the RTP headers are not
|
Chris@1
|
633 required for this method of delivery, the structure of the
|
Chris@1
|
634 configuration data is slightly different. The packed header starts
|
Chris@1
|
635 with a 32-bit (network-byte ordered) count field, which details the
|
Chris@1
|
636 number of packed headers that are contained in the bundle. The
|
Chris@1
|
637 following shows the Packed header payload for each chained Vorbis
|
Chris@1
|
638 stream.
|
Chris@1
|
639
|
Chris@1
|
640 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
641 | Number of packed headers |
|
Chris@1
|
642 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
643 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
644 | Packed header |
|
Chris@1
|
645 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
646 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
647 | Packed header |
|
Chris@1
|
648 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
649
|
Chris@1
|
650 Figure 6: Packed Headers Overview
|
Chris@1
|
651
|
Chris@1
|
652
|
Chris@1
|
653
|
Chris@1
|
654
|
Chris@1
|
655
|
Chris@1
|
656
|
Chris@1
|
657
|
Chris@1
|
658
|
Chris@1
|
659
|
Chris@1
|
660
|
Chris@1
|
661
|
Chris@1
|
662
|
Chris@1
|
663
|
Chris@1
|
664
|
Chris@1
|
665
|
Chris@1
|
666
|
Chris@1
|
667
|
Chris@1
|
668
|
Chris@1
|
669
|
Chris@1
|
670
|
Chris@1
|
671
|
Chris@1
|
672
|
Chris@1
|
673
|
Chris@1
|
674 Barbato Standards Track [Page 12]
|
Chris@1
|
675
|
Chris@1
|
676 RFC 5215 Vorbis RTP Payload Format August 2008
|
Chris@1
|
677
|
Chris@1
|
678
|
Chris@1
|
679 0 1 2 3
|
Chris@1
|
680 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
|
Chris@1
|
681 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
682 | Ident | length ..
|
Chris@1
|
683 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
684 .. | n. of headers | length1 | length2 ..
|
Chris@1
|
685 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
686 .. | Identification Header ..
|
Chris@1
|
687 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
688 .................................................................
|
Chris@1
|
689 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
690 .. | Comment Header ..
|
Chris@1
|
691 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
692 .................................................................
|
Chris@1
|
693 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
694 .. Comment Header |
|
Chris@1
|
695 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
696 | Setup Header ..
|
Chris@1
|
697 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
698 .................................................................
|
Chris@1
|
699 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
700 .. Setup Header |
|
Chris@1
|
701 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
702
|
Chris@1
|
703 Figure 7: Packed Headers Detail
|
Chris@1
|
704
|
Chris@1
|
705 The key difference between the in-band format and this one is that
|
Chris@1
|
706 there is no need for the payload header octet. In this figure, the
|
Chris@1
|
707 comment has a size bigger than 127 bytes.
|
Chris@1
|
708
|
Chris@1
|
709 3.3. Loss of Configuration Headers
|
Chris@1
|
710
|
Chris@1
|
711 Unlike the loss of raw Vorbis payload data, loss of a configuration
|
Chris@1
|
712 header leads to a situation where it will not be possible to
|
Chris@1
|
713 successfully decode the stream. Implementations MAY try to recover
|
Chris@1
|
714 from an error by requesting again the missing Configuration or, if
|
Chris@1
|
715 the delivery method is in-band, by buffering the payloads waiting for
|
Chris@1
|
716 the Configuration needed to decode them. The baseline reaction
|
Chris@1
|
717 SHOULD either be reset or end the RTP session.
|
Chris@1
|
718
|
Chris@1
|
719 4. Comment Headers
|
Chris@1
|
720
|
Chris@1
|
721 Vorbis Data Type flag set to 2 indicates that the packet contains the
|
Chris@1
|
722 comment metadata, such as artist name, track title, and so on. These
|
Chris@1
|
723 metadata messages are not intended to be fully descriptive but rather
|
Chris@1
|
724 to offer basic track/song information. Clients MAY ignore it
|
Chris@1
|
725 completely. The details on the format of the comments can be found
|
Chris@1
|
726 in the Vorbis I Specification [VORBIS-SPEC-REF].
|
Chris@1
|
727
|
Chris@1
|
728
|
Chris@1
|
729
|
Chris@1
|
730 Barbato Standards Track [Page 13]
|
Chris@1
|
731
|
Chris@1
|
732 RFC 5215 Vorbis RTP Payload Format August 2008
|
Chris@1
|
733
|
Chris@1
|
734
|
Chris@1
|
735 0 1 2 3
|
Chris@1
|
736 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
|
Chris@1
|
737 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
738 |V=2|P|X| CC |M| PT | xxxx |
|
Chris@1
|
739 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
740 | xxxxx |
|
Chris@1
|
741 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
742 | synchronization source (SSRC) identifier |
|
Chris@1
|
743 +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|
Chris@1
|
744 | contributing source (CSRC) identifiers |
|
Chris@1
|
745 | ... |
|
Chris@1
|
746 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
747 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
748 | Ident | 0 | 2 | 1|
|
Chris@1
|
749 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
750 | length | Comment ..
|
Chris@1
|
751 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
752 .. Comment ..
|
Chris@1
|
753 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
754 .. Comment |
|
Chris@1
|
755 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
756
|
Chris@1
|
757 Figure 8: Comment Packet
|
Chris@1
|
758
|
Chris@1
|
759 The 2-byte length field is necessary since this packet could be
|
Chris@1
|
760 fragmented.
|
Chris@1
|
761
|
Chris@1
|
762 5. Frame Packetization
|
Chris@1
|
763
|
Chris@1
|
764 Each RTP payload contains either one Vorbis packet fragment or an
|
Chris@1
|
765 integer number of complete Vorbis packets (up to a maximum of 15
|
Chris@1
|
766 packets, since the number of packets is defined by a 4-bit value).
|
Chris@1
|
767
|
Chris@1
|
768 Any Vorbis data packet that is less than path MTU SHOULD be bundled
|
Chris@1
|
769 in the RTP payload with as many Vorbis packets as will fit, up to a
|
Chris@1
|
770 maximum of 15, except when such bundling would exceed an
|
Chris@1
|
771 application's desired transmission latency. Path MTU is detailed in
|
Chris@1
|
772 [RFC1191] and [RFC1981].
|
Chris@1
|
773
|
Chris@1
|
774 A fragmented packet has a zero in the last four bits of the payload
|
Chris@1
|
775 header. The first fragment will set the Fragment type to 1. Each
|
Chris@1
|
776 fragment after the first will set the Fragment type to 2 in the
|
Chris@1
|
777 payload header. The consecutive fragments MUST be sent without any
|
Chris@1
|
778 other payload being sent between the first and the last fragment.
|
Chris@1
|
779 The RTP payload containing the last fragment of the Vorbis packet
|
Chris@1
|
780 will have the Fragment type set to 3. To maintain the correct
|
Chris@1
|
781 sequence for fragmented packet reception, the timestamp field of
|
Chris@1
|
782 fragmented packets MUST be the same as the first packet sent, with
|
Chris@1
|
783
|
Chris@1
|
784
|
Chris@1
|
785
|
Chris@1
|
786 Barbato Standards Track [Page 14]
|
Chris@1
|
787
|
Chris@1
|
788 RFC 5215 Vorbis RTP Payload Format August 2008
|
Chris@1
|
789
|
Chris@1
|
790
|
Chris@1
|
791 the sequence number incremented as normal for the subsequent RTP
|
Chris@1
|
792 payloads; this will affect the RTCP jitter measurement. The length
|
Chris@1
|
793 field shows the fragment length.
|
Chris@1
|
794
|
Chris@1
|
795 5.1. Example Fragmented Vorbis Packet
|
Chris@1
|
796
|
Chris@1
|
797 Here is an example of a fragmented Vorbis packet split over three RTP
|
Chris@1
|
798 payloads. Each of them contains the standard RTP headers as well as
|
Chris@1
|
799 the 4-octet Vorbis headers.
|
Chris@1
|
800
|
Chris@1
|
801 Packet 1:
|
Chris@1
|
802
|
Chris@1
|
803 0 1 2 3
|
Chris@1
|
804 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
|
Chris@1
|
805 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
806 |V=2|P|X| CC |M| PT | 1000 |
|
Chris@1
|
807 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
808 | 12345 |
|
Chris@1
|
809 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
810 | synchronization source (SSRC) identifier |
|
Chris@1
|
811 +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|
Chris@1
|
812 | contributing source (CSRC) identifiers |
|
Chris@1
|
813 | ... |
|
Chris@1
|
814 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
815 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
816 | Ident | 1 | 0 | 0|
|
Chris@1
|
817 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
818 | length | vorbis data ..
|
Chris@1
|
819 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
820 .. vorbis data |
|
Chris@1
|
821 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
822
|
Chris@1
|
823 Figure 9: Example Fragmented Packet (Packet 1)
|
Chris@1
|
824
|
Chris@1
|
825 In this payload, the initial sequence number is 1000 and the
|
Chris@1
|
826 timestamp is 12345. The Fragment type is set to 1, the number of
|
Chris@1
|
827 packets field is set to 0, and as the payload is raw Vorbis data, the
|
Chris@1
|
828 VDT field is set to 0.
|
Chris@1
|
829
|
Chris@1
|
830
|
Chris@1
|
831
|
Chris@1
|
832
|
Chris@1
|
833
|
Chris@1
|
834
|
Chris@1
|
835
|
Chris@1
|
836
|
Chris@1
|
837
|
Chris@1
|
838
|
Chris@1
|
839
|
Chris@1
|
840
|
Chris@1
|
841
|
Chris@1
|
842 Barbato Standards Track [Page 15]
|
Chris@1
|
843
|
Chris@1
|
844 RFC 5215 Vorbis RTP Payload Format August 2008
|
Chris@1
|
845
|
Chris@1
|
846
|
Chris@1
|
847 Packet 2:
|
Chris@1
|
848
|
Chris@1
|
849 0 1 2 3
|
Chris@1
|
850 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
|
Chris@1
|
851 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
852 |V=2|P|X| CC |M| PT | 1001 |
|
Chris@1
|
853 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
854 | 12345 |
|
Chris@1
|
855 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
856 | synchronization source (SSRC) identifier |
|
Chris@1
|
857 +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|
Chris@1
|
858 | contributing source (CSRC) identifiers |
|
Chris@1
|
859 | ... |
|
Chris@1
|
860 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
861 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
862 | Ident | 2 | 0 | 0|
|
Chris@1
|
863 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
864 | length | vorbis data ..
|
Chris@1
|
865 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
866 .. vorbis data |
|
Chris@1
|
867 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
868
|
Chris@1
|
869 Figure 10: Example Fragmented Packet (Packet 2)
|
Chris@1
|
870
|
Chris@1
|
871 The Fragment type field is set to 2, and the number of packets field
|
Chris@1
|
872 is set to 0. For large Vorbis fragments, there can be several of
|
Chris@1
|
873 these types of payloads. The maximum packet size SHOULD be no
|
Chris@1
|
874 greater than the path MTU, including all RTP and payload headers.
|
Chris@1
|
875 The sequence number has been incremented by one, but the timestamp
|
Chris@1
|
876 field remains the same as the initial payload.
|
Chris@1
|
877
|
Chris@1
|
878
|
Chris@1
|
879
|
Chris@1
|
880
|
Chris@1
|
881
|
Chris@1
|
882
|
Chris@1
|
883
|
Chris@1
|
884
|
Chris@1
|
885
|
Chris@1
|
886
|
Chris@1
|
887
|
Chris@1
|
888
|
Chris@1
|
889
|
Chris@1
|
890
|
Chris@1
|
891
|
Chris@1
|
892
|
Chris@1
|
893
|
Chris@1
|
894
|
Chris@1
|
895
|
Chris@1
|
896
|
Chris@1
|
897
|
Chris@1
|
898 Barbato Standards Track [Page 16]
|
Chris@1
|
899
|
Chris@1
|
900 RFC 5215 Vorbis RTP Payload Format August 2008
|
Chris@1
|
901
|
Chris@1
|
902
|
Chris@1
|
903 Packet 3:
|
Chris@1
|
904
|
Chris@1
|
905 0 1 2 3
|
Chris@1
|
906 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
|
Chris@1
|
907 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
908 |V=2|P|X| CC |M| PT | 1002 |
|
Chris@1
|
909 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
910 | 12345 |
|
Chris@1
|
911 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
912 | synchronization source (SSRC) identifier |
|
Chris@1
|
913 +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|
Chris@1
|
914 | contributing source (CSRC) identifiers |
|
Chris@1
|
915 | ... |
|
Chris@1
|
916 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
917 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
918 | Ident | 3 | 0 | 0|
|
Chris@1
|
919 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
920 | length | vorbis data ..
|
Chris@1
|
921 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
922 .. vorbis data |
|
Chris@1
|
923 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Chris@1
|
924
|
Chris@1
|
925 Figure 11: Example Fragmented Packet (Packet 3)
|
Chris@1
|
926
|
Chris@1
|
927 This is the last Vorbis fragment payload. The Fragment type is set
|
Chris@1
|
928 to 3 and the packet count remains set to 0. As in the previous
|
Chris@1
|
929 payloads, the timestamp remains set to the first payload timestamp in
|
Chris@1
|
930 the sequence and the sequence number has been incremented.
|
Chris@1
|
931
|
Chris@1
|
932 5.2. Packet Loss
|
Chris@1
|
933
|
Chris@1
|
934 As there is no error correction within the Vorbis stream, packet loss
|
Chris@1
|
935 will result in a loss of signal. Packet loss is more of an issue for
|
Chris@1
|
936 fragmented Vorbis packets as the client will have to cope with the
|
Chris@1
|
937 handling of the Fragment Type. In case of loss of fragments, the
|
Chris@1
|
938 client MUST discard all the remaining Vorbis fragments and decode the
|
Chris@1
|
939 incomplete packet. If we use the fragmented Vorbis packet example
|
Chris@1
|
940 above and the first RTP payload is lost, the client MUST detect that
|
Chris@1
|
941 the next RTP payload has the packet count field set to 0 and the
|
Chris@1
|
942 Fragment type 2 and MUST drop it. The next RTP payload, which is the
|
Chris@1
|
943 final fragmented packet, MUST be dropped in the same manner. If the
|
Chris@1
|
944 missing RTP payload is the last, the two fragments received will be
|
Chris@1
|
945 kept and the incomplete Vorbis packet decoded.
|
Chris@1
|
946
|
Chris@1
|
947 Loss of any of the Configuration fragment will result in the loss of
|
Chris@1
|
948 the full Configuration packet with the result detailed in the Loss of
|
Chris@1
|
949 Configuration Headers (Section 3.3) section.
|
Chris@1
|
950
|
Chris@1
|
951
|
Chris@1
|
952
|
Chris@1
|
953
|
Chris@1
|
954 Barbato Standards Track [Page 17]
|
Chris@1
|
955
|
Chris@1
|
956 RFC 5215 Vorbis RTP Payload Format August 2008
|
Chris@1
|
957
|
Chris@1
|
958
|
Chris@1
|
959 6. IANA Considerations
|
Chris@1
|
960
|
Chris@1
|
961 Type name: audio
|
Chris@1
|
962
|
Chris@1
|
963 Subtype name: vorbis
|
Chris@1
|
964
|
Chris@1
|
965 Required parameters:
|
Chris@1
|
966
|
Chris@1
|
967 rate: indicates the RTP timestamp clock rate as described in RTP
|
Chris@1
|
968 Profile for Audio and Video Conferences with Minimal Control
|
Chris@1
|
969 [RFC3551].
|
Chris@1
|
970
|
Chris@1
|
971 channels: indicates the number of audio channels as described in
|
Chris@1
|
972 RTP Profile for Audio and Video Conferences with Minimal
|
Chris@1
|
973 Control [RFC3551].
|
Chris@1
|
974
|
Chris@1
|
975 configuration: the base64 [RFC4648] representation of the Packed
|
Chris@1
|
976 Headers (Section 3.2.1).
|
Chris@1
|
977
|
Chris@1
|
978 Encoding considerations:
|
Chris@1
|
979
|
Chris@1
|
980 This media type is framed and contains binary data.
|
Chris@1
|
981
|
Chris@1
|
982 Security considerations:
|
Chris@1
|
983
|
Chris@1
|
984 See Section 10 of RFC 5215.
|
Chris@1
|
985
|
Chris@1
|
986 Interoperability considerations:
|
Chris@1
|
987
|
Chris@1
|
988 None
|
Chris@1
|
989
|
Chris@1
|
990 Published specification:
|
Chris@1
|
991
|
Chris@1
|
992 RFC 5215
|
Chris@1
|
993
|
Chris@1
|
994 Ogg Vorbis I specification: Codec setup and packet decode.
|
Chris@1
|
995 Available from the Xiph website, http://xiph.org/
|
Chris@1
|
996
|
Chris@1
|
997 Applications which use this media type:
|
Chris@1
|
998
|
Chris@1
|
999 Audio streaming and conferencing tools
|
Chris@1
|
1000
|
Chris@1
|
1001 Additional information:
|
Chris@1
|
1002
|
Chris@1
|
1003 None
|
Chris@1
|
1004
|
Chris@1
|
1005
|
Chris@1
|
1006
|
Chris@1
|
1007
|
Chris@1
|
1008
|
Chris@1
|
1009
|
Chris@1
|
1010 Barbato Standards Track [Page 18]
|
Chris@1
|
1011
|
Chris@1
|
1012 RFC 5215 Vorbis RTP Payload Format August 2008
|
Chris@1
|
1013
|
Chris@1
|
1014
|
Chris@1
|
1015 Person & email address to contact for further information:
|
Chris@1
|
1016
|
Chris@1
|
1017 Luca Barbato: <lu_zero@gentoo.org>
|
Chris@1
|
1018 IETF Audio/Video Transport Working Group
|
Chris@1
|
1019
|
Chris@1
|
1020 Intended usage:
|
Chris@1
|
1021
|
Chris@1
|
1022 COMMON
|
Chris@1
|
1023
|
Chris@1
|
1024 Restriction on usage:
|
Chris@1
|
1025
|
Chris@1
|
1026 This media type depends on RTP framing, hence is only defined for
|
Chris@1
|
1027 transfer via RTP [RFC3550].
|
Chris@1
|
1028
|
Chris@1
|
1029 Author:
|
Chris@1
|
1030
|
Chris@1
|
1031 Luca Barbato
|
Chris@1
|
1032
|
Chris@1
|
1033 Change controller:
|
Chris@1
|
1034
|
Chris@1
|
1035 IETF AVT Working Group delegated from the IESG
|
Chris@1
|
1036
|
Chris@1
|
1037 6.1. Packed Headers IANA Considerations
|
Chris@1
|
1038
|
Chris@1
|
1039 The following IANA considerations refers to the split configuration
|
Chris@1
|
1040 Packed Headers (Section 3.2.1) used within RFC 5215.
|
Chris@1
|
1041
|
Chris@1
|
1042 Type name: audio
|
Chris@1
|
1043
|
Chris@1
|
1044 Subtype name: vorbis-config
|
Chris@1
|
1045
|
Chris@1
|
1046 Required parameters:
|
Chris@1
|
1047
|
Chris@1
|
1048 None
|
Chris@1
|
1049
|
Chris@1
|
1050 Optional parameters:
|
Chris@1
|
1051
|
Chris@1
|
1052 None
|
Chris@1
|
1053
|
Chris@1
|
1054 Encoding considerations:
|
Chris@1
|
1055
|
Chris@1
|
1056 This media type contains binary data.
|
Chris@1
|
1057
|
Chris@1
|
1058 Security considerations:
|
Chris@1
|
1059
|
Chris@1
|
1060 See Section 10 of RFC 5215.
|
Chris@1
|
1061
|
Chris@1
|
1062
|
Chris@1
|
1063
|
Chris@1
|
1064
|
Chris@1
|
1065
|
Chris@1
|
1066 Barbato Standards Track [Page 19]
|
Chris@1
|
1067
|
Chris@1
|
1068 RFC 5215 Vorbis RTP Payload Format August 2008
|
Chris@1
|
1069
|
Chris@1
|
1070
|
Chris@1
|
1071 Interoperability considerations:
|
Chris@1
|
1072
|
Chris@1
|
1073 None
|
Chris@1
|
1074
|
Chris@1
|
1075 Published specification:
|
Chris@1
|
1076
|
Chris@1
|
1077 RFC 5215
|
Chris@1
|
1078
|
Chris@1
|
1079 Applications which use this media type:
|
Chris@1
|
1080
|
Chris@1
|
1081 Vorbis encoded audio, configuration data
|
Chris@1
|
1082
|
Chris@1
|
1083 Additional information:
|
Chris@1
|
1084
|
Chris@1
|
1085 None
|
Chris@1
|
1086
|
Chris@1
|
1087 Person & email address to contact for further information:
|
Chris@1
|
1088
|
Chris@1
|
1089 Luca Barbato: <lu_zero@gentoo.org>
|
Chris@1
|
1090 IETF Audio/Video Transport Working Group
|
Chris@1
|
1091
|
Chris@1
|
1092 Intended usage: COMMON
|
Chris@1
|
1093
|
Chris@1
|
1094 Restriction on usage:
|
Chris@1
|
1095
|
Chris@1
|
1096 This media type doesn't depend on the transport.
|
Chris@1
|
1097
|
Chris@1
|
1098 Author:
|
Chris@1
|
1099
|
Chris@1
|
1100 Luca Barbato
|
Chris@1
|
1101
|
Chris@1
|
1102 Change controller:
|
Chris@1
|
1103
|
Chris@1
|
1104 IETF AVT Working Group delegated from the IESG
|
Chris@1
|
1105
|
Chris@1
|
1106 7. SDP Related Considerations
|
Chris@1
|
1107
|
Chris@1
|
1108 The following paragraphs define the mapping of the parameters
|
Chris@1
|
1109 described in the IANA considerations section and their usage in the
|
Chris@1
|
1110 Offer/Answer Model [RFC3264]. In order to be forward compatible, the
|
Chris@1
|
1111 implementation MUST ignore unknown parameters.
|
Chris@1
|
1112
|
Chris@1
|
1113 7.1. Mapping Media Type Parameters into SDP
|
Chris@1
|
1114
|
Chris@1
|
1115 The information carried in the Media Type specification has a
|
Chris@1
|
1116 specific mapping to fields in the Session Description Protocol (SDP)
|
Chris@1
|
1117 [RFC4566], which is commonly used to describe RTP sessions. When SDP
|
Chris@1
|
1118 is used to specify sessions, the mapping are as follows:
|
Chris@1
|
1119
|
Chris@1
|
1120
|
Chris@1
|
1121
|
Chris@1
|
1122 Barbato Standards Track [Page 20]
|
Chris@1
|
1123
|
Chris@1
|
1124 RFC 5215 Vorbis RTP Payload Format August 2008
|
Chris@1
|
1125
|
Chris@1
|
1126
|
Chris@1
|
1127 o The type name ("audio") goes in SDP "m=" as the media name.
|
Chris@1
|
1128
|
Chris@1
|
1129 o The subtype name ("vorbis") goes in SDP "a=rtpmap" as the encoding
|
Chris@1
|
1130 name.
|
Chris@1
|
1131
|
Chris@1
|
1132 o The parameter "rate" also goes in "a=rtpmap" as the clock rate.
|
Chris@1
|
1133
|
Chris@1
|
1134 o The parameter "channels" also goes in "a=rtpmap" as the channel
|
Chris@1
|
1135 count.
|
Chris@1
|
1136
|
Chris@1
|
1137 o The mandated parameters "configuration" MUST be included in the
|
Chris@1
|
1138 SDP "a=fmtp" attribute.
|
Chris@1
|
1139
|
Chris@1
|
1140 If the stream comprises chained Vorbis files and all of them are
|
Chris@1
|
1141 known in advance, the Configuration Packet for each file SHOULD be
|
Chris@1
|
1142 passed to the client using the configuration attribute.
|
Chris@1
|
1143
|
Chris@1
|
1144 The port value is specified by the server application bound to the
|
Chris@1
|
1145 address specified in the c= line. The channel count value specified
|
Chris@1
|
1146 in the rtpmap attribute SHOULD match the current Vorbis stream or
|
Chris@1
|
1147 should be considered the maximum number of channels to be expected.
|
Chris@1
|
1148 The timestamp clock rate MUST be a multiple of the sample rate; a
|
Chris@1
|
1149 different payload number MUST be used if the clock rate changes. The
|
Chris@1
|
1150 Configuration payload delivers the exact information, thus the SDP
|
Chris@1
|
1151 information SHOULD be considered a hint. An example is found below.
|
Chris@1
|
1152
|
Chris@1
|
1153 7.1.1. SDP Example
|
Chris@1
|
1154
|
Chris@1
|
1155 The following example shows a basic SDP single stream. The first
|
Chris@1
|
1156 configuration packet is inside the SDP; other configurations could be
|
Chris@1
|
1157 fetched at any time from the URIs provided. The following base64
|
Chris@1
|
1158 [RFC4648] configuration string is folded in this example due to RFC
|
Chris@1
|
1159 line length limitations.
|
Chris@1
|
1160
|
Chris@1
|
1161 c=IN IP4 192.0.2.1
|
Chris@1
|
1162
|
Chris@1
|
1163 m=audio RTP/AVP 98
|
Chris@1
|
1164
|
Chris@1
|
1165 a=rtpmap:98 vorbis/44100/2
|
Chris@1
|
1166
|
Chris@1
|
1167 a=fmtp:98 configuration=AAAAAZ2f4g9NAh4aAXZvcmJpcwA...;
|
Chris@1
|
1168
|
Chris@1
|
1169 Note that the payload format (encoding) names are commonly shown in
|
Chris@1
|
1170 uppercase. Media Type subtypes are commonly shown in lowercase.
|
Chris@1
|
1171 These names are case-insensitive in both places. Similarly,
|
Chris@1
|
1172 parameter names are case-insensitive both in Media Type types and in
|
Chris@1
|
1173 the default mapping to the SDP a=fmtp attribute. The a=fmtp line is
|
Chris@1
|
1174
|
Chris@1
|
1175
|
Chris@1
|
1176
|
Chris@1
|
1177
|
Chris@1
|
1178 Barbato Standards Track [Page 21]
|
Chris@1
|
1179
|
Chris@1
|
1180 RFC 5215 Vorbis RTP Payload Format August 2008
|
Chris@1
|
1181
|
Chris@1
|
1182
|
Chris@1
|
1183 a single line, even if it is shown as multiple lines in this document
|
Chris@1
|
1184 for clarity.
|
Chris@1
|
1185
|
Chris@1
|
1186 7.2. Usage with the SDP Offer/Answer Model
|
Chris@1
|
1187
|
Chris@1
|
1188 There are no negotiable parameters. All of them are declarative.
|
Chris@1
|
1189
|
Chris@1
|
1190 8. Congestion Control
|
Chris@1
|
1191
|
Chris@1
|
1192 The general congestion control considerations for transporting RTP
|
Chris@1
|
1193 data apply to Vorbis audio over RTP as well. See the RTP
|
Chris@1
|
1194 specification [RFC3550] and any applicable RTP profile (e.g.,
|
Chris@1
|
1195 [RFC3551]). Audio data can be encoded using a range of different bit
|
Chris@1
|
1196 rates, so it is possible to adapt network bandwidth by adjusting the
|
Chris@1
|
1197 encoder bit rate in real time or by having multiple copies of content
|
Chris@1
|
1198 encoded at different bit rates.
|
Chris@1
|
1199
|
Chris@1
|
1200 9. Example
|
Chris@1
|
1201
|
Chris@1
|
1202 The following example shows a common usage pattern that MAY be
|
Chris@1
|
1203 applied in such a situation. The main scope of this section is to
|
Chris@1
|
1204 explain better usage of the transmission vectors.
|
Chris@1
|
1205
|
Chris@1
|
1206 9.1. Stream Radio
|
Chris@1
|
1207
|
Chris@1
|
1208 This is one of the most common situations: there is one single server
|
Chris@1
|
1209 streaming content in multicast, and the clients may start a session
|
Chris@1
|
1210 at a random time. The content itself could be a mix of a live stream
|
Chris@1
|
1211 (as the webjockey's voice) and stored streams (as the music she
|
Chris@1
|
1212 plays).
|
Chris@1
|
1213
|
Chris@1
|
1214 In this situation, we don't know in advance how many codebooks we
|
Chris@1
|
1215 will use. The clients can join anytime and users expect to start
|
Chris@1
|
1216 listening to the content in a short time.
|
Chris@1
|
1217
|
Chris@1
|
1218 Upon joining, the client will receive the current Configuration
|
Chris@1
|
1219 necessary to decode the current stream inside the SDP so that the
|
Chris@1
|
1220 decoding will start immediately after.
|
Chris@1
|
1221
|
Chris@1
|
1222 When the streamed content changes, the new Configuration is sent in-
|
Chris@1
|
1223 band before the actual stream, and the Configuration that has to be
|
Chris@1
|
1224 sent inside the SDP is updated. Since the in-band method is
|
Chris@1
|
1225 unreliable, an out-of-band fallback is provided.
|
Chris@1
|
1226
|
Chris@1
|
1227 The client may choose to fetch the Configuration from the alternate
|
Chris@1
|
1228 source as soon as it discovers a Configuration packet got lost in-
|
Chris@1
|
1229 band, or use selective retransmission [RFC3611] if the server
|
Chris@1
|
1230 supports this feature.
|
Chris@1
|
1231
|
Chris@1
|
1232
|
Chris@1
|
1233
|
Chris@1
|
1234 Barbato Standards Track [Page 22]
|
Chris@1
|
1235
|
Chris@1
|
1236 RFC 5215 Vorbis RTP Payload Format August 2008
|
Chris@1
|
1237
|
Chris@1
|
1238
|
Chris@1
|
1239 A server-side optimization would be to keep a hash list of the
|
Chris@1
|
1240 Configurations per session, which avoids packing all of them and
|
Chris@1
|
1241 sending the same Configuration with different Ident tags.
|
Chris@1
|
1242
|
Chris@1
|
1243 A client-side optimization would be to keep a tag list of the
|
Chris@1
|
1244 Configurations per session and not process configuration packets that
|
Chris@1
|
1245 are already known.
|
Chris@1
|
1246
|
Chris@1
|
1247 10. Security Considerations
|
Chris@1
|
1248
|
Chris@1
|
1249 RTP packets using this payload format are subject to the security
|
Chris@1
|
1250 considerations discussed in the RTP specification [RFC3550], the
|
Chris@1
|
1251 base64 specification [RFC4648], and the URI Generic syntax
|
Chris@1
|
1252 specification [RFC3986]. Among other considerations, this implies
|
Chris@1
|
1253 that the confidentiality of the media stream is achieved by using
|
Chris@1
|
1254 encryption. Because the data compression used with this payload
|
Chris@1
|
1255 format is applied end-to-end, encryption may be performed on the
|
Chris@1
|
1256 compressed data.
|
Chris@1
|
1257
|
Chris@1
|
1258 11. Copying Conditions
|
Chris@1
|
1259
|
Chris@1
|
1260 The authors agree to grant third parties the irrevocable right to
|
Chris@1
|
1261 copy, use, and distribute the work, with or without modification, in
|
Chris@1
|
1262 any medium, without royalty, provided that, unless separate
|
Chris@1
|
1263 permission is granted, redistributed modified works do not contain
|
Chris@1
|
1264 misleading author, version, name of work, or endorsement information.
|
Chris@1
|
1265
|
Chris@1
|
1266 12. Acknowledgments
|
Chris@1
|
1267
|
Chris@1
|
1268 This document is a continuation of the following documents:
|
Chris@1
|
1269
|
Chris@1
|
1270 Moffitt, J., "RTP Payload Format for Vorbis Encoded Audio", February
|
Chris@1
|
1271 2001.
|
Chris@1
|
1272
|
Chris@1
|
1273 Kerr, R., "RTP Payload Format for Vorbis Encoded Audio", December
|
Chris@1
|
1274 2004.
|
Chris@1
|
1275
|
Chris@1
|
1276 The Media Type declaration is a continuation of the following
|
Chris@1
|
1277 document:
|
Chris@1
|
1278
|
Chris@1
|
1279 Short, B., "The audio/rtp-vorbis MIME Type", January 2008.
|
Chris@1
|
1280
|
Chris@1
|
1281 Thanks to the AVT, Vorbis Communities / Xiph.Org Foundation including
|
Chris@1
|
1282 Steve Casner, Aaron Colwell, Ross Finlayson, Fluendo, Ramon Garcia,
|
Chris@1
|
1283 Pascal Hennequin, Ralph Giles, Tor-Einar Jarnbjo, Colin Law, John
|
Chris@1
|
1284 Lazzaro, Jack Moffitt, Christopher Montgomery, Colin Perkins, Barry
|
Chris@1
|
1285 Short, Mike Smith, Phil Kerr, Michael Sparks, Magnus Westerlund,
|
Chris@1
|
1286 David Barrett, Silvia Pfeiffer, Stefan Ehmann, Gianni Ceccarelli, and
|
Chris@1
|
1287
|
Chris@1
|
1288
|
Chris@1
|
1289
|
Chris@1
|
1290 Barbato Standards Track [Page 23]
|
Chris@1
|
1291
|
Chris@1
|
1292 RFC 5215 Vorbis RTP Payload Format August 2008
|
Chris@1
|
1293
|
Chris@1
|
1294
|
Chris@1
|
1295 Alessandro Salvatori. Thanks to the LScube Group, in particular
|
Chris@1
|
1296 Federico Ridolfo, Francesco Varano, Giampaolo Mancini, Dario
|
Chris@1
|
1297 Gallucci, and Juan Carlos De Martin.
|
Chris@1
|
1298
|
Chris@1
|
1299 13. References
|
Chris@1
|
1300
|
Chris@1
|
1301 13.1. Normative References
|
Chris@1
|
1302
|
Chris@1
|
1303 [RFC1191] Mogul, J. and S. Deering, "Path MTU discovery",
|
Chris@1
|
1304 RFC 1191, November 1990.
|
Chris@1
|
1305
|
Chris@1
|
1306 [RFC1981] McCann, J., Deering, S., and J. Mogul, "Path MTU
|
Chris@1
|
1307 Discovery for IP version 6", RFC 1981,
|
Chris@1
|
1308 August 1996.
|
Chris@1
|
1309
|
Chris@1
|
1310 [RFC2119] Bradner, S., "Key words for use in RFCs to
|
Chris@1
|
1311 Indicate Requirement Levels", BCP 14, RFC 2119,
|
Chris@1
|
1312 March 1997.
|
Chris@1
|
1313
|
Chris@1
|
1314 [RFC3264] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer
|
Chris@1
|
1315 Model with Session Description Protocol (SDP)",
|
Chris@1
|
1316 RFC 3264, June 2002.
|
Chris@1
|
1317
|
Chris@1
|
1318 [RFC3550] Schulzrinne, H., Casner, S., Frederick, R., and V.
|
Chris@1
|
1319 Jacobson, "RTP: A Transport Protocol for Real-Time
|
Chris@1
|
1320 Applications", STD 64, RFC 3550, July 2003.
|
Chris@1
|
1321
|
Chris@1
|
1322 [RFC3551] Schulzrinne, H. and S. Casner, "RTP Profile for
|
Chris@1
|
1323 Audio and Video Conferences with Minimal Control",
|
Chris@1
|
1324 STD 65, RFC 3551, July 2003.
|
Chris@1
|
1325
|
Chris@1
|
1326 [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter,
|
Chris@1
|
1327 "Uniform Resource Identifier (URI): Generic
|
Chris@1
|
1328 Syntax", STD 66, RFC 3986, January 2005.
|
Chris@1
|
1329
|
Chris@1
|
1330 [RFC4566] Handley, M., Jacobson, V., and C. Perkins, "SDP:
|
Chris@1
|
1331 Session Description Protocol", RFC 4566,
|
Chris@1
|
1332 July 2006.
|
Chris@1
|
1333
|
Chris@1
|
1334 [RFC4648] Josefsson, S., "The Base16, Base32, and Base64
|
Chris@1
|
1335 Data Encodings", RFC 4648, October 2006.
|
Chris@1
|
1336
|
Chris@1
|
1337 [VORBIS-SPEC-REF] "Ogg Vorbis I specification: Codec setup and
|
Chris@1
|
1338 packet decode. Available from the Xiph website,
|
Chris@1
|
1339 http://xiph.org/vorbis/doc/Vorbis_I_spec.html".
|
Chris@1
|
1340
|
Chris@1
|
1341
|
Chris@1
|
1342
|
Chris@1
|
1343
|
Chris@1
|
1344
|
Chris@1
|
1345
|
Chris@1
|
1346 Barbato Standards Track [Page 24]
|
Chris@1
|
1347
|
Chris@1
|
1348 RFC 5215 Vorbis RTP Payload Format August 2008
|
Chris@1
|
1349
|
Chris@1
|
1350
|
Chris@1
|
1351 13.2. Informative References
|
Chris@1
|
1352
|
Chris@1
|
1353 [LIBVORBIS] "libvorbis: Available from the dedicated website,
|
Chris@1
|
1354 http://vorbis.com/".
|
Chris@1
|
1355
|
Chris@1
|
1356 [RFC3533] Pfeiffer, S., "The Ogg Encapsulation Format
|
Chris@1
|
1357 Version 0", RFC 3533, May 2003.
|
Chris@1
|
1358
|
Chris@1
|
1359 [RFC3611] Friedman, T., Caceres, R., and A. Clark, "RTP
|
Chris@1
|
1360 Control Protocol Extended Reports (RTCP XR)",
|
Chris@1
|
1361 RFC 3611, November 2003.
|
Chris@1
|
1362
|
Chris@1
|
1363 [RFC4588] Rey, J., Leon, D., Miyazaki, A., Varsa, V., and R.
|
Chris@1
|
1364 Hakenberg, "RTP Retransmission Payload Format",
|
Chris@1
|
1365 RFC 4588, July 2006.
|
Chris@1
|
1366
|
Chris@1
|
1367 Author's Address
|
Chris@1
|
1368
|
Chris@1
|
1369 Luca Barbato
|
Chris@1
|
1370 Xiph.Org Foundation
|
Chris@1
|
1371
|
Chris@1
|
1372 EMail: lu_zero@gentoo.org
|
Chris@1
|
1373 URI: http://xiph.org/
|
Chris@1
|
1374
|
Chris@1
|
1375
|
Chris@1
|
1376
|
Chris@1
|
1377
|
Chris@1
|
1378
|
Chris@1
|
1379
|
Chris@1
|
1380
|
Chris@1
|
1381
|
Chris@1
|
1382
|
Chris@1
|
1383
|
Chris@1
|
1384
|
Chris@1
|
1385
|
Chris@1
|
1386
|
Chris@1
|
1387
|
Chris@1
|
1388
|
Chris@1
|
1389
|
Chris@1
|
1390
|
Chris@1
|
1391
|
Chris@1
|
1392
|
Chris@1
|
1393
|
Chris@1
|
1394
|
Chris@1
|
1395
|
Chris@1
|
1396
|
Chris@1
|
1397
|
Chris@1
|
1398
|
Chris@1
|
1399
|
Chris@1
|
1400
|
Chris@1
|
1401
|
Chris@1
|
1402 Barbato Standards Track [Page 25]
|
Chris@1
|
1403
|
Chris@1
|
1404 RFC 5215 Vorbis RTP Payload Format August 2008
|
Chris@1
|
1405
|
Chris@1
|
1406
|
Chris@1
|
1407 Full Copyright Statement
|
Chris@1
|
1408
|
Chris@1
|
1409 Copyright (C) The IETF Trust (2008).
|
Chris@1
|
1410
|
Chris@1
|
1411 This document is subject to the rights, licenses and restrictions
|
Chris@1
|
1412 contained in BCP 78, and except as set forth therein, the authors
|
Chris@1
|
1413 retain all their rights.
|
Chris@1
|
1414
|
Chris@1
|
1415 This document and the information contained herein are provided on an
|
Chris@1
|
1416 "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
|
Chris@1
|
1417 OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND
|
Chris@1
|
1418 THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS
|
Chris@1
|
1419 OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
|
Chris@1
|
1420 THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
|
Chris@1
|
1421 WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
Chris@1
|
1422
|
Chris@1
|
1423 Intellectual Property
|
Chris@1
|
1424
|
Chris@1
|
1425 The IETF takes no position regarding the validity or scope of any
|
Chris@1
|
1426 Intellectual Property Rights or other rights that might be claimed to
|
Chris@1
|
1427 pertain to the implementation or use of the technology described in
|
Chris@1
|
1428 this document or the extent to which any license under such rights
|
Chris@1
|
1429 might or might not be available; nor does it represent that it has
|
Chris@1
|
1430 made any independent effort to identify any such rights. Information
|
Chris@1
|
1431 on the procedures with respect to rights in RFC documents can be
|
Chris@1
|
1432 found in BCP 78 and BCP 79.
|
Chris@1
|
1433
|
Chris@1
|
1434 Copies of IPR disclosures made to the IETF Secretariat and any
|
Chris@1
|
1435 assurances of licenses to be made available, or the result of an
|
Chris@1
|
1436 attempt made to obtain a general license or permission for the use of
|
Chris@1
|
1437 such proprietary rights by implementers or users of this
|
Chris@1
|
1438 specification can be obtained from the IETF on-line IPR repository at
|
Chris@1
|
1439 http://www.ietf.org/ipr.
|
Chris@1
|
1440
|
Chris@1
|
1441 The IETF invites any interested party to bring to its attention any
|
Chris@1
|
1442 copyrights, patents or patent applications, or other proprietary
|
Chris@1
|
1443 rights that may cover technology that may be required to implement
|
Chris@1
|
1444 this standard. Please address the information to the IETF at
|
Chris@1
|
1445 ietf-ipr@ietf.org.
|
Chris@1
|
1446
|
Chris@1
|
1447
|
Chris@1
|
1448
|
Chris@1
|
1449
|
Chris@1
|
1450
|
Chris@1
|
1451
|
Chris@1
|
1452
|
Chris@1
|
1453
|
Chris@1
|
1454
|
Chris@1
|
1455
|
Chris@1
|
1456
|
Chris@1
|
1457
|
Chris@1
|
1458 Barbato Standards Track [Page 26]
|
Chris@1
|
1459
|