Mercurial > hg > sv-dependency-builds
comparison src/libvorbis-1.3.3/doc/a1-encapsulation-ogg.tex @ 1:05aa0afa9217
Bring in flac, ogg, vorbis
author | Chris Cannam |
---|---|
date | Tue, 19 Mar 2013 17:37:49 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:c7265573341e | 1:05aa0afa9217 |
---|---|
1 % -*- mode: latex; TeX-master: "Vorbis_I_spec"; -*- | |
2 %!TEX root = Vorbis_I_spec.tex | |
3 % $Id$ | |
4 \section{Embedding Vorbis into an Ogg stream} \label{vorbis:over:ogg} | |
5 | |
6 \subsection{Overview} | |
7 | |
8 This document describes using Ogg logical and physical transport | |
9 streams to encapsulate Vorbis compressed audio packet data into file | |
10 form. | |
11 | |
12 The \xref{vorbis:spec:intro} provides an overview of the construction | |
13 of Vorbis audio packets. | |
14 | |
15 The \href{oggstream.html}{Ogg | |
16 bitstream overview} and \href{framing.html}{Ogg logical | |
17 bitstream and framing spec} provide detailed descriptions of Ogg | |
18 transport streams. This specification document assumes a working | |
19 knowledge of the concepts covered in these named backround | |
20 documents. Please read them first. | |
21 | |
22 \subsubsection{Restrictions} | |
23 | |
24 The Ogg/Vorbis I specification currently dictates that Ogg/Vorbis | |
25 streams use Ogg transport streams in degenerate, unmultiplexed | |
26 form only. That is: | |
27 | |
28 \begin{itemize} | |
29 \item | |
30 A meta-headerless Ogg file encapsulates the Vorbis I packets | |
31 | |
32 \item | |
33 The Ogg stream may be chained, i.e., contain multiple, contigous logical streams (links). | |
34 | |
35 \item | |
36 The Ogg stream must be unmultiplexed (only one stream, a Vorbis audio stream, per link) | |
37 | |
38 \end{itemize} | |
39 | |
40 | |
41 This is not to say that it is not currently possible to multiplex | |
42 Vorbis with other media types into a multi-stream Ogg file. At the | |
43 time this document was written, Ogg was becoming a popular container | |
44 for low-bitrate movies consisting of DivX video and Vorbis audio. | |
45 However, a 'Vorbis I audio file' is taken to imply Vorbis audio | |
46 existing alone within a degenerate Ogg stream. A compliant 'Vorbis | |
47 audio player' is not required to implement Ogg support beyond the | |
48 specific support of Vorbis within a degenrate Ogg stream (naturally, | |
49 application authors are encouraged to support full multiplexed Ogg | |
50 handling). | |
51 | |
52 | |
53 | |
54 | |
55 \subsubsection{MIME type} | |
56 | |
57 The MIME type of Ogg files depend on the context. Specifically, complex | |
58 multimedia and applications should use \literal{application/ogg}, | |
59 while visual media should use \literal{video/ogg}, and audio | |
60 \literal{audio/ogg}. Vorbis data encapsulated in Ogg may appear | |
61 in any of those types. RTP encapsulated Vorbis should use | |
62 \literal{audio/vorbis} + \literal{audio/vorbis-config}. | |
63 | |
64 | |
65 \subsection{Encapsulation} | |
66 | |
67 Ogg encapsulation of a Vorbis packet stream is straightforward. | |
68 | |
69 \begin{itemize} | |
70 | |
71 \item | |
72 The first Vorbis packet (the identification header), which | |
73 uniquely identifies a stream as Vorbis audio, is placed alone in the | |
74 first page of the logical Ogg stream. This results in a first Ogg | |
75 page of exactly 58 bytes at the very beginning of the logical stream. | |
76 | |
77 | |
78 \item | |
79 This first page is marked 'beginning of stream' in the page flags. | |
80 | |
81 | |
82 \item | |
83 The second and third vorbis packets (comment and setup | |
84 headers) may span one or more pages beginning on the second page of | |
85 the logical stream. However many pages they span, the third header | |
86 packet finishes the page on which it ends. The next (first audio) packet | |
87 must begin on a fresh page. | |
88 | |
89 | |
90 \item | |
91 The granule position of these first pages containing only headers is zero. | |
92 | |
93 | |
94 \item | |
95 The first audio packet of the logical stream begins a fresh Ogg page. | |
96 | |
97 | |
98 \item | |
99 Packets are placed into ogg pages in order until the end of stream. | |
100 | |
101 | |
102 \item | |
103 The last page is marked 'end of stream' in the page flags. | |
104 | |
105 | |
106 \item | |
107 Vorbis packets may span page boundaries. | |
108 | |
109 | |
110 \item | |
111 The granule position of pages containing Vorbis audio is in units | |
112 of PCM audio samples (per channel; a stereo stream's granule position | |
113 does not increment at twice the speed of a mono stream). | |
114 | |
115 | |
116 \item | |
117 The granule position of a page represents the end PCM sample | |
118 position of the last packet \emph{completed} on that | |
119 page. The 'last PCM sample' is the last complete sample returned by | |
120 decode, not an internal sample awaiting lapping with a | |
121 subsequent block. A page that is entirely spanned by a single | |
122 packet (that completes on a subsequent page) has no granule | |
123 position, and the granule position is set to '-1'. | |
124 | |
125 | |
126 Note that the last decoded (fully lapped) PCM sample from a packet | |
127 is not necessarily the middle sample from that block. If, eg, the | |
128 current Vorbis packet encodes a "long block" and the next Vorbis | |
129 packet encodes a "short block", the last decodable sample from the | |
130 current packet be at position (3*long\_block\_length/4) - | |
131 (short\_block\_length/4). | |
132 | |
133 | |
134 \item | |
135 The granule (PCM) position of the first page need not indicate | |
136 that the stream started at position zero. Although the granule | |
137 position belongs to the last completed packet on the page and a | |
138 valid granule position must be positive, by | |
139 inference it may indicate that the PCM position of the beginning | |
140 of audio is positive or negative. | |
141 | |
142 | |
143 \begin{itemize} | |
144 \item | |
145 A positive starting value simply indicates that this stream begins at | |
146 some positive time offset, potentially within a larger | |
147 program. This is a common case when connecting to the middle | |
148 of broadcast stream. | |
149 | |
150 \item | |
151 A negative value indicates that | |
152 output samples preceeding time zero should be discarded during | |
153 decoding; this technique is used to allow sample-granularity | |
154 editing of the stream start time of already-encoded Vorbis | |
155 streams. The number of samples to be discarded must not exceed | |
156 the overlap-add span of the first two audio packets. | |
157 | |
158 \end{itemize} | |
159 | |
160 | |
161 In both of these cases in which the initial audio PCM starting | |
162 offset is nonzero, the second finished audio packet must flush the | |
163 page on which it appears and the third packet begin a fresh page. | |
164 This allows the decoder to always be able to perform PCM position | |
165 adjustments before needing to return any PCM data from synthesis, | |
166 resulting in correct positioning information without any aditional | |
167 seeking logic. | |
168 | |
169 | |
170 \begin{note} | |
171 Failure to do so should, at worst, cause a | |
172 decoder implementation to return incorrect positioning information | |
173 for seeking operations at the very beginning of the stream. | |
174 \end{note} | |
175 | |
176 | |
177 \item | |
178 A granule position on the final page in a stream that indicates | |
179 less audio data than the final packet would normally return is used to | |
180 end the stream on other than even frame boundaries. The difference | |
181 between the actual available data returned and the declared amount | |
182 indicates how many trailing samples to discard from the decoding | |
183 process. | |
184 | |
185 \end{itemize} |