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