Update mp4 encapsulation spec to v0.4.8.
[opus.git] / doc / opus_in_isobmff.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
2 <html>
3     <head>
4         <link rel="stylesheet" type="text/css" href="opus_in_isobmff.css"/>
5         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6         <title>Encapsulation of Opus in ISO Base Media File Format</title>
7     </head>
8     <body bgcolor="0x333333" text="#60B0C0">
9         <b><u>Encapsulation of Opus in ISO Base Media File Format</u></b><br>
10         <font size="2">last updated: September 27, 2014</font><br>
11         <br>
12         <div class="normal_link pre frame_box">
13
14 <center>Encapsulation of Opus in ISO Base Media File Format</center>
15 <center>Version 0.4.8 (incomplete)</center>
16
17 Table of Contents
18 <a href="#1">1</a> Scope
19 <a href="#2">2</a> Normative References
20 <a href="#3">3</a> Terms and Definitions
21 <a href="#4">4</a> Design Rules of Encapsulation
22     <a href="#4.1">4.1</a> File Type Indentification
23     <a href="#4.2">4.2</a> Basic Structure
24         <a href="#4.2.1">4.2.1</a> Initial Movie
25         <a href="#4.2.2">4.2.2</a> Movie Fragments
26     <a href="#4.3">4.3</a> Byte Order
27     <a href="#4.4">4.4</a> Definition of Opus sample
28         <a href="#4.4.1">4.4.1</a> Opus sample
29         <a href="#4.4.2">4.4.2</a> Duration of Opus sample
30     <a href="#4.5">4.5</a> Random Access
31         <a href="#4.5.1">4.5.1</a> Random Access Point
32         <a href="#4.5.2">4.5.2</a> Pre-roll
33     <a href="#4.6">4.6</a> Trimming of Actual Duration
34     <a href="#4.7">4.7</a> Channel Layout
35     <a href="#4.8">4.8</a> Additional Requirements, Restrictions, Recommendations and Definitions for Boxes
36         <a href="#4.8.1">4.8.1</a> File Type Box
37         <a href="#4.8.2">4.8.2</a> Segment Type Box
38         <a href="#4.8.3">4.8.3</a> Movie Header Box
39         <a href="#4.8.4">4.8.4</a> Track Header Box
40         <a href="#4.8.5">4.8.5</a> Edit Box
41         <a href="#4.8.6">4.8.6</a> Edit List Box
42         <a href="#4.8.7">4.8.7</a> Media Header Box
43         <a href="#4.8.8">4.8.8</a> Handler Reference Box
44         <a href="#4.8.9">4.8.9</a> Sound Media Header Box
45         <a href="#4.8.10">4.8.10</a> Sample Table Box
46         <a href="#4.8.11">4.8.11</a> OpusSampleEntry
47         <a href="#4.8.12">4.8.12</a> Opus Specific Box
48         <a href="#4.8.13">4.8.13</a> Sample Group Description Box
49         <a href="#4.8.14">4.8.14</a> Sample to Group Box
50         <a href="#4.8.15">4.8.15</a> Track Extends Box
51         <a href="#4.8.16">4.8.16</a> Track Fragment Box
52         <a href="#4.8.17">4.8.17</a> Track Fragment Header Box
53         <a href="#4.8.18">4.8.18</a> Track Fragment Run Box
54     <a href="#4.9">4.9</a> Example of Encapsulation
55 <a href="#5">5</a> Author's Address
56
57 <a name="1"></a>
58 1 Scope
59     This specification specifies the fundamental way of the encapsulation of Opus coded bitstreams in ISO Base Media
60     file formats and its derivatives.
61
62 <a name="2"></a>
63 2 Normative References
64     [1] ISO/IEC 14496-12:2012 Corrected version
65         Information technology — Coding of audio-visual objects — Part 12: ISO base media file format
66
67     [2] ISO/IEC 14496-12:2012/Amd.1:2013
68         Information technology — Coding of audio-visual objects — Part 12: ISO base media file format
69         AMENDMENT 1: Various enhancements including support for large metadata
70
71     [3] RFC 6716
72         Definition of the Opus Audio Codec
73
74     [4] draft-ietf-codec-oggopus-04
75         Ogg Encapsulation for the Opus Audio Codec
76
77 <a name="3"></a>
78 3 Terms and Definitions
79     3.1 active track
80         enabled track from the non-alternate group or selected track from alternate group
81         TODO: For alternate group, how about handling of disabled tracks?
82               Some implementations treat disabled tracks in alternate group as a non-default track.
83               Under the such implementations, the selected track behaves as an enabled track.
84               Should we define the implementation in this specification?
85               Or leave it as implementation-defined?
86
87     3.2 actual duration
88         duration constructed from valid samples
89
90     3.3 edit
91         entry in the Edit List Box
92
93     3.4 padded samples
94         PCM samples after decoding Opus sample(s) which are not valid samples
95         An Opus bitstream always contains them partially at the beginning and may contain them in part at the end, as
96         long as not physically removed yet at the beginning and/or the end.
97
98     3.5 priming samples
99         padded samples at the beginning of the Opus bitstream
100
101     3.6 sample-accurate
102         for any PCM sample, a timestamp exactly matching its sampling timestamp is present in the media timeline.
103
104     3.7 valid samples
105         PCM samples after decoding Opus sample(s) corresponding to input PCM samples
106
107 <a name="4"></a>
108 4 Design Rules of Encapsulation
109     4.1 File Type Indentification<a name="4.1"></a>
110         This specification does not define any brand to declare files are conformant to this specification.
111         TODO: Should we define such brands, e.g. 'Opus'? If we define the brand(s), we can utilize files conformant to
112               this specification for the storage of Opus coded bitstreams without other derived file formats.
113               It is not preferable that encapsulation of Opus bitstreams with only the brands of the ISO Base Media File
114               Format, though files conformant to this specification are compatible with certain versions of the ISO
115               Base Media File Format. See ISO/IEC 14496-12 [3] E.1 Introduction.
116               If you desire that this file format is an alternative file format to the Ogg Opus, I recommend you define.
117 <a name="4.2"></a>
118     4.2 Basic Structure
119         4.2.1 Initial Movie<a name="4.2.1"></a>
120             This subclause specifies a basic structure of the Movie Box as follows:
121
122             +----+----+----+----+----+----+----+----+------------------------------+
123             |moov|    |    |    |    |    |    |    | Movie Box                    |
124             +----+----+----+----+----+----+----+----+------------------------------+
125             |    |mvhd|    |    |    |    |    |    | Movie Header Box             |
126             +----+----+----+----+----+----+----+----+------------------------------+
127             |    |trak|    |    |    |    |    |    | Track Box                    |
128             +----+----+----+----+----+----+----+----+------------------------------+
129             |    |    |tkhd|    |    |    |    |    | Track Header Box             |
130             +----+----+----+----+----+----+----+----+------------------------------+
131             |    |    |edts|    |    |    |    |    | Edit Box                     |
132             +----+----+----+----+----+----+----+----+------------------------------+
133             |    |    |    |elst|    |    |    |    | Edit List Box                |
134             +----+----+----+----+----+----+----+----+------------------------------+
135             |    |    |mdia|    |    |    |    |    | Media Box                    |
136             +----+----+----+----+----+----+----+----+------------------------------+
137             |    |    |    |mdhd|    |    |    |    | Media Header Box             |
138             +----+----+----+----+----+----+----+----+------------------------------+
139             |    |    |    |hdlr|    |    |    |    | Handler Reference Box        |
140             +----+----+----+----+----+----+----+----+------------------------------+
141             |    |    |    |minf|    |    |    |    | Media Information Box        |
142             +----+----+----+----+----+----+----+----+------------------------------+
143             |    |    |    |    |smhd|    |    |    | Sound Media Information Box  |
144             +----+----+----+----+----+----+----+----+------------------------------+
145             |    |    |    |    |dinf|    |    |    | Data Information Box         |
146             +----+----+----+----+----+----+----+----+------------------------------+
147             |    |    |    |    |    |dref|    |    | Data Reference Box           |
148             +----+----+----+----+----+----+----+----+------------------------------+
149             |    |    |    |    |    |    |url |    | DataEntryUrlBox              |
150             +----+----+----+----+----+----+ or +----+------------------------------+
151             |    |    |    |    |    |    |urn |    | DataEntryUrnBox              |
152             +----+----+----+----+----+----+----+----+------------------------------+
153             |    |    |    |    |stbl|    |    |    | Sample Table                 |
154             +----+----+----+----+----+----+----+----+------------------------------+
155             |    |    |    |    |    |stsd|    |    | Sample Description Box       |
156             +----+----+----+----+----+----+----+----+------------------------------+
157             |    |    |    |    |    |    |Opus|    | OpusSampleEntry              |
158             +----+----+----+----+----+----+----+----+------------------------------+
159             |    |    |    |    |    |    |    |dOps| Opus Specific Box            |
160             +----+----+----+----+----+----+----+----+------------------------------+
161             |    |    |    |    |    |stts|    |    | Decoding Time to Sample Box  |
162             +----+----+----+----+----+----+----+----+------------------------------+
163             |    |    |    |    |    |stsc|    |    | Sample To Chunk Box          |
164             +----+----+----+----+----+----+----+----+------------------------------+
165             |    |    |    |    |    |stsz|    |    | Sample Size Box              |
166             +----+----+----+----+----+ or +----+----+------------------------------+
167             |    |    |    |    |    |stz2|    |    | Compact Sample Size Box      |
168             +----+----+----+----+----+----+----+----+------------------------------+
169             |    |    |    |    |    |stco|    |    | Chunk Offset Box             |
170             +----+----+----+----+----+ or +----+----+------------------------------+
171             |    |    |    |    |    |co64|    |    | Chunk Large Offset Box       |
172             +----+----+----+----+----+----+----+----+------------------------------+
173             |    |    |    |    |    |sgpd|    |    | Sample Group Description Box |
174             +----+----+----+----+----+----+----+----+------------------------------+
175             |    |    |    |    |    |sbgp|    |    | Sample to Group Box          |
176             +----+----+----+----+----+----+----+----+------------------------------+
177             |    |mvex|*   |    |    |    |    |    | Movie Extends Box            |
178             +----+----+----+----+----+----+----+----+------------------------------+
179             |    |    |trex|*   |    |    |    |    | Track Extends Box            |
180             +----+----+----+----+----+----+----+----+------------------------------+
181
182             It is strongly recommended that the order of boxes should follow the above structure.
183             Boxes marked with an asterisk (*) may be present.
184             For some boxes listed above, the additional requirements, restrictions, recommendations and definitions
185             are specified in 4.8 Additional Requirements, Restrictions, Recommendations and Definitions for Boxes in
186             this specification.
187             For the others, the definition is as is defined in ISO/IEC 14496-12 [1].
188
189         4.2.2 Movie Fragments<a name="4.2.2"></a>
190             This subclause specifies a basic structure of the Movie Fragment Box as follows:
191
192             +----+----+----+----+----+----+----+----+------------------------------+
193             |moof|    |    |    |    |    |    |    | Movie Fragment Box           |
194             +----+----+----+----+----+----+----+----+------------------------------+
195             |    |mfhd|    |    |    |    |    |    | Movie Fragment Header Box    |
196             +----+----+----+----+----+----+----+----+------------------------------+
197             |    |traf|    |    |    |    |    |    | Track Fragment Box           |
198             +----+----+----+----+----+----+----+----+------------------------------+
199             |    |    |tfhd|    |    |    |    |    | Track Fragment Header Box    |
200             +----+----+----+----+----+----+----+----+------------------------------+
201             |    |    |trun|    |    |    |    |    | Track Fragment Run Box       |
202             +----+----+----+----+----+----+----+----+------------------------------+
203             |    |    |sgpd|*   |    |    |    |    | Sample Group Description Box |
204             +----+----+----+----+----+----+----+----+------------------------------+
205             |    |    |sbgp|*   |    |    |    |    | Sample to Group Box          |
206             +----+----+----+----+----+----+----+----+------------------------------+
207
208             It is strongly recommended that the Movie Fragment Header Box and the Track Fragment Header Box be
209             placed first in their container.
210             Boxes marked with an asterisk (*) may be present.
211             For some boxes listed above, the additional requirements, restrictions, recommendations and definitions
212             are specified in 4.8 Additional Requirements, Restrictions, Recommendations and Definitions for Boxes in
213             this specification.
214             For the others, the definition is as is defined in ISO/IEC 14496-12 [1].
215 <a name="4.3"></a>
216     4.3 Byte Order
217         The fields in the boxes are stored as big-endian format.
218         All Opus samples are processed byte-by-byte. Therefore, the endianness has nothing to do with any Opus sample.
219 <a name="4.4"></a>
220     4.4 Definition of Opus sample
221         4.4.1 Opus sample<a name="4.4.1"></a>
222             An Opus sample is exactly one Opus packet for each of different Opus bitstreams. Due to support more than
223             two channels, an Opus sample can contain frames from multiple Opus bitstreams but all Opus packets shall
224             share with the total of frame sizes in a single Opus sample.
225             In this specification, 'sample' means 'Opus sample' except for 'padded samples', 'priming samples', 'valid
226             sample' and 'sample-accurate', i.e. 'sample' is 'sample' in the term defined in ISO/IEC 14496-12 [1].
227
228         4.4.2 Duration of Opus sample<a name="4.4.2"></a>
229             The duration of Opus sample is given by multiplying the total of frame sizes for a single Opus bitstream
230             expressed in seconds by the value of the timescale field in the Media Header Box.
231             Let's say an Opus sample consists of two Opus bitstreams, where the frame size of one bitstream is 40 milli-
232             seconds and the frame size of another is 60 milliseconds, and the timescale field in the Media Header Box
233             is set to 48000, then the duration of that Opus sample shall be 120 milliseconds since three 40 millisecond
234             frame and two 60 millisecond frames shall be contained because of the maximum duration of Opus packet, 120
235             milliseconds, and 5760 in the timescale indicated in the Media Header Box.
236
237             To indicate the valid samples excluding the padded samples at the end of Opus bitstream, the duration of
238             the last Opus sample of an Opus bitstream is given by multiplying the number of the valid samples by the
239             value produced by dividing the value of the timescale field in the Media Header Box by 48000.
240 <a name="4.5"></a>
241     4.5 Random Access
242         4.5.1 Random Access Point<a name="4.5.1"></a>
243             All Opus samples can be independently decoded i.e. every Opus sample is a sync sample.
244             Therefore, the Sync Sample Box shall not be present as long as there are no samples other than Opus samples
245             in the same track.
246
247         4.5.2 Pre-roll<a name="4.5.2"></a>
248             Opus requires at least 80 millisecond pre-roll after each random access.
249             Pre-roll is indicated by the roll_distance field in AudioRollRecoveryEntry. AudioPreRollEntry shall not be
250             used since every Opus sample is a sync sample in Opus bitstream.
251             Note that roll_distance is expressed in sample units in a term of ISO Base Media File Format, and always
252             takes negative values.
253
254             For the requirement of AudioRollRecoveryEntry, the compatible_brands field in the File Type Box and/or
255             the Segment Type Box shall contain at least one brand which requires support for roll groups.
256             See also 4.8.1 File Type Box and 4.8.2 Segment Type Box.
257 <a name="4.6"></a>
258     4.6 Trimming of Actual Duration
259         Due to the priming samples (or the padding at the beginning) derived from the pre-roll for the startup and the
260         padded samples at the end, we need trim from media to get the actual duration. An edit in the Edit List Box can
261         achieve this demand.
262         For sample-accurate trimming, proper timescale should be set to the timescale field in the Movie Header Box
263         and the Media Header Box inside Track Box(es) for Opus bitstream.
264
265         The Edit List Box is applied to whole movie including all movie fragments. Therefore, it is impossible to tell
266         the actual duration in the case producing movie fragments on the fly such as live-streaming. In such cases,
267         the duration of the last Opus sample may be helpful.
268         TODO: Should we define a new box which indicates the last Opus samples?
269               Since this specification allows multiple sample descriptions, i.e. allows concatenation of multiple Opus
270               bitstreams in a track, each Opus bitstream may contain some padded samples.
271               Without such a box, we cannot know in container level whether an Opus sample is the last Opus sample in
272               an Opus bitstream or not. Is this preferable?
273
274         See also 4.8.6 Edit List Box.
275 <a name="4.7"></a>
276     4.7 Channel Layout
277         By the application of alternate_group in the Track Header Box, whole audio channels in all active tracks from
278         non-alternate group and/or different alternate group from each other are composited into the presentation. If
279         an Opus sample consists of multiple Opus bitstreams, it can be splitted into individual Opus bitstreams and
280         reconstructed into new Opus samples as long as every Opus bitstream has the same total duration in each Opus
281         sample. This nature can be utilized to encapsulate a single Opus bitstream in each track without breaking the
282         original channel layout.
283
284         As an example, let's say there is a following track:
285             StreamCount        = 4;
286             CoupledCount       = 2;
287             OutputChannelCount = 6;
288             ChannelMapping     = {0, 1, 2, 3, 4, 5}; // front left, front center, front right, rear left, rear right, LFE
289         You extract the four Opus bitstreams from this track and you encapsulate two of the four into a track and the
290         others into another track. The former track is as follows.
291             StreamCount        = 2;
292             CoupledCount       = 2;
293             OutputChannelCount = 5;
294             ChannelMapping     = {0, 255, 1, 2, 3}; // front left, silent, front right, rear left, rear right
295         And the latter track is as follows.
296             StreamCount        = 2;
297             CoupledCount       = 0;
298             OutputChannelCount = 6;
299             ChannelMapping     = {255, 0, 255, 255, 255, 1}; // silent, front center, silent, silent, silent, LFE
300         In addition, the value of the alternate_group field in the both tracks is set to 0. As the result, the player
301         may play as if channels with 255 are not present, and play the presentation constructed from the both tracks
302         in the same channel layout as the one of the original track. Keep in mind that the way of the composition, i.e.
303         the mixing for playback, is not defined here, and maybe different results could occur except for the channel
304         layout of the original, depending on an implementation or the definition of a derived file format.
305
306         Note that some derived file formats may specify the restriction to ignore alternate grouping. In the context of
307         such file formats, this application is not available. This unavailability does not mean incompatibilities among
308         file formats unless the restriction to the value of the alternate_group field is specified and brings about
309         any conflict among their definitions.
310 <a name="4.8"></a>
311     4.8 Additional Requirements, Restrictions, Recommendations and Definitions for Boxes
312         4.8.1 File Type Box<a name="4.8.1"></a>
313             For any track containing Opus bitstreams, the following requirements are applied.
314             + compatible_brands:
315                 The compatible_brands fields shall contain at least one brand which requires support for roll groups
316                 (e.g. the 'iso2' brand).
317                 When enabling movie fragments and placing at least one Sample Group Description Box in Movie Fragments,
318                 the compatible_brands fields shall also contain at least one brand which requires support of Sample
319                 Group Description Boxes in Movie Fragments (e.g. the 'iso6' brand).
320
321         4.8.2 Segment Type Box<a name="4.8.2"></a>
322             For any track containing Opus bitstreams, the following requirements are applied.
323             + compatible_brands:
324                 The same requirements as specified at 4.8.1 File Type Box are applied.
325
326         4.8.3 Movie Header Box<a name="4.8.3"></a>
327             If any track containing Opus bitstreams, the following recommendations are applied.
328             + timescale:
329                 The timescale field should be set to the same value of the timescale field in the Media Header Box
330                 inside Track Box(es) for Opus bitstream if no tracks for bitstreams other than Opus bitstream is present.
331
332         4.8.4 Track Header Box<a name="4.8.4"></a>
333             For any track containing Opus bitstreams, the following requirements are applied.
334             + layer:
335                 The layer field shall be set to 0.
336             + matrix:
337                 The matrix field shall be set to { 0x00010000,0,0,0,0x00010000,0,0,0,0x40000000 }.
338             + width:
339                 The width field shall be set to 0.
340             + height:
341                 The height field shall be set to 0.
342
343         4.8.5 Edit Box<a name="4.8.5"></a>
344             For any track containing Opus bitstreams, exactly one Edit Box shall be present.
345
346         4.8.6 Edit List Box<a name="4.8.6"></a>
347             For any track containing Opus bitstreams, exactly one Edit List Box shall be present. In addition, for
348             non-empty edits, the following recommendations are applied.
349             + segment_duration:
350                 The segment_duration field can be used to indicate the actual duration of Opus bitstream.
351                 When the value of the timescale field in the Movie Header Box is equal to 48000, the segment_duration
352                 field shall be set to the number of the valid samples to indicate the actual duration.
353                 When enabling movie fragments, the segment_duration field may be set to 0. The value 0 represents
354                 implicit duration equal to the sum of the duration of all samples. This would be helpful for excluding
355                 the padded samples from the presentation timeline when producing movie fragments on the fly.
356             + media_time:
357                 The media_time field can be used to remove the priming samples of Opus bitstreams.
358                 When the value of the timescale field in the Media Header Box is equal to 48000, the media_time field
359                 shall be set to the number of the priming samples to remove the priming samples.
360             + media_rate:
361                 If the segment_duration field is used to indicate the actual duration, the media_rate field shall be
362                 set to 1.
363
364         4.8.7 Media Header Box<a name="4.8.7"></a>
365             For any track containing Opus bitstreams, the following recommendation is applied.
366             + timescale:
367                 The timescale field should be set to 48000 to access sample-accurately.
368
369         4.8.8 Handler Reference Box<a name="4.8.8"></a>
370             For any track containing Opus bitstreams, the following requirement is applied.
371             + handler_type:
372                 The handler_type field shall be set to 'soun'.
373
374         4.8.9 Sound Media Header Box<a name="4.8.9"></a>
375             For any track containing Opus bitstreams, the Sound Media Header Box shall be present.
376
377         4.8.10 Sample Table Box<a name="4.8.10"></a>
378             For any track containing Opus bitstreams, at least one Sample Group Description Boxes and at least one
379             Sample to Group Boxes shall be present, and the Sync Sample Box shall not be present as long as there are
380             no samples other than Opus samples in the same track.
381
382         4.8.11 OpusSampleEntry<a name="4.8.11"></a>
383             For any track containing Opus bitstreams, at least one OpusSampleEntry shall be present.
384
385             The syntax and semantics of the OpusSampleEntry is shown as follows.
386
387             class OpusSampleEntry() extends AudioSampleEntry ('Opus'){
388                 OpusSpecificBox();
389             }
390
391             + channelcount:
392                 The channelcount field shall be set to the sum of the total number of Opus bitstreams and the number
393                 of Opus bitstreams producing two channels. This value is indentical with (M+N), where M is the value of
394                 the *Coupled Stream Count* field and N is the value of the *Stream Count* field in the *Channel Mapping
395                 Table* in the identification header defined in Ogg Opus [4].
396             + samplesize:
397                 The samplesize field shall be set to 16.
398             + samplerate:
399                 The samplerate field shall be set to 48000&lt&lt16.
400
401         4.8.12 Opus Specific Box<a name="4.8.12"></a>
402             Exactly one Opus Specific Box shall be present in each OpusSampleEntry.
403             The Opus Specific Box contains the version field and this specification defines version 0 of this box.
404             If incompatible changes occured in the fields after the version field within the OpusSpecificBox in the
405             future versions of this specification, another version will be defined.
406
407             The syntax and semantics of the Opus Specific Box is shown as follows.
408
409             aligned(8) class OpusSpecificBox extends FullBox('dOps', version, dflags){
410                 unsigned int(8) OutputChannelCount;
411                 if (dflags & 0x000001) {
412                     unsigned int(16) PreSkip;
413                 }
414                 if (dflags & 0x000002) {
415                     unsigned int(32) InputSampleRate;
416                 }
417                 if (dflags & 0x000004) {
418                     signed int(16) OutputGain;
419                 }
420                 unsigned int(8) ChannelMappingFamily;
421                 if (ChannelMappingFamily != 0) {
422                     unsigned int(8 * (2 + OutputChannelCount)) ChannelMappingTable;
423                 }
424             }
425
426             + version:
427                 The version field shall be set to 0.
428                 In the future versions of this specification, this field may be set to other values. And without support
429                 of those values, the reader shall not read the fields after this within the OpusSpecificBox.
430             + flags:
431                 The following flags are defined in the dflags:
432                     0x000001 pre-skip-present:
433                         This flag indicates the presence of the PreSkip field.
434                     0x000002 input-sample-rate-present:
435                         This flag indicates the presence of the InputSampleRate field.
436                     0x000004 output-gain-present:
437                         This flag indicates the presence of the OutputGain field.
438             + OutputChannelCount:
439                 The OutputChannelCount field shall be set to the same value as the *Output Channel Count* field in the
440                 identification header defined in Ogg Opus [4].
441             + PreSkip:
442                 The PreSkip field shall be set to the same value as the *Pre-skip* field in the identification header
443                 defined in Ogg Opus [4]. Note that the value is stored as big-endian format.
444                 The PreSkip field can be absent after removing Opus samples containing the number of PCM samples more
445                 than of the priming samples.
446                 The PreSkip field is not used for removing the priming samples at the whole playback at all since it is
447                 informative only, and that task falls on the Edit List Box.
448             + InputSampleRate:
449                 The InputSampleRate field shall be set to the same value as the *Input Sample Rate* field in the
450                 identification header defined in Ogg Opus [4]. Note that the value is stored as big-endian format.
451                 If the InputSampleRate field is absent, process as if it is set to 0, which indicates "unspecified".
452             + OutputGain:
453                 The OutputGain field shall be set to the same value as the *Output Gain* field in the identification
454                 header define in Ogg Opus [4]. Note that the value is stored as 8.8 fixed-point and big-endian format.
455                 If the OutputGain field is absent, process as if it is set to 0.
456             + ChannelMappingFamily:
457                 The ChannelMappingFamily field shall be set to the same value as the *Channel Mapping Family* field in
458                 the identification header defined in Ogg Opus [4].
459             + ChannelMappingTable:
460                 The ChannelMappingTable field shall be set to the same octet string as *Channel Mapping Table* field in
461                 the identification header defined in Ogg Opus [4].
462
463         4.8.13 Sample Group Description Box<a name="4.8.13"></a>
464             For any track containing Opus bitstreams, at least one Sample Group Description Box shall be present and have
465             the grouping_type field set to 'roll'. In addition, the following requirements and restriction are applied.
466             + version:
467                 The version field shall be set to 1 if the grouping_type field set to 'roll'.
468             + default_length
469                 The default_length field shall be set to 2 if the grouping_type field set to 'roll'.
470             + roll_distance:
471                 The roll_distance field in any AudioRollRecoveryEntry shall not be set to zero and positive values for\r
472                 any Opus sample.
473
474             See also 4.5.2 Pre-roll.
475
476         4.8.14 Sample to Group Box<a name="4.8.14"></a>
477             For any track containing Opus bitstreams, at least one Sample to Group Box shall be present and have the
478             grouping_type field set to 'roll'. In addition, the following requirement is applied.
479             + group_description_index:
480                 The group_description_index fields shall not be set to 0 if the grouping_type field set to 'roll'.
481
482         4.8.15 Track Extends Box<a name="4.8.15"></a>
483             For any track containing Opus bitstreams, the following requirement is applied.
484             + default_sample_flags:
485                 The sample_is_non_sync_sample field shall be set to 0.
486
487         4.8.16 Track Fragment Box<a name="4.8.16"></a>
488             For any track containing Opus bitstreams, if any sample is contained in track fragment, the Sample to
489             Group Box with the grouping_type field set to 'roll' shall be present for that track fragment.
490
491         4.8.17 Track Fragment Header Box<a name="4.8.17"></a>
492             For any track containing Opus bitstreams, the following requirement is applied.
493             + default_sample_flags:
494                 The sample_is_non_sync_sample field shall be set to 0.
495
496         4.8.18 Track Fragment Run Box<a name="4.8.18"></a>
497             For any track containing Opus bitstreams, the following requirements are applied.
498             + first_sample_flags:
499                 The sample_is_non_sync_sample field shall be set to 0.
500             + sample_flags:
501                 The sample_is_non_sync_sample field shall be set to 0.
502 <a name="4.9"></a>
503     4.9 Example of Encapsulation
504         [File]
505             size = 10349
506             [ftyp: File Type Box]
507                 position = 0
508                 size = 24
509                 major_brand = mp42 : MP4 version 2
510                 minor_version = 0
511                 compatible_brands
512                     brand[0] = mp42 : MP4 version 2
513                     brand[1] = iso2 : ISO Base Media file format version 2
514             [free: Free Space Box]
515                 position = 24
516                 size = 8
517             [mdat: Media Data Box]
518                 position = 32
519                 size = 9551
520             [moov: Movie Box]
521                 position = 9583
522                 size = 766
523                 [mvhd: Movie Header Box]
524                     position = 9591
525                     size = 108
526                     version = 0
527                     flags = 0x000000
528                     creation_time = UTC 2014/09/23, 15:23:21
529                     modification_time = UTC 2014/09/23, 15:23:21
530                     timescale = 48000
531                     duration = 33600 (00:00:00.700)
532                     rate = 1.000000
533                     volume = 1.000000
534                     reserved = 0x0000
535                     reserved = 0x00000000
536                     reserved = 0x00000000
537                     transformation matrix
538                         | a, b, u |   | 1.000000, 0.000000, 0.000000 |
539                         | c, d, v | = | 0.000000, 1.000000, 0.000000 |
540                         | x, y, w |   | 0.000000, 0.000000, 1.000000 |
541                     pre_defined = 0x00000000
542                     pre_defined = 0x00000000
543                     pre_defined = 0x00000000
544                     pre_defined = 0x00000000
545                     pre_defined = 0x00000000
546                     pre_defined = 0x00000000
547                     next_track_ID = 2
548                 [iods: Object Descriptor Box]
549                     position = 9699
550                     size = 33
551                     version = 0
552                     flags = 0x000000
553                     [tag = 0x10: MP4_IOD]
554                         expandableClassSize = 16
555                         ObjectDescriptorID = 1
556                         URL_Flag = 0
557                         includeInlineProfileLevelFlag = 0
558                         reserved = 0xf
559                         ODProfileLevelIndication = 0xff
560                         sceneProfileLevelIndication = 0xff
561                         audioProfileLevelIndication = 0xfe
562                         visualProfileLevelIndication = 0xff
563                         graphicsProfileLevelIndication = 0xff
564                         [tag = 0x0e: ES_ID_Inc]
565                             expandableClassSize = 4
566                             Track_ID = 1
567                 [trak: Track Box]
568                     position = 9732
569                     size = 617
570                     [tkhd: Track Header Box]
571                         position = 9740
572                         size = 92
573                         version = 0
574                         flags = 0x000007
575                             Track enabled
576                             Track in movie
577                             Track in preview
578                         creation_time = UTC 2014/09/23, 15:23:21
579                         modification_time = UTC 2014/09/23, 15:23:21
580                         track_ID = 1
581                         reserved = 0x00000000
582                         duration = 33600 (00:00:00.700)
583                         reserved = 0x00000000
584                         reserved = 0x00000000
585                         layer = 0
586                         alternate_group = 0
587                         volume = 1.000000
588                         reserved = 0x0000
589                         transformation matrix
590                             | a, b, u |   | 1.000000, 0.000000, 0.000000 |
591                             | c, d, v | = | 0.000000, 1.000000, 0.000000 |
592                             | x, y, w |   | 0.000000, 0.000000, 1.000000 |
593                         width = 0.000000
594                         height = 0.000000
595                     [edts: Edit Box]
596                         position = 9832
597                         size = 36
598                         [elst: Edit List Box]
599                             position = 9840
600                             size = 28
601                             version = 0
602                             flags = 0x000000
603                             entry_count = 1
604                             entry[0]
605                                 segment_duration = 33600
606                                 media_time = 3840
607                                 media_rate = 1.000000
608                     [mdia: Media Box]
609                         position = 9868
610                         size = 481
611                         [mdhd: Media Header Box]
612                             position = 9876
613                             size = 32
614                             version = 0
615                             flags = 0x000000
616                             creation_time = UTC 2014/09/23, 15:23:21
617                             modification_time = UTC 2014/09/23, 15:23:21
618                             timescale = 48000
619                             duration = 38400 (00:00:00.800)
620                             language = und
621                             pre_defined = 0x0000
622                         [hdlr: Handler Reference Box]
623                             position = 9908
624                             size = 51
625                             version = 0
626                             flags = 0x000000
627                             pre_defined = 0x00000000
628                             handler_type = soun
629                             reserved = 0x00000000
630                             reserved = 0x00000000
631                             reserved = 0x00000000
632                             name = Xiph Audio Handler
633                         [minf: Media Information Box]
634                             position = 9959
635                             size = 390
636                             [smhd: Sound Media Header Box]
637                                 position = 9967
638                                 size = 16
639                                 version = 0
640                                 flags = 0x000000
641                                 balance = 0.000000
642                                 reserved = 0x0000
643                             [dinf: Data Information Box]
644                                 position = 9983
645                                 size = 36
646                                 [dref: Data Reference Box]
647                                     position = 9991
648                                     size = 28
649                                     version = 0
650                                     flags = 0x000000
651                                     entry_count = 1
652                                     [url : Data Entry Url Box]
653                                         position = 10007
654                                         size = 12
655                                         version = 0
656                                         flags = 0x000001
657                                         location = in the same file
658                             [stbl: Sample Table Box]
659                                 position = 10019
660                                 size = 330
661                                 [stsd: Sample Description Box]
662                                     position = 10027
663                                     size = 72
664                                     version = 0
665                                     flags = 0x000000
666                                     entry_count = 1
667                                     [Opus: Audio Description]
668                                         position = 10043
669                                         size = 56
670                                         reserved = 0x000000000000
671                                         data_reference_index = 1
672                                         reserved = 0x0000
673                                         reserved = 0x0000
674                                         reserved = 0x00000000
675                                         channelcount = 2
676                                         samplesize = 16
677                                         pre_defined = 0
678                                         reserved = 0
679                                         samplerate = 48000.000000
680                                         [dOps: Opus Specific Box]
681                                             position = 10071
682                                             size = 20
683                                             version = 0
684                                             flags = 0x000006
685                                             OutputChannelCount = 2
686                                             InputSampleRate = 44100
687                                             OutputGain = 0.000000
688                                             ChannelMappingFamily = 0
689                                 [stts: Decoding Time to Sample Box]
690                                     position = 10099
691                                     size = 24
692                                     version = 0
693                                     flags = 0x000000
694                                     entry_count = 1
695                                     entry[0]
696                                         sample_count = 10
697                                         sample_delta = 3840
698                                 [stsc: Sample To Chunk Box]
699                                     position = 10123
700                                     size = 40
701                                     version = 0
702                                     flags = 0x000000
703                                     entry_count = 2
704                                     entry[0]
705                                         first_chunk = 1
706                                         samples_per_chunk = 4
707                                         sample_description_index = 1
708                                     entry[1]
709                                         first_chunk = 3
710                                         samples_per_chunk = 2
711                                         sample_description_index = 1
712                                 [stsz: Sample Size Box]
713                                     position = 10163
714                                     size = 60
715                                     version = 0
716                                     flags = 0x000000
717                                     sample_size = 0 (variable)
718                                     sample_count = 10
719                                     entry_size[0] = 780
720                                     entry_size[1] = 920
721                                     entry_size[2] = 963
722                                     entry_size[3] = 988
723                                     entry_size[4] = 1024
724                                     entry_size[5] = 951
725                                     entry_size[6] = 933
726                                     entry_size[7] = 1017
727                                     entry_size[8] = 992
728                                     entry_size[9] = 975
729                                 [stco: Chunk Offset Box]
730                                     position = 10223
731                                     size = 28
732                                     version = 0
733                                     flags = 0x000000
734                                     entry_count = 3
735                                     chunk_offset[0] = 40
736                                     chunk_offset[1] = 3691
737                                     chunk_offset[2] = 7616
738                                 [sgpd: Sample Group Description Box]
739                                     position = 10251
740                                     size = 30
741                                     version = 1
742                                     flags = 0x000000
743                                     grouping_type = roll
744                                     default_length = 2 (constant)
745                                     entry_count = 3
746                                     roll_distance[0] = -1
747                                     roll_distance[1] = -2
748                                     roll_distance[2] = -3
749                                 [sbgp: Sample to Group Box]
750                                     position = 10281
751                                     size = 68
752                                     version = 0
753                                     flags = 0x000000
754                                     grouping_type = roll
755                                     entry_count = 6
756                                     entry[0]
757                                         sample_count = 2
758                                         group_description_index = 1
759                                     entry[1]
760                                         sample_count = 1
761                                         group_description_index = 2
762                                     entry[2]
763                                         sample_count = 1
764                                         group_description_index = 3
765                                     entry[3]
766                                         sample_count = 1
767                                         group_description_index = 2
768                                     entry[4]
769                                         sample_count = 3
770                                         group_description_index = 3
771                                     entry[5]
772                                         sample_count = 2
773                                         group_description_index = 1
774
775 <a name="5"></a>
776 5 Authors' Address
777     Yusuke Nakamura
778         Email: muken.the.vfrmaniac |at| gmail.com
779         </div>
780     </body>
781 </html>