xref: /aosp_15_r20/external/libogg/doc/rfc3533.txt (revision 4d5d8b54cec1a9622d79143ad0e145ea73da2224)
1*4d5d8b54SAndroid Build Coastguard Worker
2*4d5d8b54SAndroid Build Coastguard Worker
3*4d5d8b54SAndroid Build Coastguard Worker
4*4d5d8b54SAndroid Build Coastguard Worker
5*4d5d8b54SAndroid Build Coastguard Worker
6*4d5d8b54SAndroid Build Coastguard Worker
7*4d5d8b54SAndroid Build Coastguard WorkerNetwork Working Group                                        S. Pfeiffer
8*4d5d8b54SAndroid Build Coastguard WorkerRequest for Comments: 3533                                         CSIRO
9*4d5d8b54SAndroid Build Coastguard WorkerCategory: Informational                                         May 2003
10*4d5d8b54SAndroid Build Coastguard Worker
11*4d5d8b54SAndroid Build Coastguard Worker
12*4d5d8b54SAndroid Build Coastguard Worker                 The Ogg Encapsulation Format Version 0
13*4d5d8b54SAndroid Build Coastguard Worker
14*4d5d8b54SAndroid Build Coastguard WorkerStatus of this Memo
15*4d5d8b54SAndroid Build Coastguard Worker
16*4d5d8b54SAndroid Build Coastguard Worker   This memo provides information for the Internet community.  It does
17*4d5d8b54SAndroid Build Coastguard Worker   not specify an Internet standard of any kind.  Distribution of this
18*4d5d8b54SAndroid Build Coastguard Worker   memo is unlimited.
19*4d5d8b54SAndroid Build Coastguard Worker
20*4d5d8b54SAndroid Build Coastguard WorkerCopyright Notice
21*4d5d8b54SAndroid Build Coastguard Worker
22*4d5d8b54SAndroid Build Coastguard Worker   Copyright (C) The Internet Society (2003).  All Rights Reserved.
23*4d5d8b54SAndroid Build Coastguard Worker
24*4d5d8b54SAndroid Build Coastguard WorkerAbstract
25*4d5d8b54SAndroid Build Coastguard Worker
26*4d5d8b54SAndroid Build Coastguard Worker   This document describes the Ogg bitstream format version 0, which is
27*4d5d8b54SAndroid Build Coastguard Worker   a general, freely-available encapsulation format for media streams.
28*4d5d8b54SAndroid Build Coastguard Worker   It is able to encapsulate any kind and number of video and audio
29*4d5d8b54SAndroid Build Coastguard Worker   encoding formats as well as other data streams in a single bitstream.
30*4d5d8b54SAndroid Build Coastguard Worker
31*4d5d8b54SAndroid Build Coastguard WorkerTerminology
32*4d5d8b54SAndroid Build Coastguard Worker
33*4d5d8b54SAndroid Build Coastguard Worker   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
34*4d5d8b54SAndroid Build Coastguard Worker   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
35*4d5d8b54SAndroid Build Coastguard Worker   document are to be interpreted as described in BCP 14, RFC 2119 [2].
36*4d5d8b54SAndroid Build Coastguard Worker
37*4d5d8b54SAndroid Build Coastguard WorkerTable of Contents
38*4d5d8b54SAndroid Build Coastguard Worker
39*4d5d8b54SAndroid Build Coastguard Worker   1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . .   2
40*4d5d8b54SAndroid Build Coastguard Worker   2. Definitions  . . . . . . . . . . . . . . . . . . . . . . . . .   2
41*4d5d8b54SAndroid Build Coastguard Worker   3. Requirements for a generic encapsulation format  . . . . . . .   3
42*4d5d8b54SAndroid Build Coastguard Worker   4. The Ogg bitstream format . . . . . . . . . . . . . . . . . . .   3
43*4d5d8b54SAndroid Build Coastguard Worker   5. The encapsulation process  . . . . . . . . . . . . . . . . . .   6
44*4d5d8b54SAndroid Build Coastguard Worker   6. The Ogg page format  . . . . . . . . . . . . . . . . . . . . .   9
45*4d5d8b54SAndroid Build Coastguard Worker   7. Security Considerations  . . . . . . . . . . . . . . . . . . .  11
46*4d5d8b54SAndroid Build Coastguard Worker   8. References . . . . . . . . . . . . . . . . . . . . . . . . . .  12
47*4d5d8b54SAndroid Build Coastguard Worker   A. Glossary of terms and abbreviations  . . . . . . . . . . . . .  13
48*4d5d8b54SAndroid Build Coastguard Worker   B. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . .  14
49*4d5d8b54SAndroid Build Coastguard Worker      Author's Address . . . . . . . . . . . . . . . . . . . . . . .  14
50*4d5d8b54SAndroid Build Coastguard Worker      Full Copyright Statement . . . . . . . . . . . . . . . . . . .  15
51*4d5d8b54SAndroid Build Coastguard Worker
52*4d5d8b54SAndroid Build Coastguard Worker
53*4d5d8b54SAndroid Build Coastguard Worker
54*4d5d8b54SAndroid Build Coastguard Worker
55*4d5d8b54SAndroid Build Coastguard Worker
56*4d5d8b54SAndroid Build Coastguard Worker
57*4d5d8b54SAndroid Build Coastguard Worker
58*4d5d8b54SAndroid Build Coastguard WorkerPfeiffer                     Informational                      [Page 1]
59*4d5d8b54SAndroid Build Coastguard Worker
60*4d5d8b54SAndroid Build Coastguard WorkerRFC 3533                          OGG                           May 2003
61*4d5d8b54SAndroid Build Coastguard Worker
62*4d5d8b54SAndroid Build Coastguard Worker
63*4d5d8b54SAndroid Build Coastguard Worker1. Introduction
64*4d5d8b54SAndroid Build Coastguard Worker
65*4d5d8b54SAndroid Build Coastguard Worker   The Ogg bitstream format has been developed as a part of a larger
66*4d5d8b54SAndroid Build Coastguard Worker   project aimed at creating a set of components for the coding and
67*4d5d8b54SAndroid Build Coastguard Worker   decoding of multimedia content (codecs) which are to be freely
68*4d5d8b54SAndroid Build Coastguard Worker   available and freely re-implementable, both in software and in
69*4d5d8b54SAndroid Build Coastguard Worker   hardware for the computing community at large, including the Internet
70*4d5d8b54SAndroid Build Coastguard Worker   community.  It is the intention of the Ogg developers represented by
71*4d5d8b54SAndroid Build Coastguard Worker   Xiph.Org that it be usable without intellectual property concerns.
72*4d5d8b54SAndroid Build Coastguard Worker
73*4d5d8b54SAndroid Build Coastguard Worker   This document describes the Ogg bitstream format and how to use it to
74*4d5d8b54SAndroid Build Coastguard Worker   encapsulate one or several media bitstreams created by one or several
75*4d5d8b54SAndroid Build Coastguard Worker   encoders.  The Ogg transport bitstream is designed to provide
76*4d5d8b54SAndroid Build Coastguard Worker   framing, error protection and seeking structure for higher-level
77*4d5d8b54SAndroid Build Coastguard Worker   codec streams that consist of raw, unencapsulated data packets, such
78*4d5d8b54SAndroid Build Coastguard Worker   as the Vorbis audio codec or the upcoming Tarkin and Theora video
79*4d5d8b54SAndroid Build Coastguard Worker   codecs.  It is capable of interleaving different binary media and
80*4d5d8b54SAndroid Build Coastguard Worker   other time-continuous data streams that are prepared by an encoder as
81*4d5d8b54SAndroid Build Coastguard Worker   a sequence of data packets.  Ogg provides enough information to
82*4d5d8b54SAndroid Build Coastguard Worker   properly separate data back into such encoder created data packets at
83*4d5d8b54SAndroid Build Coastguard Worker   the original packet boundaries without relying on decoding to find
84*4d5d8b54SAndroid Build Coastguard Worker   packet boundaries.
85*4d5d8b54SAndroid Build Coastguard Worker
86*4d5d8b54SAndroid Build Coastguard Worker   Please note that the MIME type application/ogg has been registered
87*4d5d8b54SAndroid Build Coastguard Worker   with the IANA [1].
88*4d5d8b54SAndroid Build Coastguard Worker
89*4d5d8b54SAndroid Build Coastguard Worker2. Definitions
90*4d5d8b54SAndroid Build Coastguard Worker
91*4d5d8b54SAndroid Build Coastguard Worker   For describing the Ogg encapsulation process, a set of terms will be
92*4d5d8b54SAndroid Build Coastguard Worker   used whose meaning needs to be well understood.  Therefore, some of
93*4d5d8b54SAndroid Build Coastguard Worker   the most fundamental terms are defined now before we start with the
94*4d5d8b54SAndroid Build Coastguard Worker   description of the requirements for a generic media stream
95*4d5d8b54SAndroid Build Coastguard Worker   encapsulation format, the process of encapsulation, and the concrete
96*4d5d8b54SAndroid Build Coastguard Worker   format of the Ogg bitstream.  See the Appendix for a more complete
97*4d5d8b54SAndroid Build Coastguard Worker   glossary.
98*4d5d8b54SAndroid Build Coastguard Worker
99*4d5d8b54SAndroid Build Coastguard Worker   The result of an Ogg encapsulation is called the "Physical (Ogg)
100*4d5d8b54SAndroid Build Coastguard Worker   Bitstream".  It encapsulates one or several encoder-created
101*4d5d8b54SAndroid Build Coastguard Worker   bitstreams, which are called "Logical Bitstreams".  A logical
102*4d5d8b54SAndroid Build Coastguard Worker   bitstream, provided to the Ogg encapsulation process, has a
103*4d5d8b54SAndroid Build Coastguard Worker   structure, i.e., it is split up into a sequence of so-called
104*4d5d8b54SAndroid Build Coastguard Worker   "Packets".  The packets are created by the encoder of that logical
105*4d5d8b54SAndroid Build Coastguard Worker   bitstream and represent meaningful entities for that encoder only
106*4d5d8b54SAndroid Build Coastguard Worker   (e.g., an uncompressed stream may use video frames as packets).  They
107*4d5d8b54SAndroid Build Coastguard Worker   do not contain boundary information - strung together they appear to
108*4d5d8b54SAndroid Build Coastguard Worker   be streams of random bytes with no landmarks.
109*4d5d8b54SAndroid Build Coastguard Worker
110*4d5d8b54SAndroid Build Coastguard Worker
111*4d5d8b54SAndroid Build Coastguard Worker
112*4d5d8b54SAndroid Build Coastguard Worker
113*4d5d8b54SAndroid Build Coastguard Worker
114*4d5d8b54SAndroid Build Coastguard WorkerPfeiffer                     Informational                      [Page 2]
115*4d5d8b54SAndroid Build Coastguard Worker
116*4d5d8b54SAndroid Build Coastguard WorkerRFC 3533                          OGG                           May 2003
117*4d5d8b54SAndroid Build Coastguard Worker
118*4d5d8b54SAndroid Build Coastguard Worker
119*4d5d8b54SAndroid Build Coastguard Worker   Please note that the term "packet" is not used in this document to
120*4d5d8b54SAndroid Build Coastguard Worker   signify entities for transport over a network.
121*4d5d8b54SAndroid Build Coastguard Worker
122*4d5d8b54SAndroid Build Coastguard Worker3. Requirements for a generic encapsulation format
123*4d5d8b54SAndroid Build Coastguard Worker
124*4d5d8b54SAndroid Build Coastguard Worker   The design idea behind Ogg was to provide a generic, linear media
125*4d5d8b54SAndroid Build Coastguard Worker   transport format to enable both file-based storage and stream-based
126*4d5d8b54SAndroid Build Coastguard Worker   transmission of one or several interleaved media streams independent
127*4d5d8b54SAndroid Build Coastguard Worker   of the encoding format of the media data.  Such an encapsulation
128*4d5d8b54SAndroid Build Coastguard Worker   format needs to provide:
129*4d5d8b54SAndroid Build Coastguard Worker
130*4d5d8b54SAndroid Build Coastguard Worker   o  framing for logical bitstreams.
131*4d5d8b54SAndroid Build Coastguard Worker
132*4d5d8b54SAndroid Build Coastguard Worker   o  interleaving of different logical bitstreams.
133*4d5d8b54SAndroid Build Coastguard Worker
134*4d5d8b54SAndroid Build Coastguard Worker   o  detection of corruption.
135*4d5d8b54SAndroid Build Coastguard Worker
136*4d5d8b54SAndroid Build Coastguard Worker   o  recapture after a parsing error.
137*4d5d8b54SAndroid Build Coastguard Worker
138*4d5d8b54SAndroid Build Coastguard Worker   o  position landmarks for direct random access of arbitrary positions
139*4d5d8b54SAndroid Build Coastguard Worker      in the bitstream.
140*4d5d8b54SAndroid Build Coastguard Worker
141*4d5d8b54SAndroid Build Coastguard Worker   o  streaming capability (i.e., no seeking is needed to build a 100%
142*4d5d8b54SAndroid Build Coastguard Worker      complete bitstream).
143*4d5d8b54SAndroid Build Coastguard Worker
144*4d5d8b54SAndroid Build Coastguard Worker   o  small overhead (i.e., use no more than approximately 1-2% of
145*4d5d8b54SAndroid Build Coastguard Worker      bitstream bandwidth for packet boundary marking, high-level
146*4d5d8b54SAndroid Build Coastguard Worker      framing, sync and seeking).
147*4d5d8b54SAndroid Build Coastguard Worker
148*4d5d8b54SAndroid Build Coastguard Worker   o  simplicity to enable fast parsing.
149*4d5d8b54SAndroid Build Coastguard Worker
150*4d5d8b54SAndroid Build Coastguard Worker   o  simple concatenation mechanism of several physical bitstreams.
151*4d5d8b54SAndroid Build Coastguard Worker
152*4d5d8b54SAndroid Build Coastguard Worker   All of these design considerations have been taken into consideration
153*4d5d8b54SAndroid Build Coastguard Worker   for Ogg.  Ogg supports framing and interleaving of logical
154*4d5d8b54SAndroid Build Coastguard Worker   bitstreams, seeking landmarks, detection of corruption, and stream
155*4d5d8b54SAndroid Build Coastguard Worker   resynchronisation after a parsing error with no more than
156*4d5d8b54SAndroid Build Coastguard Worker   approximately 1-2% overhead.  It is a generic framework to perform
157*4d5d8b54SAndroid Build Coastguard Worker   encapsulation of time-continuous bitstreams.  It does not know any
158*4d5d8b54SAndroid Build Coastguard Worker   specifics about the codec data that it encapsulates and is thus
159*4d5d8b54SAndroid Build Coastguard Worker   independent of any media codec.
160*4d5d8b54SAndroid Build Coastguard Worker
161*4d5d8b54SAndroid Build Coastguard Worker4. The Ogg bitstream format
162*4d5d8b54SAndroid Build Coastguard Worker
163*4d5d8b54SAndroid Build Coastguard Worker   A physical Ogg bitstream consists of multiple logical bitstreams
164*4d5d8b54SAndroid Build Coastguard Worker   interleaved in so-called "Pages".  Whole pages are taken in order
165*4d5d8b54SAndroid Build Coastguard Worker   from multiple logical bitstreams multiplexed at the page level.  The
166*4d5d8b54SAndroid Build Coastguard Worker   logical bitstreams are identified by a unique serial number in the
167*4d5d8b54SAndroid Build Coastguard Worker
168*4d5d8b54SAndroid Build Coastguard Worker
169*4d5d8b54SAndroid Build Coastguard Worker
170*4d5d8b54SAndroid Build Coastguard WorkerPfeiffer                     Informational                      [Page 3]
171*4d5d8b54SAndroid Build Coastguard Worker
172*4d5d8b54SAndroid Build Coastguard WorkerRFC 3533                          OGG                           May 2003
173*4d5d8b54SAndroid Build Coastguard Worker
174*4d5d8b54SAndroid Build Coastguard Worker
175*4d5d8b54SAndroid Build Coastguard Worker   header of each page of the physical bitstream.  This unique serial
176*4d5d8b54SAndroid Build Coastguard Worker   number is created randomly and does not have any connection to the
177*4d5d8b54SAndroid Build Coastguard Worker   content or encoder of the logical bitstream it represents.  Pages of
178*4d5d8b54SAndroid Build Coastguard Worker   all logical bitstreams are concurrently interleaved, but they need
179*4d5d8b54SAndroid Build Coastguard Worker   not be in a regular order - they are only required to be consecutive
180*4d5d8b54SAndroid Build Coastguard Worker   within the logical bitstream.  Ogg demultiplexing reconstructs the
181*4d5d8b54SAndroid Build Coastguard Worker   original logical bitstreams from the physical bitstream by taking the
182*4d5d8b54SAndroid Build Coastguard Worker   pages in order from the physical bitstream and redirecting them into
183*4d5d8b54SAndroid Build Coastguard Worker   the appropriate logical decoding entity.
184*4d5d8b54SAndroid Build Coastguard Worker
185*4d5d8b54SAndroid Build Coastguard Worker   Each Ogg page contains only one type of data as it belongs to one
186*4d5d8b54SAndroid Build Coastguard Worker   logical bitstream only.  Pages are of variable size and have a page
187*4d5d8b54SAndroid Build Coastguard Worker   header containing encapsulation and error recovery information.  Each
188*4d5d8b54SAndroid Build Coastguard Worker   logical bitstream in a physical Ogg bitstream starts with a special
189*4d5d8b54SAndroid Build Coastguard Worker   start page (bos=beginning of stream) and ends with a special page
190*4d5d8b54SAndroid Build Coastguard Worker   (eos=end of stream).
191*4d5d8b54SAndroid Build Coastguard Worker
192*4d5d8b54SAndroid Build Coastguard Worker   The bos page contains information to uniquely identify the codec type
193*4d5d8b54SAndroid Build Coastguard Worker   and MAY contain information to set up the decoding process.  The bos
194*4d5d8b54SAndroid Build Coastguard Worker   page SHOULD also contain information about the encoded media - for
195*4d5d8b54SAndroid Build Coastguard Worker   example, for audio, it should contain the sample rate and number of
196*4d5d8b54SAndroid Build Coastguard Worker   channels.  By convention, the first bytes of the bos page contain
197*4d5d8b54SAndroid Build Coastguard Worker   magic data that uniquely identifies the required codec.  It is the
198*4d5d8b54SAndroid Build Coastguard Worker   responsibility of anyone fielding a new codec to make sure it is
199*4d5d8b54SAndroid Build Coastguard Worker   possible to reliably distinguish his/her codec from all other codecs
200*4d5d8b54SAndroid Build Coastguard Worker   in use.  There is no fixed way to detect the end of the codec-
201*4d5d8b54SAndroid Build Coastguard Worker   identifying marker.  The format of the bos page is dependent on the
202*4d5d8b54SAndroid Build Coastguard Worker   codec and therefore MUST be given in the encapsulation specification
203*4d5d8b54SAndroid Build Coastguard Worker   of that logical bitstream type.  Ogg also allows but does not require
204*4d5d8b54SAndroid Build Coastguard Worker   secondary header packets after the bos page for logical bitstreams
205*4d5d8b54SAndroid Build Coastguard Worker   and these must also precede any data packets in any logical
206*4d5d8b54SAndroid Build Coastguard Worker   bitstream.  These subsequent header packets are framed into an
207*4d5d8b54SAndroid Build Coastguard Worker   integral number of pages, which will not contain any data packets.
208*4d5d8b54SAndroid Build Coastguard Worker   So, a physical bitstream begins with the bos pages of all logical
209*4d5d8b54SAndroid Build Coastguard Worker   bitstreams containing one initial header packet per page, followed by
210*4d5d8b54SAndroid Build Coastguard Worker   the subsidiary header packets of all streams, followed by pages
211*4d5d8b54SAndroid Build Coastguard Worker   containing data packets.
212*4d5d8b54SAndroid Build Coastguard Worker
213*4d5d8b54SAndroid Build Coastguard Worker   The encapsulation specification for one or more logical bitstreams is
214*4d5d8b54SAndroid Build Coastguard Worker   called a "media mapping".  An example for a media mapping is "Ogg
215*4d5d8b54SAndroid Build Coastguard Worker   Vorbis", which uses the Ogg framework to encapsulate Vorbis-encoded
216*4d5d8b54SAndroid Build Coastguard Worker   audio data for stream-based storage (such as files) and transport
217*4d5d8b54SAndroid Build Coastguard Worker   (such as TCP streams or pipes).  Ogg Vorbis provides the name and
218*4d5d8b54SAndroid Build Coastguard Worker   revision of the Vorbis codec, the audio rate and the audio quality on
219*4d5d8b54SAndroid Build Coastguard Worker   the Ogg Vorbis bos page.  It also uses two additional header pages
220*4d5d8b54SAndroid Build Coastguard Worker   per logical bitstream.  The Ogg Vorbis bos page starts with the byte
221*4d5d8b54SAndroid Build Coastguard Worker   0x01, followed by "vorbis" (a total of 7 bytes of identifier).
222*4d5d8b54SAndroid Build Coastguard Worker
223*4d5d8b54SAndroid Build Coastguard Worker
224*4d5d8b54SAndroid Build Coastguard Worker
225*4d5d8b54SAndroid Build Coastguard Worker
226*4d5d8b54SAndroid Build Coastguard WorkerPfeiffer                     Informational                      [Page 4]
227*4d5d8b54SAndroid Build Coastguard Worker
228*4d5d8b54SAndroid Build Coastguard WorkerRFC 3533                          OGG                           May 2003
229*4d5d8b54SAndroid Build Coastguard Worker
230*4d5d8b54SAndroid Build Coastguard Worker
231*4d5d8b54SAndroid Build Coastguard Worker   Ogg knows two types of multiplexing: concurrent multiplexing (so-
232*4d5d8b54SAndroid Build Coastguard Worker   called "Grouping") and sequential multiplexing (so-called
233*4d5d8b54SAndroid Build Coastguard Worker   "Chaining").  Grouping defines how to interleave several logical
234*4d5d8b54SAndroid Build Coastguard Worker   bitstreams page-wise in the same physical bitstream.  Grouping is for
235*4d5d8b54SAndroid Build Coastguard Worker   example needed for interleaving a video stream with several
236*4d5d8b54SAndroid Build Coastguard Worker   synchronised audio tracks using different codecs in different logical
237*4d5d8b54SAndroid Build Coastguard Worker   bitstreams.  Chaining on the other hand, is defined to provide a
238*4d5d8b54SAndroid Build Coastguard Worker   simple mechanism to concatenate physical Ogg bitstreams, as is often
239*4d5d8b54SAndroid Build Coastguard Worker   needed for streaming applications.
240*4d5d8b54SAndroid Build Coastguard Worker
241*4d5d8b54SAndroid Build Coastguard Worker   In grouping, all bos pages of all logical bitstreams MUST appear
242*4d5d8b54SAndroid Build Coastguard Worker   together at the beginning of the Ogg bitstream.  The media mapping
243*4d5d8b54SAndroid Build Coastguard Worker   specifies the order of the initial pages.  For example, the grouping
244*4d5d8b54SAndroid Build Coastguard Worker   of a specific Ogg video and Ogg audio bitstream may specify that the
245*4d5d8b54SAndroid Build Coastguard Worker   physical bitstream MUST begin with the bos page of the logical video
246*4d5d8b54SAndroid Build Coastguard Worker   bitstream, followed by the bos page of the audio bitstream.  Unlike
247*4d5d8b54SAndroid Build Coastguard Worker   bos pages, eos pages for the logical bitstreams need not all occur
248*4d5d8b54SAndroid Build Coastguard Worker   contiguously.  Eos pages may be 'nil' pages, that is, pages
249*4d5d8b54SAndroid Build Coastguard Worker   containing no content but simply a page header with position
250*4d5d8b54SAndroid Build Coastguard Worker   information and the eos flag set in the page header.  Each grouped
251*4d5d8b54SAndroid Build Coastguard Worker   logical bitstream MUST have a unique serial number within the scope
252*4d5d8b54SAndroid Build Coastguard Worker   of the physical bitstream.
253*4d5d8b54SAndroid Build Coastguard Worker
254*4d5d8b54SAndroid Build Coastguard Worker   In chaining, complete logical bitstreams are concatenated.  The
255*4d5d8b54SAndroid Build Coastguard Worker   bitstreams do not overlap, i.e., the eos page of a given logical
256*4d5d8b54SAndroid Build Coastguard Worker   bitstream is immediately followed by the bos page of the next.  Each
257*4d5d8b54SAndroid Build Coastguard Worker   chained logical bitstream MUST have a unique serial number within the
258*4d5d8b54SAndroid Build Coastguard Worker   scope of the physical bitstream.
259*4d5d8b54SAndroid Build Coastguard Worker
260*4d5d8b54SAndroid Build Coastguard Worker   It is possible to consecutively chain groups of concurrently
261*4d5d8b54SAndroid Build Coastguard Worker   multiplexed bitstreams.  The groups, when unchained, MUST stand on
262*4d5d8b54SAndroid Build Coastguard Worker   their own as a valid concurrently multiplexed bitstream.  The
263*4d5d8b54SAndroid Build Coastguard Worker   following diagram shows a schematic example of such a physical
264*4d5d8b54SAndroid Build Coastguard Worker   bitstream that obeys all the rules of both grouped and chained
265*4d5d8b54SAndroid Build Coastguard Worker   multiplexed bitstreams.
266*4d5d8b54SAndroid Build Coastguard Worker
267*4d5d8b54SAndroid Build Coastguard Worker               physical bitstream with pages of
268*4d5d8b54SAndroid Build Coastguard Worker          different logical bitstreams grouped and chained
269*4d5d8b54SAndroid Build Coastguard Worker      -------------------------------------------------------------
270*4d5d8b54SAndroid Build Coastguard Worker      |*A*|*B*|*C*|A|A|C|B|A|B|#A#|C|...|B|C|#B#|#C#|*D*|D|...|#D#|
271*4d5d8b54SAndroid Build Coastguard Worker      -------------------------------------------------------------
272*4d5d8b54SAndroid Build Coastguard Worker       bos bos bos             eos           eos eos bos       eos
273*4d5d8b54SAndroid Build Coastguard Worker
274*4d5d8b54SAndroid Build Coastguard Worker   In this example, there are two chained physical bitstreams, the first
275*4d5d8b54SAndroid Build Coastguard Worker   of which is a grouped stream of three logical bitstreams A, B, and C.
276*4d5d8b54SAndroid Build Coastguard Worker   The second physical bitstream is chained after the end of the grouped
277*4d5d8b54SAndroid Build Coastguard Worker   bitstream, which ends after the last eos page of all its grouped
278*4d5d8b54SAndroid Build Coastguard Worker   logical bitstreams.  As can be seen, grouped bitstreams begin
279*4d5d8b54SAndroid Build Coastguard Worker
280*4d5d8b54SAndroid Build Coastguard Worker
281*4d5d8b54SAndroid Build Coastguard Worker
282*4d5d8b54SAndroid Build Coastguard WorkerPfeiffer                     Informational                      [Page 5]
283*4d5d8b54SAndroid Build Coastguard Worker
284*4d5d8b54SAndroid Build Coastguard WorkerRFC 3533                          OGG                           May 2003
285*4d5d8b54SAndroid Build Coastguard Worker
286*4d5d8b54SAndroid Build Coastguard Worker
287*4d5d8b54SAndroid Build Coastguard Worker   together - all of the bos pages MUST appear before any data pages.
288*4d5d8b54SAndroid Build Coastguard Worker   It can also be seen that pages of concurrently multiplexed bitstreams
289*4d5d8b54SAndroid Build Coastguard Worker   need not conform to a regular order.  And it can be seen that a
290*4d5d8b54SAndroid Build Coastguard Worker   grouped bitstream can end long before the other bitstreams in the
291*4d5d8b54SAndroid Build Coastguard Worker   group end.
292*4d5d8b54SAndroid Build Coastguard Worker
293*4d5d8b54SAndroid Build Coastguard Worker   Ogg does not know any specifics about the codec data except that each
294*4d5d8b54SAndroid Build Coastguard Worker   logical bitstream belongs to a different codec, the data from the
295*4d5d8b54SAndroid Build Coastguard Worker   codec comes in order and has position markers (so-called "Granule
296*4d5d8b54SAndroid Build Coastguard Worker   positions").  Ogg does not have a concept of 'time': it only knows
297*4d5d8b54SAndroid Build Coastguard Worker   about sequentially increasing, unitless position markers.  An
298*4d5d8b54SAndroid Build Coastguard Worker   application can only get temporal information through higher layers
299*4d5d8b54SAndroid Build Coastguard Worker   which have access to the codec APIs to assign and convert granule
300*4d5d8b54SAndroid Build Coastguard Worker   positions or time.
301*4d5d8b54SAndroid Build Coastguard Worker
302*4d5d8b54SAndroid Build Coastguard Worker   A specific definition of a media mapping using Ogg may put further
303*4d5d8b54SAndroid Build Coastguard Worker   constraints on its specific use of the Ogg bitstream format.  For
304*4d5d8b54SAndroid Build Coastguard Worker   example, a specific media mapping may require that all the eos pages
305*4d5d8b54SAndroid Build Coastguard Worker   for all grouped bitstreams need to appear in direct sequence.  An
306*4d5d8b54SAndroid Build Coastguard Worker   example for a media mapping is the specification of "Ogg Vorbis".
307*4d5d8b54SAndroid Build Coastguard Worker   Another example is the upcoming "Ogg Theora" specification which
308*4d5d8b54SAndroid Build Coastguard Worker   encapsulates Theora-encoded video data and usually comes multiplexed
309*4d5d8b54SAndroid Build Coastguard Worker   with a Vorbis stream for an Ogg containing synchronised audio and
310*4d5d8b54SAndroid Build Coastguard Worker   video.  As Ogg does not specify temporal relationships between the
311*4d5d8b54SAndroid Build Coastguard Worker   encapsulated concurrently multiplexed bitstreams, the temporal
312*4d5d8b54SAndroid Build Coastguard Worker   synchronisation between the audio and video stream will be specified
313*4d5d8b54SAndroid Build Coastguard Worker   in this media mapping.  To enable streaming, pages from various
314*4d5d8b54SAndroid Build Coastguard Worker   logical bitstreams will typically be interleaved in chronological
315*4d5d8b54SAndroid Build Coastguard Worker   order.
316*4d5d8b54SAndroid Build Coastguard Worker
317*4d5d8b54SAndroid Build Coastguard Worker5. The encapsulation process
318*4d5d8b54SAndroid Build Coastguard Worker
319*4d5d8b54SAndroid Build Coastguard Worker   The process of multiplexing different logical bitstreams happens at
320*4d5d8b54SAndroid Build Coastguard Worker   the level of pages as described above.  The bitstreams provided by
321*4d5d8b54SAndroid Build Coastguard Worker   encoders are however handed over to Ogg as so-called "Packets" with
322*4d5d8b54SAndroid Build Coastguard Worker   packet boundaries dependent on the encoding format.  The process of
323*4d5d8b54SAndroid Build Coastguard Worker   encapsulating packets into pages will be described now.
324*4d5d8b54SAndroid Build Coastguard Worker
325*4d5d8b54SAndroid Build Coastguard Worker   From Ogg's perspective, packets can be of any arbitrary size.  A
326*4d5d8b54SAndroid Build Coastguard Worker   specific media mapping will define how to group or break up packets
327*4d5d8b54SAndroid Build Coastguard Worker   from a specific media encoder.  As Ogg pages have a maximum size of
328*4d5d8b54SAndroid Build Coastguard Worker   about 64 kBytes, sometimes a packet has to be distributed over
329*4d5d8b54SAndroid Build Coastguard Worker   several pages.  To simplify that process, Ogg divides each packet
330*4d5d8b54SAndroid Build Coastguard Worker   into 255 byte long chunks plus a final shorter chunk.  These chunks
331*4d5d8b54SAndroid Build Coastguard Worker   are called "Ogg Segments".  They are only a logical construct and do
332*4d5d8b54SAndroid Build Coastguard Worker   not have a header for themselves.
333*4d5d8b54SAndroid Build Coastguard Worker
334*4d5d8b54SAndroid Build Coastguard Worker
335*4d5d8b54SAndroid Build Coastguard Worker
336*4d5d8b54SAndroid Build Coastguard Worker
337*4d5d8b54SAndroid Build Coastguard Worker
338*4d5d8b54SAndroid Build Coastguard WorkerPfeiffer                     Informational                      [Page 6]
339*4d5d8b54SAndroid Build Coastguard Worker
340*4d5d8b54SAndroid Build Coastguard WorkerRFC 3533                          OGG                           May 2003
341*4d5d8b54SAndroid Build Coastguard Worker
342*4d5d8b54SAndroid Build Coastguard Worker
343*4d5d8b54SAndroid Build Coastguard Worker   A group of contiguous segments is wrapped into a variable length page
344*4d5d8b54SAndroid Build Coastguard Worker   preceded by a header.  A segment table in the page header tells about
345*4d5d8b54SAndroid Build Coastguard Worker   the "Lacing values" (sizes) of the segments included in the page.  A
346*4d5d8b54SAndroid Build Coastguard Worker   flag in the page header tells whether a page contains a packet
347*4d5d8b54SAndroid Build Coastguard Worker   continued from a previous page.  Note that a lacing value of 255
348*4d5d8b54SAndroid Build Coastguard Worker   implies that a second lacing value follows in the packet, and a value
349*4d5d8b54SAndroid Build Coastguard Worker   of less than 255 marks the end of the packet after that many
350*4d5d8b54SAndroid Build Coastguard Worker   additional bytes.  A packet of 255 bytes (or a multiple of 255 bytes)
351*4d5d8b54SAndroid Build Coastguard Worker   is terminated by a lacing value of 0.  Note also that a 'nil' (zero
352*4d5d8b54SAndroid Build Coastguard Worker   length) packet is not an error; it consists of nothing more than a
353*4d5d8b54SAndroid Build Coastguard Worker   lacing value of zero in the header.
354*4d5d8b54SAndroid Build Coastguard Worker
355*4d5d8b54SAndroid Build Coastguard Worker   The encoding is optimized for speed and the expected case of the
356*4d5d8b54SAndroid Build Coastguard Worker   majority of packets being between 50 and 200 bytes large.  This is a
357*4d5d8b54SAndroid Build Coastguard Worker   design justification rather than a recommendation.  This encoding
358*4d5d8b54SAndroid Build Coastguard Worker   both avoids imposing a maximum packet size as well as imposing
359*4d5d8b54SAndroid Build Coastguard Worker   minimum overhead on small packets.  In contrast, e.g., simply using
360*4d5d8b54SAndroid Build Coastguard Worker   two bytes at the head of every packet and having a max packet size of
361*4d5d8b54SAndroid Build Coastguard Worker   32 kBytes would always penalize small packets (< 255 bytes, the
362*4d5d8b54SAndroid Build Coastguard Worker   typical case) with twice the segmentation overhead.  Using the lacing
363*4d5d8b54SAndroid Build Coastguard Worker   values as suggested, small packets see the minimum possible byte-
364*4d5d8b54SAndroid Build Coastguard Worker   aligned overhead (1 byte) and large packets (>512 bytes) see a fairly
365*4d5d8b54SAndroid Build Coastguard Worker   constant ~0.5% overhead on encoding space.
366*4d5d8b54SAndroid Build Coastguard Worker
367*4d5d8b54SAndroid Build Coastguard Worker
368*4d5d8b54SAndroid Build Coastguard Worker
369*4d5d8b54SAndroid Build Coastguard Worker
370*4d5d8b54SAndroid Build Coastguard Worker
371*4d5d8b54SAndroid Build Coastguard Worker
372*4d5d8b54SAndroid Build Coastguard Worker
373*4d5d8b54SAndroid Build Coastguard Worker
374*4d5d8b54SAndroid Build Coastguard Worker
375*4d5d8b54SAndroid Build Coastguard Worker
376*4d5d8b54SAndroid Build Coastguard Worker
377*4d5d8b54SAndroid Build Coastguard Worker
378*4d5d8b54SAndroid Build Coastguard Worker
379*4d5d8b54SAndroid Build Coastguard Worker
380*4d5d8b54SAndroid Build Coastguard Worker
381*4d5d8b54SAndroid Build Coastguard Worker
382*4d5d8b54SAndroid Build Coastguard Worker
383*4d5d8b54SAndroid Build Coastguard Worker
384*4d5d8b54SAndroid Build Coastguard Worker
385*4d5d8b54SAndroid Build Coastguard Worker
386*4d5d8b54SAndroid Build Coastguard Worker
387*4d5d8b54SAndroid Build Coastguard Worker
388*4d5d8b54SAndroid Build Coastguard Worker
389*4d5d8b54SAndroid Build Coastguard Worker
390*4d5d8b54SAndroid Build Coastguard Worker
391*4d5d8b54SAndroid Build Coastguard Worker
392*4d5d8b54SAndroid Build Coastguard Worker
393*4d5d8b54SAndroid Build Coastguard Worker
394*4d5d8b54SAndroid Build Coastguard WorkerPfeiffer                     Informational                      [Page 7]
395*4d5d8b54SAndroid Build Coastguard Worker
396*4d5d8b54SAndroid Build Coastguard WorkerRFC 3533                          OGG                           May 2003
397*4d5d8b54SAndroid Build Coastguard Worker
398*4d5d8b54SAndroid Build Coastguard Worker
399*4d5d8b54SAndroid Build Coastguard Worker   The following diagram shows a schematic example of a media mapping
400*4d5d8b54SAndroid Build Coastguard Worker   using Ogg and grouped logical bitstreams:
401*4d5d8b54SAndroid Build Coastguard Worker
402*4d5d8b54SAndroid Build Coastguard Worker          logical bitstream with packet boundaries
403*4d5d8b54SAndroid Build Coastguard Worker -----------------------------------------------------------------
404*4d5d8b54SAndroid Build Coastguard Worker > |       packet_1             | packet_2         | packet_3 |  <
405*4d5d8b54SAndroid Build Coastguard Worker -----------------------------------------------------------------
406*4d5d8b54SAndroid Build Coastguard Worker
407*4d5d8b54SAndroid Build Coastguard Worker                     |segmentation (logically only)
408*4d5d8b54SAndroid Build Coastguard Worker                     v
409*4d5d8b54SAndroid Build Coastguard Worker
410*4d5d8b54SAndroid Build Coastguard Worker      packet_1 (5 segments)          packet_2 (4 segs)    p_3 (2 segs)
411*4d5d8b54SAndroid Build Coastguard Worker     ------------------------------ -------------------- ------------
412*4d5d8b54SAndroid Build Coastguard Worker ..  |seg_1|seg_2|seg_3|seg_4|s_5 | |seg_1|seg_2|seg_3|| |seg_1|s_2 | ..
413*4d5d8b54SAndroid Build Coastguard Worker     ------------------------------ -------------------- ------------
414*4d5d8b54SAndroid Build Coastguard Worker
415*4d5d8b54SAndroid Build Coastguard Worker                     | page encapsulation
416*4d5d8b54SAndroid Build Coastguard Worker                     v
417*4d5d8b54SAndroid Build Coastguard Worker
418*4d5d8b54SAndroid Build Coastguard Worker page_1 (packet_1 data)   page_2 (pket_1 data)   page_3 (packet_2 data)
419*4d5d8b54SAndroid Build Coastguard Worker------------------------  ----------------  ------------------------
420*4d5d8b54SAndroid Build Coastguard Worker|H|------------------- |  |H|----------- |  |H|------------------- |
421*4d5d8b54SAndroid Build Coastguard Worker|D||seg_1|seg_2|seg_3| |  |D|seg_4|s_5 | |  |D||seg_1|seg_2|seg_3| | ...
422*4d5d8b54SAndroid Build Coastguard Worker|R|------------------- |  |R|----------- |  |R|------------------- |
423*4d5d8b54SAndroid Build Coastguard Worker------------------------  ----------------  ------------------------
424*4d5d8b54SAndroid Build Coastguard Worker
425*4d5d8b54SAndroid Build Coastguard Worker                    |
426*4d5d8b54SAndroid Build Coastguard Workerpages of            |
427*4d5d8b54SAndroid Build Coastguard Workerother    --------|  |
428*4d5d8b54SAndroid Build Coastguard Workerlogical         -------
429*4d5d8b54SAndroid Build Coastguard Workerbitstreams      | MUX |
430*4d5d8b54SAndroid Build Coastguard Worker                -------
431*4d5d8b54SAndroid Build Coastguard Worker                   |
432*4d5d8b54SAndroid Build Coastguard Worker                   v
433*4d5d8b54SAndroid Build Coastguard Worker
434*4d5d8b54SAndroid Build Coastguard Worker              page_1  page_2          page_3
435*4d5d8b54SAndroid Build Coastguard Worker      ------  ------  -------  -----  -------
436*4d5d8b54SAndroid Build Coastguard Worker ...  ||   |  ||   |  ||    |  ||  |  ||    |  ...
437*4d5d8b54SAndroid Build Coastguard Worker      ------  ------  -------  -----  -------
438*4d5d8b54SAndroid Build Coastguard Worker              physical Ogg bitstream
439*4d5d8b54SAndroid Build Coastguard Worker
440*4d5d8b54SAndroid Build Coastguard Worker   In this example we take a snapshot of the encapsulation process of
441*4d5d8b54SAndroid Build Coastguard Worker   one logical bitstream.  We can see part of that bitstream's
442*4d5d8b54SAndroid Build Coastguard Worker   subdivision into packets as provided by the codec.  The Ogg
443*4d5d8b54SAndroid Build Coastguard Worker   encapsulation process chops up the packets into segments.  The
444*4d5d8b54SAndroid Build Coastguard Worker   packets in this example are rather large such that packet_1 is split
445*4d5d8b54SAndroid Build Coastguard Worker   into 5 segments - 4 segments with 255 bytes and a final smaller one.
446*4d5d8b54SAndroid Build Coastguard Worker   Packet_2 is split into 4 segments - 3 segments with 255 bytes and a
447*4d5d8b54SAndroid Build Coastguard Worker
448*4d5d8b54SAndroid Build Coastguard Worker
449*4d5d8b54SAndroid Build Coastguard Worker
450*4d5d8b54SAndroid Build Coastguard WorkerPfeiffer                     Informational                      [Page 8]
451*4d5d8b54SAndroid Build Coastguard Worker
452*4d5d8b54SAndroid Build Coastguard WorkerRFC 3533                          OGG                           May 2003
453*4d5d8b54SAndroid Build Coastguard Worker
454*4d5d8b54SAndroid Build Coastguard Worker
455*4d5d8b54SAndroid Build Coastguard Worker   final very small one - and packet_3 is split into two segments.  The
456*4d5d8b54SAndroid Build Coastguard Worker   encapsulation process then creates pages, which are quite small in
457*4d5d8b54SAndroid Build Coastguard Worker   this example.  Page_1 consists of the first three segments of
458*4d5d8b54SAndroid Build Coastguard Worker   packet_1, page_2 contains the remaining 2 segments from packet_1, and
459*4d5d8b54SAndroid Build Coastguard Worker   page_3 contains the first three pages of packet_2.  Finally, this
460*4d5d8b54SAndroid Build Coastguard Worker   logical bitstream is multiplexed into a physical Ogg bitstream with
461*4d5d8b54SAndroid Build Coastguard Worker   pages of other logical bitstreams.
462*4d5d8b54SAndroid Build Coastguard Worker
463*4d5d8b54SAndroid Build Coastguard Worker6. The Ogg page format
464*4d5d8b54SAndroid Build Coastguard Worker
465*4d5d8b54SAndroid Build Coastguard Worker   A physical Ogg bitstream consists of a sequence of concatenated
466*4d5d8b54SAndroid Build Coastguard Worker   pages.  Pages are of variable size, usually 4-8 kB, maximum 65307
467*4d5d8b54SAndroid Build Coastguard Worker   bytes.  A page header contains all the information needed to
468*4d5d8b54SAndroid Build Coastguard Worker   demultiplex the logical bitstreams out of the physical bitstream and
469*4d5d8b54SAndroid Build Coastguard Worker   to perform basic error recovery and landmarks for seeking.  Each page
470*4d5d8b54SAndroid Build Coastguard Worker   is a self-contained entity such that the page decode mechanism can
471*4d5d8b54SAndroid Build Coastguard Worker   recognize, verify, and handle single pages at a time without
472*4d5d8b54SAndroid Build Coastguard Worker   requiring the overall bitstream.
473*4d5d8b54SAndroid Build Coastguard Worker
474*4d5d8b54SAndroid Build Coastguard Worker   The Ogg page header has the following format:
475*4d5d8b54SAndroid Build Coastguard Worker
476*4d5d8b54SAndroid Build Coastguard Worker 0                   1                   2                   3
477*4d5d8b54SAndroid Build Coastguard Worker 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| Byte
478*4d5d8b54SAndroid Build Coastguard Worker+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
479*4d5d8b54SAndroid Build Coastguard Worker| capture_pattern: Magic number for page start "OggS"           | 0-3
480*4d5d8b54SAndroid Build Coastguard Worker+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
481*4d5d8b54SAndroid Build Coastguard Worker| version       | header_type   | granule_position              | 4-7
482*4d5d8b54SAndroid Build Coastguard Worker+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
483*4d5d8b54SAndroid Build Coastguard Worker|                                                               | 8-11
484*4d5d8b54SAndroid Build Coastguard Worker+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
485*4d5d8b54SAndroid Build Coastguard Worker|                               | bitstream_serial_number       | 12-15
486*4d5d8b54SAndroid Build Coastguard Worker+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
487*4d5d8b54SAndroid Build Coastguard Worker|                               | page_sequence_number          | 16-19
488*4d5d8b54SAndroid Build Coastguard Worker+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
489*4d5d8b54SAndroid Build Coastguard Worker|                               | CRC_checksum                  | 20-23
490*4d5d8b54SAndroid Build Coastguard Worker+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
491*4d5d8b54SAndroid Build Coastguard Worker|                               |page_segments  | segment_table | 24-27
492*4d5d8b54SAndroid Build Coastguard Worker+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
493*4d5d8b54SAndroid Build Coastguard Worker| ...                                                           | 28-
494*4d5d8b54SAndroid Build Coastguard Worker+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
495*4d5d8b54SAndroid Build Coastguard Worker
496*4d5d8b54SAndroid Build Coastguard Worker   The LSb (least significant bit) comes first in the Bytes.  Fields
497*4d5d8b54SAndroid Build Coastguard Worker   with more than one byte length are encoded LSB (least significant
498*4d5d8b54SAndroid Build Coastguard Worker   byte) first.
499*4d5d8b54SAndroid Build Coastguard Worker
500*4d5d8b54SAndroid Build Coastguard Worker
501*4d5d8b54SAndroid Build Coastguard Worker
502*4d5d8b54SAndroid Build Coastguard Worker
503*4d5d8b54SAndroid Build Coastguard Worker
504*4d5d8b54SAndroid Build Coastguard Worker
505*4d5d8b54SAndroid Build Coastguard Worker
506*4d5d8b54SAndroid Build Coastguard WorkerPfeiffer                     Informational                      [Page 9]
507*4d5d8b54SAndroid Build Coastguard Worker
508*4d5d8b54SAndroid Build Coastguard WorkerRFC 3533                          OGG                           May 2003
509*4d5d8b54SAndroid Build Coastguard Worker
510*4d5d8b54SAndroid Build Coastguard Worker
511*4d5d8b54SAndroid Build Coastguard Worker   The fields in the page header have the following meaning:
512*4d5d8b54SAndroid Build Coastguard Worker
513*4d5d8b54SAndroid Build Coastguard Worker   1. capture_pattern: a 4 Byte field that signifies the beginning of a
514*4d5d8b54SAndroid Build Coastguard Worker      page.  It contains the magic numbers:
515*4d5d8b54SAndroid Build Coastguard Worker
516*4d5d8b54SAndroid Build Coastguard Worker            0x4f 'O'
517*4d5d8b54SAndroid Build Coastguard Worker
518*4d5d8b54SAndroid Build Coastguard Worker            0x67 'g'
519*4d5d8b54SAndroid Build Coastguard Worker
520*4d5d8b54SAndroid Build Coastguard Worker            0x67 'g'
521*4d5d8b54SAndroid Build Coastguard Worker
522*4d5d8b54SAndroid Build Coastguard Worker            0x53 'S'
523*4d5d8b54SAndroid Build Coastguard Worker
524*4d5d8b54SAndroid Build Coastguard Worker      It helps a decoder to find the page boundaries and regain
525*4d5d8b54SAndroid Build Coastguard Worker      synchronisation after parsing a corrupted stream.  Once the
526*4d5d8b54SAndroid Build Coastguard Worker      capture pattern is found, the decoder verifies page sync and
527*4d5d8b54SAndroid Build Coastguard Worker      integrity by computing and comparing the checksum.
528*4d5d8b54SAndroid Build Coastguard Worker
529*4d5d8b54SAndroid Build Coastguard Worker   2. stream_structure_version: 1 Byte signifying the version number of
530*4d5d8b54SAndroid Build Coastguard Worker      the Ogg file format used in this stream (this document specifies
531*4d5d8b54SAndroid Build Coastguard Worker      version 0).
532*4d5d8b54SAndroid Build Coastguard Worker
533*4d5d8b54SAndroid Build Coastguard Worker   3. header_type_flag: the bits in this 1 Byte field identify the
534*4d5d8b54SAndroid Build Coastguard Worker      specific type of this page.
535*4d5d8b54SAndroid Build Coastguard Worker
536*4d5d8b54SAndroid Build Coastguard Worker      *  bit 0x01
537*4d5d8b54SAndroid Build Coastguard Worker
538*4d5d8b54SAndroid Build Coastguard Worker         set: page contains data of a packet continued from the previous
539*4d5d8b54SAndroid Build Coastguard Worker            page
540*4d5d8b54SAndroid Build Coastguard Worker
541*4d5d8b54SAndroid Build Coastguard Worker         unset: page contains a fresh packet
542*4d5d8b54SAndroid Build Coastguard Worker
543*4d5d8b54SAndroid Build Coastguard Worker      *  bit 0x02
544*4d5d8b54SAndroid Build Coastguard Worker
545*4d5d8b54SAndroid Build Coastguard Worker         set: this is the first page of a logical bitstream (bos)
546*4d5d8b54SAndroid Build Coastguard Worker
547*4d5d8b54SAndroid Build Coastguard Worker         unset: this page is not a first page
548*4d5d8b54SAndroid Build Coastguard Worker
549*4d5d8b54SAndroid Build Coastguard Worker      *  bit 0x04
550*4d5d8b54SAndroid Build Coastguard Worker
551*4d5d8b54SAndroid Build Coastguard Worker         set: this is the last page of a logical bitstream (eos)
552*4d5d8b54SAndroid Build Coastguard Worker
553*4d5d8b54SAndroid Build Coastguard Worker         unset: this page is not a last page
554*4d5d8b54SAndroid Build Coastguard Worker
555*4d5d8b54SAndroid Build Coastguard Worker   4. granule_position: an 8 Byte field containing position information.
556*4d5d8b54SAndroid Build Coastguard Worker      For example, for an audio stream, it MAY contain the total number
557*4d5d8b54SAndroid Build Coastguard Worker      of PCM samples encoded after including all frames finished on this
558*4d5d8b54SAndroid Build Coastguard Worker      page.  For a video stream it MAY contain the total number of video
559*4d5d8b54SAndroid Build Coastguard Worker
560*4d5d8b54SAndroid Build Coastguard Worker
561*4d5d8b54SAndroid Build Coastguard Worker
562*4d5d8b54SAndroid Build Coastguard WorkerPfeiffer                     Informational                     [Page 10]
563*4d5d8b54SAndroid Build Coastguard Worker
564*4d5d8b54SAndroid Build Coastguard WorkerRFC 3533                          OGG                           May 2003
565*4d5d8b54SAndroid Build Coastguard Worker
566*4d5d8b54SAndroid Build Coastguard Worker
567*4d5d8b54SAndroid Build Coastguard Worker      frames encoded after this page.  This is a hint for the decoder
568*4d5d8b54SAndroid Build Coastguard Worker      and gives it some timing and position information.  Its meaning is
569*4d5d8b54SAndroid Build Coastguard Worker      dependent on the codec for that logical bitstream and specified in
570*4d5d8b54SAndroid Build Coastguard Worker      a specific media mapping.  A special value of -1 (in two's
571*4d5d8b54SAndroid Build Coastguard Worker      complement) indicates that no packets finish on this page.
572*4d5d8b54SAndroid Build Coastguard Worker
573*4d5d8b54SAndroid Build Coastguard Worker   5. bitstream_serial_number: a 4 Byte field containing the unique
574*4d5d8b54SAndroid Build Coastguard Worker      serial number by which the logical bitstream is identified.
575*4d5d8b54SAndroid Build Coastguard Worker
576*4d5d8b54SAndroid Build Coastguard Worker   6. page_sequence_number: a 4 Byte field containing the sequence
577*4d5d8b54SAndroid Build Coastguard Worker      number of the page so the decoder can identify page loss.  This
578*4d5d8b54SAndroid Build Coastguard Worker      sequence number is increasing on each logical bitstream
579*4d5d8b54SAndroid Build Coastguard Worker      separately.
580*4d5d8b54SAndroid Build Coastguard Worker
581*4d5d8b54SAndroid Build Coastguard Worker   7. CRC_checksum: a 4 Byte field containing a 32 bit CRC checksum of
582*4d5d8b54SAndroid Build Coastguard Worker      the page (including header with zero CRC field and page content).
583*4d5d8b54SAndroid Build Coastguard Worker      The generator polynomial is 0x04c11db7.
584*4d5d8b54SAndroid Build Coastguard Worker
585*4d5d8b54SAndroid Build Coastguard Worker   8. number_page_segments: 1 Byte giving the number of segment entries
586*4d5d8b54SAndroid Build Coastguard Worker      encoded in the segment table.
587*4d5d8b54SAndroid Build Coastguard Worker
588*4d5d8b54SAndroid Build Coastguard Worker   9. segment_table: number_page_segments Bytes containing the lacing
589*4d5d8b54SAndroid Build Coastguard Worker      values of all segments in this page.  Each Byte contains one
590*4d5d8b54SAndroid Build Coastguard Worker      lacing value.
591*4d5d8b54SAndroid Build Coastguard Worker
592*4d5d8b54SAndroid Build Coastguard Worker   The total header size in bytes is given by:
593*4d5d8b54SAndroid Build Coastguard Worker   header_size = number_page_segments + 27 [Byte]
594*4d5d8b54SAndroid Build Coastguard Worker
595*4d5d8b54SAndroid Build Coastguard Worker   The total page size in Bytes is given by:
596*4d5d8b54SAndroid Build Coastguard Worker   page_size = header_size + sum(lacing_values: 1..number_page_segments)
597*4d5d8b54SAndroid Build Coastguard Worker   [Byte]
598*4d5d8b54SAndroid Build Coastguard Worker
599*4d5d8b54SAndroid Build Coastguard Worker7. Security Considerations
600*4d5d8b54SAndroid Build Coastguard Worker
601*4d5d8b54SAndroid Build Coastguard Worker   The Ogg encapsulation format is a container format and only
602*4d5d8b54SAndroid Build Coastguard Worker   encapsulates content (such as Vorbis-encoded audio).  It does not
603*4d5d8b54SAndroid Build Coastguard Worker   provide for any generic encryption or signing of itself or its
604*4d5d8b54SAndroid Build Coastguard Worker   contained content bitstreams.  However, it encapsulates any kind of
605*4d5d8b54SAndroid Build Coastguard Worker   content bitstream as long as there is a codec for it, and is thus
606*4d5d8b54SAndroid Build Coastguard Worker   able to contain encrypted and signed content data.  It is also
607*4d5d8b54SAndroid Build Coastguard Worker   possible to add an external security mechanism that encrypts or signs
608*4d5d8b54SAndroid Build Coastguard Worker   an Ogg physical bitstream and thus provides content confidentiality
609*4d5d8b54SAndroid Build Coastguard Worker   and authenticity.
610*4d5d8b54SAndroid Build Coastguard Worker
611*4d5d8b54SAndroid Build Coastguard Worker   As Ogg encapsulates binary data, it is possible to include executable
612*4d5d8b54SAndroid Build Coastguard Worker   content in an Ogg bitstream.  This can be an issue with applications
613*4d5d8b54SAndroid Build Coastguard Worker   that are implemented using the Ogg format, especially when Ogg is
614*4d5d8b54SAndroid Build Coastguard Worker   used for streaming or file transfer in a networking scenario.  As
615*4d5d8b54SAndroid Build Coastguard Worker
616*4d5d8b54SAndroid Build Coastguard Worker
617*4d5d8b54SAndroid Build Coastguard Worker
618*4d5d8b54SAndroid Build Coastguard WorkerPfeiffer                     Informational                     [Page 11]
619*4d5d8b54SAndroid Build Coastguard Worker
620*4d5d8b54SAndroid Build Coastguard WorkerRFC 3533                          OGG                           May 2003
621*4d5d8b54SAndroid Build Coastguard Worker
622*4d5d8b54SAndroid Build Coastguard Worker
623*4d5d8b54SAndroid Build Coastguard Worker   such, Ogg does not pose a threat there.  However, an application
624*4d5d8b54SAndroid Build Coastguard Worker   decoding Ogg and its encapsulated content bitstreams has to ensure
625*4d5d8b54SAndroid Build Coastguard Worker   correct handling of manipulated bitstreams, of buffer overflows and
626*4d5d8b54SAndroid Build Coastguard Worker   the like.
627*4d5d8b54SAndroid Build Coastguard Worker
628*4d5d8b54SAndroid Build Coastguard Worker8. References
629*4d5d8b54SAndroid Build Coastguard Worker
630*4d5d8b54SAndroid Build Coastguard Worker   [1] Walleij, L., "The application/ogg Media Type", RFC 3534, May
631*4d5d8b54SAndroid Build Coastguard Worker       2003.
632*4d5d8b54SAndroid Build Coastguard Worker
633*4d5d8b54SAndroid Build Coastguard Worker   [2] Bradner, S., "Key words for use in RFCs to Indicate Requirement
634*4d5d8b54SAndroid Build Coastguard Worker       Levels", BCP 14, RFC 2119, March 1997.
635*4d5d8b54SAndroid Build Coastguard Worker
636*4d5d8b54SAndroid Build Coastguard Worker
637*4d5d8b54SAndroid Build Coastguard Worker
638*4d5d8b54SAndroid Build Coastguard Worker
639*4d5d8b54SAndroid Build Coastguard Worker
640*4d5d8b54SAndroid Build Coastguard Worker
641*4d5d8b54SAndroid Build Coastguard Worker
642*4d5d8b54SAndroid Build Coastguard Worker
643*4d5d8b54SAndroid Build Coastguard Worker
644*4d5d8b54SAndroid Build Coastguard Worker
645*4d5d8b54SAndroid Build Coastguard Worker
646*4d5d8b54SAndroid Build Coastguard Worker
647*4d5d8b54SAndroid Build Coastguard Worker
648*4d5d8b54SAndroid Build Coastguard Worker
649*4d5d8b54SAndroid Build Coastguard Worker
650*4d5d8b54SAndroid Build Coastguard Worker
651*4d5d8b54SAndroid Build Coastguard Worker
652*4d5d8b54SAndroid Build Coastguard Worker
653*4d5d8b54SAndroid Build Coastguard Worker
654*4d5d8b54SAndroid Build Coastguard Worker
655*4d5d8b54SAndroid Build Coastguard Worker
656*4d5d8b54SAndroid Build Coastguard Worker
657*4d5d8b54SAndroid Build Coastguard Worker
658*4d5d8b54SAndroid Build Coastguard Worker
659*4d5d8b54SAndroid Build Coastguard Worker
660*4d5d8b54SAndroid Build Coastguard Worker
661*4d5d8b54SAndroid Build Coastguard Worker
662*4d5d8b54SAndroid Build Coastguard Worker
663*4d5d8b54SAndroid Build Coastguard Worker
664*4d5d8b54SAndroid Build Coastguard Worker
665*4d5d8b54SAndroid Build Coastguard Worker
666*4d5d8b54SAndroid Build Coastguard Worker
667*4d5d8b54SAndroid Build Coastguard Worker
668*4d5d8b54SAndroid Build Coastguard Worker
669*4d5d8b54SAndroid Build Coastguard Worker
670*4d5d8b54SAndroid Build Coastguard Worker
671*4d5d8b54SAndroid Build Coastguard Worker
672*4d5d8b54SAndroid Build Coastguard Worker
673*4d5d8b54SAndroid Build Coastguard Worker
674*4d5d8b54SAndroid Build Coastguard WorkerPfeiffer                     Informational                     [Page 12]
675*4d5d8b54SAndroid Build Coastguard Worker
676*4d5d8b54SAndroid Build Coastguard WorkerRFC 3533                          OGG                           May 2003
677*4d5d8b54SAndroid Build Coastguard Worker
678*4d5d8b54SAndroid Build Coastguard Worker
679*4d5d8b54SAndroid Build Coastguard WorkerAppendix A. Glossary of terms and abbreviations
680*4d5d8b54SAndroid Build Coastguard Worker
681*4d5d8b54SAndroid Build Coastguard Worker   bos page: The initial page (beginning of stream) of a logical
682*4d5d8b54SAndroid Build Coastguard Worker      bitstream which contains information to identify the codec type
683*4d5d8b54SAndroid Build Coastguard Worker      and other decoding-relevant information.
684*4d5d8b54SAndroid Build Coastguard Worker
685*4d5d8b54SAndroid Build Coastguard Worker   chaining (or sequential multiplexing): Concatenation of two or more
686*4d5d8b54SAndroid Build Coastguard Worker      complete physical Ogg bitstreams.
687*4d5d8b54SAndroid Build Coastguard Worker
688*4d5d8b54SAndroid Build Coastguard Worker   eos page: The final page (end of stream) of a logical bitstream.
689*4d5d8b54SAndroid Build Coastguard Worker
690*4d5d8b54SAndroid Build Coastguard Worker   granule position: An increasing position number for a specific
691*4d5d8b54SAndroid Build Coastguard Worker      logical bitstream stored in the page header.  Its meaning is
692*4d5d8b54SAndroid Build Coastguard Worker      dependent on the codec for that logical bitstream and specified in
693*4d5d8b54SAndroid Build Coastguard Worker      a specific media mapping.
694*4d5d8b54SAndroid Build Coastguard Worker
695*4d5d8b54SAndroid Build Coastguard Worker   grouping (or concurrent multiplexing): Interleaving of pages of
696*4d5d8b54SAndroid Build Coastguard Worker      several logical bitstreams into one complete physical Ogg
697*4d5d8b54SAndroid Build Coastguard Worker      bitstream under the restriction that all bos pages of all grouped
698*4d5d8b54SAndroid Build Coastguard Worker      logical bitstreams MUST appear before any data pages.
699*4d5d8b54SAndroid Build Coastguard Worker
700*4d5d8b54SAndroid Build Coastguard Worker   lacing value: An entry in the segment table of a page header
701*4d5d8b54SAndroid Build Coastguard Worker      representing the size of the related segment.
702*4d5d8b54SAndroid Build Coastguard Worker
703*4d5d8b54SAndroid Build Coastguard Worker   logical bitstream: A sequence of bits being the result of an encoded
704*4d5d8b54SAndroid Build Coastguard Worker      media stream.
705*4d5d8b54SAndroid Build Coastguard Worker
706*4d5d8b54SAndroid Build Coastguard Worker   media mapping: A specific use of the Ogg encapsulation format
707*4d5d8b54SAndroid Build Coastguard Worker      together with a specific (set of) codec(s).
708*4d5d8b54SAndroid Build Coastguard Worker
709*4d5d8b54SAndroid Build Coastguard Worker   (Ogg) packet: A subpart of a logical bitstream that is created by the
710*4d5d8b54SAndroid Build Coastguard Worker      encoder for that bitstream and represents a meaningful entity for
711*4d5d8b54SAndroid Build Coastguard Worker      the encoder, but only a sequence of bits to the Ogg encapsulation.
712*4d5d8b54SAndroid Build Coastguard Worker
713*4d5d8b54SAndroid Build Coastguard Worker   (Ogg) page: A physical bitstream consists of a sequence of Ogg pages
714*4d5d8b54SAndroid Build Coastguard Worker      containing data of one logical bitstream only.  It usually
715*4d5d8b54SAndroid Build Coastguard Worker      contains a group of contiguous segments of one packet only, but
716*4d5d8b54SAndroid Build Coastguard Worker      sometimes packets are too large and need to be split over several
717*4d5d8b54SAndroid Build Coastguard Worker      pages.
718*4d5d8b54SAndroid Build Coastguard Worker
719*4d5d8b54SAndroid Build Coastguard Worker   physical (Ogg) bitstream: The sequence of bits resulting from an Ogg
720*4d5d8b54SAndroid Build Coastguard Worker      encapsulation of one or several logical bitstreams.  It consists
721*4d5d8b54SAndroid Build Coastguard Worker      of a sequence of pages from the logical bitstreams with the
722*4d5d8b54SAndroid Build Coastguard Worker      restriction that the pages of one logical bitstream MUST come in
723*4d5d8b54SAndroid Build Coastguard Worker      their correct temporal order.
724*4d5d8b54SAndroid Build Coastguard Worker
725*4d5d8b54SAndroid Build Coastguard Worker
726*4d5d8b54SAndroid Build Coastguard Worker
727*4d5d8b54SAndroid Build Coastguard Worker
728*4d5d8b54SAndroid Build Coastguard Worker
729*4d5d8b54SAndroid Build Coastguard Worker
730*4d5d8b54SAndroid Build Coastguard WorkerPfeiffer                     Informational                     [Page 13]
731*4d5d8b54SAndroid Build Coastguard Worker
732*4d5d8b54SAndroid Build Coastguard WorkerRFC 3533                          OGG                           May 2003
733*4d5d8b54SAndroid Build Coastguard Worker
734*4d5d8b54SAndroid Build Coastguard Worker
735*4d5d8b54SAndroid Build Coastguard Worker   (Ogg) segment: The Ogg encapsulation process splits each packet into
736*4d5d8b54SAndroid Build Coastguard Worker      chunks of 255 bytes plus a last fractional chunk of less than 255
737*4d5d8b54SAndroid Build Coastguard Worker      bytes.  These chunks are called segments.
738*4d5d8b54SAndroid Build Coastguard Worker
739*4d5d8b54SAndroid Build Coastguard WorkerAppendix B. Acknowledgements
740*4d5d8b54SAndroid Build Coastguard Worker
741*4d5d8b54SAndroid Build Coastguard Worker   The author gratefully acknowledges the work that Christopher
742*4d5d8b54SAndroid Build Coastguard Worker   Montgomery  and the Xiph.Org foundation have done in defining the Ogg
743*4d5d8b54SAndroid Build Coastguard Worker   multimedia project and as part of it the open file format described
744*4d5d8b54SAndroid Build Coastguard Worker   in this document.  The author hopes that providing this document to
745*4d5d8b54SAndroid Build Coastguard Worker   the Internet community will help in promoting the Ogg multimedia
746*4d5d8b54SAndroid Build Coastguard Worker   project at http://www.xiph.org/.  Many thanks also for the many
747*4d5d8b54SAndroid Build Coastguard Worker   technical and typo corrections that C. Montgomery and the Ogg
748*4d5d8b54SAndroid Build Coastguard Worker   community provided as feedback to this RFC.
749*4d5d8b54SAndroid Build Coastguard Worker
750*4d5d8b54SAndroid Build Coastguard WorkerAuthor's Address
751*4d5d8b54SAndroid Build Coastguard Worker
752*4d5d8b54SAndroid Build Coastguard Worker   Silvia Pfeiffer
753*4d5d8b54SAndroid Build Coastguard Worker   CSIRO, Australia
754*4d5d8b54SAndroid Build Coastguard Worker   Locked Bag 17
755*4d5d8b54SAndroid Build Coastguard Worker   North Ryde, NSW  2113
756*4d5d8b54SAndroid Build Coastguard Worker   Australia
757*4d5d8b54SAndroid Build Coastguard Worker
758*4d5d8b54SAndroid Build Coastguard Worker   Phone: +61 2 9325 3141
759*4d5d8b54SAndroid Build Coastguard Worker   EMail: [email protected]
760*4d5d8b54SAndroid Build Coastguard Worker   URI:   http://www.cmis.csiro.au/Silvia.Pfeiffer/
761*4d5d8b54SAndroid Build Coastguard Worker
762*4d5d8b54SAndroid Build Coastguard Worker
763*4d5d8b54SAndroid Build Coastguard Worker
764*4d5d8b54SAndroid Build Coastguard Worker
765*4d5d8b54SAndroid Build Coastguard Worker
766*4d5d8b54SAndroid Build Coastguard Worker
767*4d5d8b54SAndroid Build Coastguard Worker
768*4d5d8b54SAndroid Build Coastguard Worker
769*4d5d8b54SAndroid Build Coastguard Worker
770*4d5d8b54SAndroid Build Coastguard Worker
771*4d5d8b54SAndroid Build Coastguard Worker
772*4d5d8b54SAndroid Build Coastguard Worker
773*4d5d8b54SAndroid Build Coastguard Worker
774*4d5d8b54SAndroid Build Coastguard Worker
775*4d5d8b54SAndroid Build Coastguard Worker
776*4d5d8b54SAndroid Build Coastguard Worker
777*4d5d8b54SAndroid Build Coastguard Worker
778*4d5d8b54SAndroid Build Coastguard Worker
779*4d5d8b54SAndroid Build Coastguard Worker
780*4d5d8b54SAndroid Build Coastguard Worker
781*4d5d8b54SAndroid Build Coastguard Worker
782*4d5d8b54SAndroid Build Coastguard Worker
783*4d5d8b54SAndroid Build Coastguard Worker
784*4d5d8b54SAndroid Build Coastguard Worker
785*4d5d8b54SAndroid Build Coastguard Worker
786*4d5d8b54SAndroid Build Coastguard WorkerPfeiffer                     Informational                     [Page 14]
787*4d5d8b54SAndroid Build Coastguard Worker
788*4d5d8b54SAndroid Build Coastguard WorkerRFC 3533                          OGG                           May 2003
789*4d5d8b54SAndroid Build Coastguard Worker
790*4d5d8b54SAndroid Build Coastguard Worker
791*4d5d8b54SAndroid Build Coastguard WorkerFull Copyright Statement
792*4d5d8b54SAndroid Build Coastguard Worker
793*4d5d8b54SAndroid Build Coastguard Worker   Copyright (C) The Internet Society (2003).  All Rights Reserved.
794*4d5d8b54SAndroid Build Coastguard Worker
795*4d5d8b54SAndroid Build Coastguard Worker   This document and translations of it may be copied and furnished to
796*4d5d8b54SAndroid Build Coastguard Worker   others, and derivative works that comment on or otherwise explain it
797*4d5d8b54SAndroid Build Coastguard Worker   or assist in its implementation may be prepared, copied, published
798*4d5d8b54SAndroid Build Coastguard Worker   and distributed, in whole or in part, without restriction of any
799*4d5d8b54SAndroid Build Coastguard Worker   kind, provided that the above copyright notice and this paragraph are
800*4d5d8b54SAndroid Build Coastguard Worker   included on all such copies and derivative works.  However, this
801*4d5d8b54SAndroid Build Coastguard Worker   document itself may not be modified in any way, such as by removing
802*4d5d8b54SAndroid Build Coastguard Worker   the copyright notice or references to the Internet Society or other
803*4d5d8b54SAndroid Build Coastguard Worker   Internet organizations, except as needed for the purpose of
804*4d5d8b54SAndroid Build Coastguard Worker   developing Internet standards in which case the procedures for
805*4d5d8b54SAndroid Build Coastguard Worker   copyrights defined in the Internet Standards process must be
806*4d5d8b54SAndroid Build Coastguard Worker   followed, or as required to translate it into languages other than
807*4d5d8b54SAndroid Build Coastguard Worker   English.
808*4d5d8b54SAndroid Build Coastguard Worker
809*4d5d8b54SAndroid Build Coastguard Worker   The limited permissions granted above are perpetual and will not be
810*4d5d8b54SAndroid Build Coastguard Worker   revoked by the Internet Society or its successors or assigns.
811*4d5d8b54SAndroid Build Coastguard Worker
812*4d5d8b54SAndroid Build Coastguard Worker   This document and the information contained herein is provided on an
813*4d5d8b54SAndroid Build Coastguard Worker   "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
814*4d5d8b54SAndroid Build Coastguard Worker   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
815*4d5d8b54SAndroid Build Coastguard Worker   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
816*4d5d8b54SAndroid Build Coastguard Worker   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
817*4d5d8b54SAndroid Build Coastguard Worker   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
818*4d5d8b54SAndroid Build Coastguard Worker
819*4d5d8b54SAndroid Build Coastguard WorkerAcknowledgement
820*4d5d8b54SAndroid Build Coastguard Worker
821*4d5d8b54SAndroid Build Coastguard Worker   Funding for the RFC Editor function is currently provided by the
822*4d5d8b54SAndroid Build Coastguard Worker   Internet Society.
823*4d5d8b54SAndroid Build Coastguard Worker
824*4d5d8b54SAndroid Build Coastguard Worker
825*4d5d8b54SAndroid Build Coastguard Worker
826*4d5d8b54SAndroid Build Coastguard Worker
827*4d5d8b54SAndroid Build Coastguard Worker
828*4d5d8b54SAndroid Build Coastguard Worker
829*4d5d8b54SAndroid Build Coastguard Worker
830*4d5d8b54SAndroid Build Coastguard Worker
831*4d5d8b54SAndroid Build Coastguard Worker
832*4d5d8b54SAndroid Build Coastguard Worker
833*4d5d8b54SAndroid Build Coastguard Worker
834*4d5d8b54SAndroid Build Coastguard Worker
835*4d5d8b54SAndroid Build Coastguard Worker
836*4d5d8b54SAndroid Build Coastguard Worker
837*4d5d8b54SAndroid Build Coastguard Worker
838*4d5d8b54SAndroid Build Coastguard Worker
839*4d5d8b54SAndroid Build Coastguard Worker
840*4d5d8b54SAndroid Build Coastguard Worker
841*4d5d8b54SAndroid Build Coastguard Worker
842*4d5d8b54SAndroid Build Coastguard WorkerPfeiffer                     Informational                     [Page 15]
843*4d5d8b54SAndroid Build Coastguard Worker
844