00001 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 00002 <html> 00003 <head> 00004 00005 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15"/> 00006 <title>Ogg Vorbis Documentation</title> 00007 00008 <style type="text/css"> 00009 body { 00010 margin: 0 18px 0 18px; 00011 padding-bottom: 30px; 00012 font-family: Verdana, Arial, Helvetica, sans-serif; 00013 color: #333333; 00014 font-size: .8em; 00015 } 00016 00017 a { 00018 color: #3366cc; 00019 } 00020 00021 img { 00022 border: 0; 00023 } 00024 00025 #xiphlogo { 00026 margin: 30px 0 16px 0; 00027 } 00028 00029 #content p { 00030 line-height: 1.4; 00031 } 00032 00033 h1, h1 a, h2, h2 a, h3, h3 a { 00034 font-weight: bold; 00035 color: #ff9900; 00036 margin: 1.3em 0 8px 0; 00037 } 00038 00039 h1 { 00040 font-size: 1.3em; 00041 } 00042 00043 h2 { 00044 font-size: 1.2em; 00045 } 00046 00047 h3 { 00048 font-size: 1.1em; 00049 } 00050 00051 li { 00052 line-height: 1.4; 00053 } 00054 00055 #copyright { 00056 margin-top: 30px; 00057 line-height: 1.5em; 00058 text-align: center; 00059 font-size: .8em; 00060 color: #888888; 00061 clear: both; 00062 } 00063 </style> 00064 00065 </head> 00066 00067 <body> 00068 00069 <div id="xiphlogo"> 00070 <a href="http://www.xiph.org/"><img src="fish_xiph_org.png" alt="Fish Logo and Xiph.org"/></a> 00071 </div> 00072 00073 <h1>Ogg logical and physical bitstream overview</h1> 00074 00075 <h2>Ogg bitstreams</h2> 00076 00077 <p>Ogg codecs use octet vectors of raw, compressed data 00078 (<em>packets</em>). These compressed packets do not have any 00079 high-level structure or boundary information; strung together, they 00080 appear to be streams of random bytes with no landmarks.</p> 00081 00082 <p>Raw packets may be used directly by transport mechanisms that provide 00083 their own framing and packet-separation mechanisms (such as UDP 00084 datagrams). For stream based storage (such as files) and transport 00085 (such as TCP streams or pipes), Vorbis and other future Ogg codecs use 00086 the Ogg bitstream format to provide framing/sync, sync recapture 00087 after error, landmarks during seeking, and enough information to 00088 properly separate data back into packets at the original packet 00089 boundaries without relying on decoding to find packet boundaries.</p> 00090 00091 <h2>Logical and physical bitstreams</h2> 00092 00093 <p>Raw packets are grouped and encoded into contiguous pages of 00094 structured bitstream data called <em>logical bitstreams</em>. A 00095 logical bitstream consists of pages, in order, belonging to a single 00096 codec instance. Each page is a self contained entity (although it is 00097 possible that a packet may be split and encoded across one or more 00098 pages); that is, the page decode mechanism is designed to recognize, 00099 verify and handle single pages at a time from the overall bitstream.</p> 00100 00101 <p>Multiple logical bitstreams can be combined (with restrictions) into a 00102 single <em>physical bitstream</em>. A physical bitstream consists of 00103 multiple logical bitstreams multiplexed at the page level and may 00104 include a 'meta-header' at the beginning of the multiplexed logical 00105 stream that serves as identification magic. Whole pages are taken in 00106 order from multiple logical bitstreams and combined into a single 00107 physical stream of pages. The decoder reconstructs the original 00108 logical bitstreams from the physical bitstream by taking the pages in 00109 order from the physical bitstream and redirecting them into the 00110 appropriate logical decoding entity. The simplest physical bitstream 00111 is a single, unmultiplexed logical bitstream with no meta-header; this 00112 is referred to as a 'degenerate stream'.</p> 00113 00114 <p><a href="framing.html">Ogg Logical Bitstream Framing</a> discusses 00115 the page format of an Ogg bitstream, the packet coding process 00116 and logical bitstreams in detail. The remainder of this document 00117 specifies requirements for constructing finished, physical Ogg 00118 bitstreams.</p> 00119 00120 <h2>Mapping Restrictions</h2> 00121 00122 <p>Logical bitstreams may not be mapped/multiplexed into physical 00123 bitstreams without restriction. Here we discuss design restrictions 00124 on Ogg physical bitstreams in general, mostly to introduce 00125 design rationale. Each 'media' format defines its own (generally more 00126 restrictive) mapping. An 'Ogg Vorbis Audio Bitstream', for example, has a 00127 specific physical bitstream structure. 00128 An 'Ogg A/V' bitstream (not currently specified) will also mandate a 00129 specific, restricted physical bitstream format.</p> 00130 00131 <h3>additional end-to-end structure</h3> 00132 00133 <p>The <a href="framing.html">framing specification</a> defines 00134 'beginning of stream' and 'end of stream' page markers via a header 00135 flag (it is possible for a stream to consist of a single page). A 00136 stream always consists of an integer number of pages, an easy 00137 requirement given the variable size nature of pages.</p> 00138 00139 <p>In addition to the header flag marking the first and last pages of a 00140 logical bitstream, the first page of an Ogg bitstream obeys 00141 additional restrictions. Each individual media mapping specifies its 00142 own implementation details regarding these restrictions.</p> 00143 00144 <p>The first page of a logical Ogg bitstream consists of a single, 00145 small 'initial header' packet that includes sufficient information to 00146 identify the exact CODEC type and media requirements of the logical 00147 bitstream. The intent of this restriction is to simplify identifying 00148 the bitstream type and content; for a given media type (or across all 00149 Ogg media types) we can know that we only need a small, fixed 00150 amount of data to uniquely identify the bitstream type.</p> 00151 00152 <p>As an example, Ogg Vorbis places the name and revision of the Vorbis 00153 CODEC, the audio rate and the audio quality into this initial header, 00154 thus simplifying vastly the certain identification of an Ogg Vorbis 00155 audio bitstream.</p> 00156 00157 <h3>sequential multiplexing (chaining)</h3> 00158 00159 <p>The simplest form of logical bitstream multiplexing is concatenation 00160 (<em>chaining</em>). Complete logical bitstreams are strung 00161 one-after-another in order. The bitstreams do not overlap; the final 00162 page of a given logical bitstream is immediately followed by the 00163 initial page of the next. Chaining is the only logical->physical 00164 mapping allowed by Ogg Vorbis.</p> 00165 00166 <p>Each chained logical bitstream must have a unique serial number within 00167 the scope of the physical bitstream.</p> 00168 00169 <h3>concurrent multiplexing (grouping)</h3> 00170 00171 <p>Logical bitstreams may also be multiplexed 'in parallel' 00172 (<em>grouped</em>). An example of grouping would be to allow 00173 streaming of separate audio and video streams, using different codecs 00174 and different logical bitstreams, in the same physical bitstream. 00175 Whole pages from multiple logical bitstreams are mixed together.</p> 00176 00177 <p>The initial pages of each logical bitstream must appear first; the 00178 media mapping specifies the order of the initial pages. For example, 00179 Ogg A/V will eventually specify an Ogg video bitstream with 00180 audio. The mapping may specify that the physical bitstream must begin 00181 with the initial page of a logical video bitstream, followed by the 00182 initial page of an audio stream. Unlike initial pages, terminal pages 00183 for the logical bitstreams need not all occur contiguously (although a 00184 specific media mapping may require this; it is not mandated by the 00185 generic Ogg stream spec). Terminal pages may be 'nil' pages, 00186 that is, pages containing no content but simply a page header with 00187 position information and the 'last page of bitstream' flag set in the 00188 page header.</p> 00189 00190 <p>Each grouped bitstream must have a unique serial number within the 00191 scope of the physical bitstream.</p> 00192 00193 <h3>sequential and concurrent multiplexing</h3> 00194 00195 <p>Groups of concurrently multiplexed bitstreams may be chained 00196 consecutively. Such a physical bitstream obeys all the rules of both 00197 grouped and chained multiplexed streams; the groups, when unchained , 00198 must stand on their own as a valid concurrently multiplexed 00199 bitstream.</p> 00200 00201 <h3>multiplexing example</h3> 00202 00203 <p>Below, we present an example of a grouped and chained bitstream:</p> 00204 00205 <p><img src="stream.png" alt="stream"/></p> 00206 00207 <p>In this example, we see pages from five total logical bitstreams 00208 multiplexed into a physical bitstream. Note the following 00209 characteristics:</p> 00210 00211 <ol> 00212 <li>Grouped bitstreams begin together; all of the initial pages 00213 must appear before any data pages. When concurrently multiplexed 00214 groups are chained, the new group does not begin until all the 00215 bitstreams in the previous group have terminated.</li> 00216 00217 <li>The pages of concurrently multiplexed bitstreams need not conform 00218 to a regular order; the only requirement is that page <tt>n</tt> of a 00219 logical bitstream follow page <tt>n-1</tt> in the physical bitstream. 00220 There are no restrictions on intervening pages belonging to other 00221 logical bitstreams. (Tying page appearance to bitrate demands is one 00222 logical strategy, ie, the page appears at the chronological point 00223 where decode requires more information).</li> 00224 </ol> 00225 00226 <div id="copyright"> 00227 The Xiph Fish Logo is a 00228 trademark (™) of Xiph.Org.<br/> 00229 00230 These pages © 1994 - 2005 Xiph.Org. All rights reserved. 00231 </div> 00232 00233 </body> 00234 </html>