| 1 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
|---|
| 2 | <html> |
|---|
| 3 | <head> |
|---|
| 4 | |
|---|
| 5 | <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15"/> |
|---|
| 6 | <title>Ogg Vorbis Documentation</title> |
|---|
| 7 | |
|---|
| 8 | <style type="text/css"> |
|---|
| 9 | body { |
|---|
| 10 | margin: 0 18px 0 18px; |
|---|
| 11 | padding-bottom: 30px; |
|---|
| 12 | font-family: Verdana, Arial, Helvetica, sans-serif; |
|---|
| 13 | color: #333333; |
|---|
| 14 | font-size: .8em; |
|---|
| 15 | } |
|---|
| 16 | |
|---|
| 17 | a { |
|---|
| 18 | color: #3366cc; |
|---|
| 19 | } |
|---|
| 20 | |
|---|
| 21 | img { |
|---|
| 22 | border: 0; |
|---|
| 23 | } |
|---|
| 24 | |
|---|
| 25 | #xiphlogo { |
|---|
| 26 | margin: 30px 0 16px 0; |
|---|
| 27 | } |
|---|
| 28 | |
|---|
| 29 | #content p { |
|---|
| 30 | line-height: 1.4; |
|---|
| 31 | } |
|---|
| 32 | |
|---|
| 33 | h1, h1 a, h2, h2 a, h3, h3 a { |
|---|
| 34 | font-weight: bold; |
|---|
| 35 | color: #ff9900; |
|---|
| 36 | margin: 1.3em 0 8px 0; |
|---|
| 37 | } |
|---|
| 38 | |
|---|
| 39 | h1 { |
|---|
| 40 | font-size: 1.3em; |
|---|
| 41 | } |
|---|
| 42 | |
|---|
| 43 | h2 { |
|---|
| 44 | font-size: 1.2em; |
|---|
| 45 | } |
|---|
| 46 | |
|---|
| 47 | h3 { |
|---|
| 48 | font-size: 1.1em; |
|---|
| 49 | } |
|---|
| 50 | |
|---|
| 51 | li { |
|---|
| 52 | line-height: 1.4; |
|---|
| 53 | } |
|---|
| 54 | |
|---|
| 55 | #copyright { |
|---|
| 56 | margin-top: 30px; |
|---|
| 57 | line-height: 1.5em; |
|---|
| 58 | text-align: center; |
|---|
| 59 | font-size: .8em; |
|---|
| 60 | color: #888888; |
|---|
| 61 | clear: both; |
|---|
| 62 | } |
|---|
| 63 | </style> |
|---|
| 64 | |
|---|
| 65 | </head> |
|---|
| 66 | |
|---|
| 67 | <body> |
|---|
| 68 | |
|---|
| 69 | <div id="xiphlogo"> |
|---|
| 70 | <a href="http://www.xiph.org/"><img src="fish_xiph_org.png" alt="Fish Logo and Xiph.org"/></a> |
|---|
| 71 | </div> |
|---|
| 72 | |
|---|
| 73 | <h1>Ogg logical and physical bitstream overview</h1> |
|---|
| 74 | |
|---|
| 75 | <h2>Ogg bitstreams</h2> |
|---|
| 76 | |
|---|
| 77 | <p>Ogg codecs use octet vectors of raw, compressed data |
|---|
| 78 | (<em>packets</em>). These compressed packets do not have any |
|---|
| 79 | high-level structure or boundary information; strung together, they |
|---|
| 80 | appear to be streams of random bytes with no landmarks.</p> |
|---|
| 81 | |
|---|
| 82 | <p>Raw packets may be used directly by transport mechanisms that provide |
|---|
| 83 | their own framing and packet-separation mechanisms (such as UDP |
|---|
| 84 | datagrams). For stream based storage (such as files) and transport |
|---|
| 85 | (such as TCP streams or pipes), Vorbis and other future Ogg codecs use |
|---|
| 86 | the Ogg bitstream format to provide framing/sync, sync recapture |
|---|
| 87 | after error, landmarks during seeking, and enough information to |
|---|
| 88 | properly separate data back into packets at the original packet |
|---|
| 89 | boundaries without relying on decoding to find packet boundaries.</p> |
|---|
| 90 | |
|---|
| 91 | <h2>Logical and physical bitstreams</h2> |
|---|
| 92 | |
|---|
| 93 | <p>Raw packets are grouped and encoded into contiguous pages of |
|---|
| 94 | structured bitstream data called <em>logical bitstreams</em>. A |
|---|
| 95 | logical bitstream consists of pages, in order, belonging to a single |
|---|
| 96 | codec instance. Each page is a self contained entity (although it is |
|---|
| 97 | possible that a packet may be split and encoded across one or more |
|---|
| 98 | pages); that is, the page decode mechanism is designed to recognize, |
|---|
| 99 | verify and handle single pages at a time from the overall bitstream.</p> |
|---|
| 100 | |
|---|
| 101 | <p>Multiple logical bitstreams can be combined (with restrictions) into a |
|---|
| 102 | single <em>physical bitstream</em>. A physical bitstream consists of |
|---|
| 103 | multiple logical bitstreams multiplexed at the page level and may |
|---|
| 104 | include a 'meta-header' at the beginning of the multiplexed logical |
|---|
| 105 | stream that serves as identification magic. Whole pages are taken in |
|---|
| 106 | order from multiple logical bitstreams and combined into a single |
|---|
| 107 | physical stream of pages. The decoder reconstructs the original |
|---|
| 108 | logical bitstreams from the physical bitstream by taking the pages in |
|---|
| 109 | order from the physical bitstream and redirecting them into the |
|---|
| 110 | appropriate logical decoding entity. The simplest physical bitstream |
|---|
| 111 | is a single, unmultiplexed logical bitstream with no meta-header; this |
|---|
| 112 | is referred to as a 'degenerate stream'.</p> |
|---|
| 113 | |
|---|
| 114 | <p><a href="framing.html">Ogg Logical Bitstream Framing</a> discusses |
|---|
| 115 | the page format of an Ogg bitstream, the packet coding process |
|---|
| 116 | and logical bitstreams in detail. The remainder of this document |
|---|
| 117 | specifies requirements for constructing finished, physical Ogg |
|---|
| 118 | bitstreams.</p> |
|---|
| 119 | |
|---|
| 120 | <h2>Mapping Restrictions</h2> |
|---|
| 121 | |
|---|
| 122 | <p>Logical bitstreams may not be mapped/multiplexed into physical |
|---|
| 123 | bitstreams without restriction. Here we discuss design restrictions |
|---|
| 124 | on Ogg physical bitstreams in general, mostly to introduce |
|---|
| 125 | design rationale. Each 'media' format defines its own (generally more |
|---|
| 126 | restrictive) mapping. An 'Ogg Vorbis Audio Bitstream', for example, has a |
|---|
| 127 | specific physical bitstream structure. |
|---|
| 128 | An 'Ogg A/V' bitstream (not currently specified) will also mandate a |
|---|
| 129 | specific, restricted physical bitstream format.</p> |
|---|
| 130 | |
|---|
| 131 | <h3>additional end-to-end structure</h3> |
|---|
| 132 | |
|---|
| 133 | <p>The <a href="framing.html">framing specification</a> defines |
|---|
| 134 | 'beginning of stream' and 'end of stream' page markers via a header |
|---|
| 135 | flag (it is possible for a stream to consist of a single page). A |
|---|
| 136 | stream always consists of an integer number of pages, an easy |
|---|
| 137 | requirement given the variable size nature of pages.</p> |
|---|
| 138 | |
|---|
| 139 | <p>In addition to the header flag marking the first and last pages of a |
|---|
| 140 | logical bitstream, the first page of an Ogg bitstream obeys |
|---|
| 141 | additional restrictions. Each individual media mapping specifies its |
|---|
| 142 | own implementation details regarding these restrictions.</p> |
|---|
| 143 | |
|---|
| 144 | <p>The first page of a logical Ogg bitstream consists of a single, |
|---|
| 145 | small 'initial header' packet that includes sufficient information to |
|---|
| 146 | identify the exact CODEC type and media requirements of the logical |
|---|
| 147 | bitstream. The intent of this restriction is to simplify identifying |
|---|
| 148 | the bitstream type and content; for a given media type (or across all |
|---|
| 149 | Ogg media types) we can know that we only need a small, fixed |
|---|
| 150 | amount of data to uniquely identify the bitstream type.</p> |
|---|
| 151 | |
|---|
| 152 | <p>As an example, Ogg Vorbis places the name and revision of the Vorbis |
|---|
| 153 | CODEC, the audio rate and the audio quality into this initial header, |
|---|
| 154 | thus simplifying vastly the certain identification of an Ogg Vorbis |
|---|
| 155 | audio bitstream.</p> |
|---|
| 156 | |
|---|
| 157 | <h3>sequential multiplexing (chaining)</h3> |
|---|
| 158 | |
|---|
| 159 | <p>The simplest form of logical bitstream multiplexing is concatenation |
|---|
| 160 | (<em>chaining</em>). Complete logical bitstreams are strung |
|---|
| 161 | one-after-another in order. The bitstreams do not overlap; the final |
|---|
| 162 | page of a given logical bitstream is immediately followed by the |
|---|
| 163 | initial page of the next. Chaining is the only logical->physical |
|---|
| 164 | mapping allowed by Ogg Vorbis.</p> |
|---|
| 165 | |
|---|
| 166 | <p>Each chained logical bitstream must have a unique serial number within |
|---|
| 167 | the scope of the physical bitstream.</p> |
|---|
| 168 | |
|---|
| 169 | <h3>concurrent multiplexing (grouping)</h3> |
|---|
| 170 | |
|---|
| 171 | <p>Logical bitstreams may also be multiplexed 'in parallel' |
|---|
| 172 | (<em>grouped</em>). An example of grouping would be to allow |
|---|
| 173 | streaming of separate audio and video streams, using different codecs |
|---|
| 174 | and different logical bitstreams, in the same physical bitstream. |
|---|
| 175 | Whole pages from multiple logical bitstreams are mixed together.</p> |
|---|
| 176 | |
|---|
| 177 | <p>The initial pages of each logical bitstream must appear first; the |
|---|
| 178 | media mapping specifies the order of the initial pages. For example, |
|---|
| 179 | Ogg A/V will eventually specify an Ogg video bitstream with |
|---|
| 180 | audio. The mapping may specify that the physical bitstream must begin |
|---|
| 181 | with the initial page of a logical video bitstream, followed by the |
|---|
| 182 | initial page of an audio stream. Unlike initial pages, terminal pages |
|---|
| 183 | for the logical bitstreams need not all occur contiguously (although a |
|---|
| 184 | specific media mapping may require this; it is not mandated by the |
|---|
| 185 | generic Ogg stream spec). Terminal pages may be 'nil' pages, |
|---|
| 186 | that is, pages containing no content but simply a page header with |
|---|
| 187 | position information and the 'last page of bitstream' flag set in the |
|---|
| 188 | page header.</p> |
|---|
| 189 | |
|---|
| 190 | <p>Each grouped bitstream must have a unique serial number within the |
|---|
| 191 | scope of the physical bitstream.</p> |
|---|
| 192 | |
|---|
| 193 | <h3>sequential and concurrent multiplexing</h3> |
|---|
| 194 | |
|---|
| 195 | <p>Groups of concurrently multiplexed bitstreams may be chained |
|---|
| 196 | consecutively. Such a physical bitstream obeys all the rules of both |
|---|
| 197 | grouped and chained multiplexed streams; the groups, when unchained , |
|---|
| 198 | must stand on their own as a valid concurrently multiplexed |
|---|
| 199 | bitstream.</p> |
|---|
| 200 | |
|---|
| 201 | <h3>multiplexing example</h3> |
|---|
| 202 | |
|---|
| 203 | <p>Below, we present an example of a grouped and chained bitstream:</p> |
|---|
| 204 | |
|---|
| 205 | <p><img src="stream.png" alt="stream"/></p> |
|---|
| 206 | |
|---|
| 207 | <p>In this example, we see pages from five total logical bitstreams |
|---|
| 208 | multiplexed into a physical bitstream. Note the following |
|---|
| 209 | characteristics:</p> |
|---|
| 210 | |
|---|
| 211 | <ol> |
|---|
| 212 | <li>Grouped bitstreams begin together; all of the initial pages |
|---|
| 213 | must appear before any data pages. When concurrently multiplexed |
|---|
| 214 | groups are chained, the new group does not begin until all the |
|---|
| 215 | bitstreams in the previous group have terminated.</li> |
|---|
| 216 | |
|---|
| 217 | <li>The pages of concurrently multiplexed bitstreams need not conform |
|---|
| 218 | to a regular order; the only requirement is that page <tt>n</tt> of a |
|---|
| 219 | logical bitstream follow page <tt>n-1</tt> in the physical bitstream. |
|---|
| 220 | There are no restrictions on intervening pages belonging to other |
|---|
| 221 | logical bitstreams. (Tying page appearance to bitrate demands is one |
|---|
| 222 | logical strategy, ie, the page appears at the chronological point |
|---|
| 223 | where decode requires more information).</li> |
|---|
| 224 | </ol> |
|---|
| 225 | |
|---|
| 226 | <div id="copyright"> |
|---|
| 227 | The Xiph Fish Logo is a |
|---|
| 228 | trademark (™) of Xiph.Org.<br/> |
|---|
| 229 | |
|---|
| 230 | These pages © 1994 - 2005 Xiph.Org. All rights reserved. |
|---|
| 231 | </div> |
|---|
| 232 | |
|---|
| 233 | </body> |
|---|
| 234 | </html> |
|---|