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