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