ref: 3c09b440b4e5140aa1f5c24ee49ac9d766b16b25
parent: da97db1ca1f92592af3534c9a2596da0e9a009ca
author: Ralph Giles <giles@mozilla.com>
date: Thu Sep 25 10:21:08 EDT 2014
Import mp4 encapsulation spec v0.1.4. Based on http://vfrmaniac.fushizen.eu/contents/opus_in_isobmff.html
--- /dev/null
+++ b/doc/opus_in_isobmff.html
@@ -1,0 +1,699 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+ <head>
+ <link rel="stylesheet" type="text/css" href="../style.css"/>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Encapsulation of Opus in ISO Base Media File Format</title>
+ </head>
+ <body bgcolor="0x333333" text="#60B0C0">
+ <b><u>Encapsulation of Opus in ISO Base Media File Format</u></b><br>
+ <font size="2">last updated: September 26, 2014</font><br>
+ <br>
+ <div class="normal_link pre frame_box">
+<center>Encapsulation of Opus in ISO Base Media File Format</center>
+<center>Version 0.1.4 (incomplete)</center>
+
+Table of Contents
+<a href="#1">1</a> Scope
+<a href="#2">2</a> Normative References
+<a href="#3">3</a> Terms and Definitions
+<a href="#4">4</a> Design Rules of Encapsulation
+ <a href="#4.1">4.1</a> File Type Indentification
+ <a href="#4.2">4.2</a> Basic Structure
+ <a href="#4.2.1">4.2.1</a> Initial Movie
+ <a href="#4.2.2">4.2.2</a> Movie Fragments
+ <a href="#4.3">4.3</a> Byte Order
+ <a href="#4.4">4.4</a> Definition of Opus sample
+ <a href="#4.4.1">4.4.1</a> Opus sample
+ <a href="#4.4.2">4.4.2</a> Duration of Opus sample
+ <a href="#4.5">4.5</a> Random Access
+ <a href="#4.5.1">4.5.1</a> Random Access Point
+ <a href="#4.5.2">4.5.2</a> Pre-roll
+ <a href="#4.6">4.6</a> Trimming of Actual Duration
+ <a href="#4.7">4.7</a> Additional Requirements, Restrictions, Recommendations and Definitions for Boxes
+ <a href="#4.7.1">4.7.1</a> File Type Box
+ <a href="#4.7.2">4.7.2</a> Segment Type Box
+ <a href="#4.7.3">4.7.3</a> Movie Header Box
+ <a href="#4.7.4">4.7.4</a> Track Header Box
+ <a href="#4.7.5">4.7.5</a> Edit Box
+ <a href="#4.7.6">4.7.6</a> Edit List Box
+ <a href="#4.7.7">4.7.7</a> Media Header Box
+ <a href="#4.7.8">4.7.8</a> Handler Reference Box
+ <a href="#4.7.9">4.7.9</a> Sound Media Header Box
+ <a href="#4.7.10">4.7.10</a> Sample Table Box
+ <a href="#4.7.11">4.7.11</a> OpusSampleEntry
+ <a href="#4.7.12">4.7.12</a> Opus Specific Box
+ <a href="#4.7.13">4.7.13</a> Sample Group Description Box
+ <a href="#4.7.14">4.7.14</a> Sample to Group Box
+ <a href="#4.7.15">4.7.15</a> Track Extends Box
+ <a href="#4.7.16">4.7.16</a> Track Fragment Box
+ <a href="#4.7.17">4.7.17</a> Track Fragment Header Box
+ <a href="#4.7.18">4.7.18</a> Track Fragment Run Box
+ <a href="#4.8">4.8</a> Example of Encapsulation
+<a href="#5">5</a> Author's Address
+
+<a name="1"></a>
+1 Scope
+ This specification specifies the fundamental way of the encapsulation of Opus coded bitstreams in ISO Base Media
+ file formats and its derivatives.
+
+<a name="2"></a>
+2 Normative References
+ [1] ISO/IEC 14496-12:2012 Corrected version
+ Information technology — Coding of audio-visual objects — Part 12: ISO base media file format
+
+ [2] ISO/IEC 14496-12:2012/Amd.1:2013
+ Information technology — Coding of audio-visual objects — Part 12: ISO base media file format
+ AMENDMENT 1: Various enhancements including support for large metadata
+
+ [3] RFC 6716
+ Definition of the Opus Audio Codec
+
+ [4] draft-ietf-codec-oggopus-04
+ Ogg Encapsulation for the Opus Audio Codec
+
+<a name="3"></a>
+3 Terms and Definitions
+ 3.1 actual duration
+ duration constructed from valid samples
+
+ 3.2 edit
+ entry in the Edit List Box
+
+ 3.3 padded samples
+ PCM samples after decoding Opus sample(s) which are not valid samples
+
+ 3.4 priming samples
+ extra PCM samples after decoding Opus sample(s) at the beginning of the Opus bitstream
+
+ 3.5 sample-accurate
+ for any PCM sample, a timestamp exactly matching its sampling timestamp is present in the media timeline.
+
+ 3.6 valid samples
+ PCM samples after decoding Opus sample(s) corresponding to input PCM samples
+
+<a name="4"></a>
+4 Design Rules of Encapsulation
+ 4.1 File Type Indentification<a name="4.1"></a>
+ This specification does not define brands to declare files are conformant to this specification.
+ TODO: Should we define such brands, e.g. 'Opus'. If we define the brand(s), we can utilize files conformant to
+ this specification for the storage of Opus coded bitstream without other derived file formats.
+<a name="4.2"></a>
+ 4.2 Basic Structure
+ 4.2.1 Initial Movie<a name="4.2.1"></a>
+ This subclause specifies a basic structure of the Movie Box as follows:
+
+ +----+----+----+----+----+----+----+----+------------------------------+
+ |moov| | | | | | | | Movie Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | |mvhd| | | | | | | Movie Header Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | |trak| | | | | | | Track Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | | |tkhd| | | | | | Track Header Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | | |edts| | | | | | Edit Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | | | |elst| | | | | Edit List Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | | |mdia| | | | | | Media Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | | | |mdhd| | | | | Media Header Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | | | |hdlr| | | | | Handler Reference Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | | | |minf| | | | | Media Information Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | | | | |smhd| | | | Sound Media Information Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | | | | |dinf| | | | Data Information Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | | | | | |dref| | | Data Reference Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | | | | | | |url | | DataEntryUrlBox |
+ +----+----+----+----+----+----+ or +----+------------------------------+
+ | | | | | | |urn | | DataEntryUrnBox |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | | | | |stbl| | | | Sample Table |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | | | | | |stsd| | | Sample Description Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | | | | | | |Opus| | OpusSampleEntry |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | | | | | | | |dOps| Opus Specific Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | | | | | |stts| | | Decoding Time to Sample Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | | | | | |stsc| | | Sample To Chunk Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | | | | | |stsz| | | Sample Size Box |
+ +----+----+----+----+----+ or +----+----+------------------------------+
+ | | | | | |stz2| | | Compact Sample Size Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | | | | | |stco| | | Chunk Offset Box |
+ +----+----+----+----+----+ or +----+----+------------------------------+
+ | | | | | |co64| | | Chunk Large Offset Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | | | | | |sgpd| | | Sample Group Description Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | | | | | |sbgp| | | Sample to Group Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | |mvex|* | | | | | | Movie Extends Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | | |trex|* | | | | | Track Extends Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+
+ It is strongly recommended that the order of boxes should follow the above structure.
+ Boxes marked with an asterisk (*) may be present.
+ For some boxes listed above, the additional requirements, restrictions, recommendations and definitions
+ are specified in 4.7 Additional Requirements, Restrictions, Recommendations and Definitions for Boxes in
+ this specification.
+ For the others, the definition is as is defined in ISO/IEC 14496-12 [1].
+
+ 4.2.2 Movie Fragments<a name="4.2.2"></a>
+ This subclause specifies a basic structure of the Movie Fragment Box as follows:
+
+ +----+----+----+----+----+----+----+----+------------------------------+
+ |moof| | | | | | | | Movie Fragment Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | |mfhd| | | | | | | Movie Fragment Header Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | |traf| | | | | | | Track Fragment Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | | |tfhd| | | | | | Track Fragment Header Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | | |trun| | | | | | Track Fragment Run Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | | |sgpd|* | | | | | Sample Group Description Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+ | | |sbgp|* | | | | | Sample to Group Box |
+ +----+----+----+----+----+----+----+----+------------------------------+
+
+ It is strongly recommended that the Movie Fragment Header Box and the Track Fragment Header Box be
+ placed first in their container.
+ Boxes marked with an asterisk (*) may be present.
+ For some boxes listed above, the additional requirements, restrictions, recommendations and definitions
+ are specified in 4.7 Additional Requirements, Restrictions, Recommendations and Definitions for Boxes in
+ this specification.
+ For the others, the definition is as is defined in ISO/IEC 14496-12 [1].
+<a name="4.3"></a>
+ 4.3 Byte Order
+ The fields in the boxes are stored as big-endian format.
+ TODO: What about bytes in Opus samples?
+<a name="4.4"></a>
+ 4.4 Definition of Opus sample
+ 4.4.1 Opus sample<a name="4.4.1"></a>
+ An Opus sample is exactly one Opus packet.
+ In this specification, 'sample' means 'Opus sample' except for 'padded samples', 'priming samples', 'valid
+ sample' and 'sample-accurate', i.e. 'sample' is 'sample' in the term defined in ISO/IEC 14496-12 [1].
+ TODO: If an Opus packet consists of multiple Opus streams, it can be splitted into individual streams and
+ reconstructed into new Opus packets as long as every Opus stream has the same total duration in each
+ Opus packet. This requires additional channel mapping at outside of the existing Opus Specific Box.
+ The solution may be achieved by using track references and new channel mapping/layout indications.
+ Or should we forbid splitting into multiple tracks to avoid more complex implementations?
+ Or just use channel mapping other than what the existing Opus Specific Box does, such as bit masks?
+
+ 4.4.2 Duration of Opus sample<a name="4.4.2"></a>
+ The duration of Opus sample is given by multiplying the least common multiple of the frame size in seconds
+ of all frames inside Opus packet by the value of the timescale field in the Media Header Box.
+
+ To indicate the valid samples excluding the padded samples at the end of Opus bitstream, the duration of
+ the last Opus sample of an Opus bitstream is given by multiplying the number of the valid samples by the
+ value produced by dividing the value of the timescale field in the Media Header Box by 48000.
+<a name="4.5"></a>
+ 4.5 Random Access
+ 4.5.1 Random Access Point<a name="4.5.1"></a>
+ All Opus packets can be independently decoded i.e. every Opus sample is a sync sample.
+ Therefore, the Sync Sample Box shall not be present.
+
+ 4.5.2 Pre-roll<a name="4.5.2"></a>
+ Opus requires at least 80 milli-second pre-roll after each random access.
+ Pre-roll is indicated by the roll_distance field in AudioRollRecoveryEntry. AudioPreRollEntry shall not be
+ used since every Opus sample is a sync sample in Opus bitstream.
+ Note that roll_distance is expressed in sample units in a term of ISO Base Media File Format, and always
+ takes negative values.
+
+ For the requirement of AudioRollRecoveryEntry, the compatible_brands field in the File Type Box and/or
+ the Segment Type Box shall contain at least one brand which requires support for roll groups.
+ See also 4.7.1 File Type Box and 4.7.2 Segment Type Box.
+<a name="4.6"></a>
+ 4.6 Trimming of Actual Duration
+ Due to the priming samples (or the padding at the beginning) derived from the pre-roll for the startup and the
+ padding at the end, we need trim from media to get the actual duration before encoded.
+ An edit in the Edit List Box can achieve this demand.
+ For sample-accurate trimming, proper timescale should be set to the timescale field in the Movie Header Box
+ and the Media Header Box inside Track Box(es) for Opus bitstream.
+
+ The Edit List Box is applied to whole movie including all movie fragments. Therefore, it is impossible to tell
+ the actual duration in the case producing movie fragments on the fly such as live-streaming. In such cases,
+ the duration of the last Opus sample may be helpful.
+ TODO: Should we define a new box which indicates the last Opus samples?
+ Since this specification allows multiple sample descriptions, i.e. allows concatenation of multiple Opus
+ bitstreams in a track, each Opus bitstream contains some padded samples.
+ Without such a box, we cannot know in container level whether an Opus sample is the last Opus sample in
+ an Opus bitstream or not. Is this preferable?
+
+ See also 4.7.6 Edit List Box.
+<a name="4.7"></a>
+ 4.7 Additional Requirements, Restrictions, Recommendations and Definitions for Boxes
+ 4.7.1 File Type Box<a name="4.7.1"></a>
+ For any track containing Opus bitstreams, the following requirements are applied.
+ + compatible_brands:
+ The compatible_brands fields shall contain at least one brand which requires support for roll groups
+ (e.g. the 'iso2' brand).
+ When enabling movie fragments and placing at least one Sample Group Description Box in Movie Fragments,
+ the compatible_brands fields shall also contain at least one brand which requires support of Sample
+ Group Description Boxes in Movie Fragments (e.g. the 'iso6' brand).
+
+ 4.7.2 Segment Type Box<a name="4.7.2"></a>
+ For any track containing Opus bitstreams, the following requirements are applied.
+ + compatible_brands:
+ The same requirements as specified at 4.7.1 File Type Box are applied.
+
+ 4.7.3 Movie Header Box<a name="4.7.3"></a>
+ If any track containing Opus bitstreams, the following recommendations are applied.
+ + timescale:
+ The timescale field should be set to the same value of the timescale field in the Media Header Box
+ inside Track Box(es) for Opus bitstream if no tracks for bitstreams other than Opus bitstream is present.
+
+ 4.7.4 Track Header Box<a name="4.7.4"></a>
+ For any track containing Opus bitstreams, the following requirements are applied.
+ + layer:
+ The layer field shall be set to 0.
+ + matrix:
+ The matrix field shall be set to { 0x00010000,0,0,0,0x00010000,0,0,0,0x40000000 }.
+ + width:
+ The width field shall be set to 0.
+ + height:
+ The height field shall be set to 0.
+
+ 4.7.5 Edit Box<a name="4.7.5"></a>
+ For any track containing Opus bitstreams, exactly one Edit Box shall be present.
+
+ 4.7.6 Edit List Box<a name="4.7.6"></a>
+ For any track containing Opus bitstreams, exactly one Edit List Box shall be present. In addition, for
+ non-empty edits, the following recommendations are applied.
+ + segment_duration:
+ The segment_duration field is used to indicate the actual duration of Opus bitstream.
+ When the value of the timescale field in the Movie Header Box is equal to 48000, the segment_duration
+ should be set to the number of the actual samples before encoded.
+ When enabling movie fragments, the segment_duration field may be set to 0. The value 0 represents
+ implicit duration equal to the sum of the duration of all samples. This would be helpful for excluding
+ padded samples from the presentation timeline when producing movie fragments on the fly.
+ + media_time:
+ The media_time field is used to remove the priming samples of Opus bitstream.
+ When the value of the timescale field in the Media Header Box is equal to 48000, the media_time shall
+ be set to the number of priming samples to remove the priming samples for the first non-empty edit.
+
+ 4.7.7 Media Header Box<a name="4.7.7"></a>
+ For any track containing Opus bitstreams, the following recommendation is applied.
+ + timescale:
+ The timescale field should be set to 48000 to access sample-accurately.
+
+ 4.7.8 Handler Reference Box<a name="4.7.8"></a>
+ For any track containing Opus bitstreams, the following requirement is applied.
+ + handler_type:
+ The handler_type field shall be set to 'soun'.
+
+ 4.7.9 Sound Media Header Box<a name="4.7.9"></a>
+ For any track containing Opus bitstreams, the Sound Media Header Box shall be present.
+
+ 4.7.10 Sample Table Box<a name="4.7.10"></a>
+ For any track containing Opus bitstreams, at least one Sample Group Description Boxes and at least one
+ Sample to Group Boxes shall be present and the Sync Sample Box shall not be present.
+
+ 4.7.11 OpusSampleEntry<a name="4.7.11"></a>
+ For any track containing Opus bitstreams, at least one OpusSampleEntry shall be present.
+
+ The syntax and semantics of the OpusSampleEntry is shown as follows.
+
+ class OpusSampleEntry() extends AudioSampleEntry ('Opus'){
+ OpusSpecificBox();
+ }
+
+ + channelcount:
+ The channelcount field shall be set to the sum of the total number of Opus bitstreams and the number
+ of Opus bitstreams producing two channels. This value is indentical with (M+N), where M is the value of
+ the *Coupled Stream Count* field and N is the value of the *Stream Count* field in the *Channel Mapping
+ Table* in the identification header defined in Ogg Opus [4].
+ + samplesize:
+ The samplesize field shall be set to 16.
+ + samplerate:
+ The samplerate field shall be set to 48000<<16.
+
+ 4.7.12 Opus Specific Box<a name="4.7.12"></a>
+ Exactly one Opus Specific Box shall be present in each OpusSampleEntry.
+
+ The syntax and semantics of the Opus Specific Box is shown as follows.
+
+ aligned(8) class OpusSpecificBox extends FullBox('dOps', version, dflags){
+ if (flags & 0x000001) {
+ unsigned int(16) PreSkip;
+ }
+ unsigned int(32) InputSampleRate;
+ signed int(16) OutputGain;
+ unsigned int(8) OutputChannelCount;
+ unsigned int(8) ChannelMappingFamily;
+ if (ChannelMappingFamily != 0) {
+ unsigned int(8 * (2 + OutputChannelCount)) ChannelMappingTable;
+ }
+ }
+
+ + version:
+ The version field shall be set to 0.
+ + flags:
+ The following flags are defined in the dflags:
+ 0x000001 pre-skip-present:
+ This flag indicates the presence of the PreSkip field.
+ + PreSkip:
+ The PreSkip field shall be set to the same value as the *Pre-skip* field in the identification header
+ defined in Ogg Opus [4]. Note that the value is stored as big-endian format.
+ This field can be absent after removing Opus samples containing the number of PCM samples more than the
+ number of the priming samples.
+ This field is not used for removing the priming samples at playback.
+ + InputSampleRate:
+ The InputSampleRate field shall be set to the same value as the *Input Sample Rate* field in the
+ identification header defined in Ogg Opus [4]. Note that the value is stored as big-endian format.
+ + OutputGain:
+ The OutputGain field shall be set to the same value as the *Output Gain* field in the identification
+ header define in Ogg Opus [4]. Note that the value is stored as big-endian format.
+ + OutputChannelCount:
+ The OutputChannelCount field shall be set to the same value as the *Output Channel Count* field in the
+ identification header defined in Ogg Opus [4].
+ + ChannelMappingFamily:
+ The ChannelMappingFamily field shall be set to the same value as the *Channel Mapping Family* field in
+ the identification header defined in Ogg Opus [4].
+ + ChannelMappingTable:
+ The ChannelMappingTable field shall be set to the same octet string as *Channel Mapping Table* field in
+ the identification header defined in Ogg Opus [4].
+
+ 4.7.13 Sample Group Description Box<a name="4.7.13"></a>
+ For any track containing Opus bitstreams, at least one Sample Group Description Box shall be present and have
+ the grouping_type field set to 'roll'. See also 4.5.2 Pre-roll.
+
+ 4.7.14 Sample to Group Box<a name="4.7.14"></a>
+ For any track containing Opus bitstreams, at least one Sample to Group Box shall be present and have the
+ grouping_type field set to 'roll'. In addition, the following requirement is applied.
+ + group_description_index:
+ The group_description_index fields shall not be set to 0 if the grouping_type field set to 'roll'.
+
+ 4.7.15 Track Extends Box<a name="4.7.15"></a>
+ For any track containing Opus bitstreams, the following requirement is applied.
+ + default_sample_flags:
+ The sample_is_non_sync_sample field shall be set to 0.
+
+ 4.7.16 Track Fragment Box<a name="4.7.16"></a>
+ For any track containing Opus bitstreams, if any sample is contained in track fragment, the Sample to
+ Group Box with the grouping_type field set to 'roll' shall be present for that track fragment.
+
+ 4.7.17 Track Fragment Header Box<a name="4.7.17"></a>
+ For any track containing Opus bitstreams, the following requirement is applied.
+ + default_sample_flags:
+ The sample_is_non_sync_sample field shall be set to 0.
+
+ 4.7.18 Track Fragment Run Box<a name="4.7.18"></a>
+ For any track containing Opus bitstreams, the following requirements are applied.
+ + first_sample_flags:
+ The sample_is_non_sync_sample field shall be set to 0.
+ + sample_flags:
+ The sample_is_non_sync_sample field shall be set to 0.
+<a name="4.8"></a>
+ 4.8 Example of Encapsulation
+ [File]
+ size = 10349
+ [ftyp: File Type Box]
+ position = 0
+ size = 24
+ major_brand = mp42 : MP4 version 2
+ minor_version = 0
+ compatible_brands
+ brand[0] = mp42 : MP4 version 2
+ brand[1] = iso2 : ISO Base Media file format version 2
+ [free: Free Space Box]
+ position = 24
+ size = 8
+ [mdat: Media Data Box]
+ position = 32
+ size = 9551
+ [moov: Movie Box]
+ position = 9583
+ size = 766
+ [mvhd: Movie Header Box]
+ position = 9591
+ size = 108
+ version = 0
+ flags = 0x000000
+ creation_time = UTC 2014/09/23, 15:23:21
+ modification_time = UTC 2014/09/23, 15:23:21
+ timescale = 48000
+ duration = 33600 (00:00:07.000)
+ rate = 1.000000
+ volume = 1.000000
+ reserved = 0x0000
+ reserved = 0x00000000
+ reserved = 0x00000000
+ transformation matrix
+ | a, b, u | | 1.000000, 0.000000, 0.000000 |
+ | c, d, v | = | 0.000000, 1.000000, 0.000000 |
+ | x, y, w | | 0.000000, 0.000000, 1.000000 |
+ pre_defined = 0x00000000
+ pre_defined = 0x00000000
+ pre_defined = 0x00000000
+ pre_defined = 0x00000000
+ pre_defined = 0x00000000
+ pre_defined = 0x00000000
+ next_track_ID = 2
+ [iods: Object Descriptor Box]
+ position = 9699
+ size = 33
+ version = 0
+ flags = 0x000000
+ [tag = 0x10: MP4_IOD]
+ expandableClassSize = 16
+ ObjectDescriptorID = 1
+ URL_Flag = 0
+ includeInlineProfileLevelFlag = 0
+ reserved = 0xf
+ ODProfileLevelIndication = 0xff
+ sceneProfileLevelIndication = 0xff
+ audioProfileLevelIndication = 0xfe
+ visualProfileLevelIndication = 0xff
+ graphicsProfileLevelIndication = 0xff
+ [tag = 0x0e: ES_ID_Inc]
+ expandableClassSize = 4
+ Track_ID = 1
+ [trak: Track Box]
+ position = 9732
+ size = 617
+ [tkhd: Track Header Box]
+ position = 9740
+ size = 92
+ version = 0
+ flags = 0x000007
+ Track enabled
+ Track in movie
+ Track in preview
+ creation_time = UTC 2014/09/23, 15:23:21
+ modification_time = UTC 2014/09/23, 15:23:21
+ track_ID = 1
+ reserved = 0x00000000
+ duration = 33600 (00:00:07.000)
+ reserved = 0x00000000
+ reserved = 0x00000000
+ layer = 0
+ alternate_group = 0
+ volume = 1.000000
+ reserved = 0x0000
+ transformation matrix
+ | a, b, u | | 1.000000, 0.000000, 0.000000 |
+ | c, d, v | = | 0.000000, 1.000000, 0.000000 |
+ | x, y, w | | 0.000000, 0.000000, 1.000000 |
+ width = 0.000000
+ height = 0.000000
+ [edts: Edit Box]
+ position = 9832
+ size = 36
+ [elst: Edit List Box]
+ position = 9840
+ size = 28
+ version = 0
+ flags = 0x000000
+ entry_count = 1
+ entry[0]
+ segment_duration = 33600
+ media_time = 3840
+ media_rate = 1.000000
+ [mdia: Media Box]
+ position = 9868
+ size = 481
+ [mdhd: Media Header Box]
+ position = 9876
+ size = 32
+ version = 0
+ flags = 0x000000
+ creation_time = UTC 2014/09/23, 15:23:21
+ modification_time = UTC 2014/09/23, 15:23:21
+ timescale = 48000
+ duration = 38400 (00:00:08.000)
+ language = und
+ pre_defined = 0x0000
+ [hdlr: Handler Reference Box]
+ position = 9908
+ size = 51
+ version = 0
+ flags = 0x000000
+ pre_defined = 0x00000000
+ handler_type = soun
+ reserved = 0x00000000
+ reserved = 0x00000000
+ reserved = 0x00000000
+ name = Xiph Audio Handler
+ [minf: Media Information Box]
+ position = 9959
+ size = 390
+ [smhd: Sound Media Header Box]
+ position = 9967
+ size = 16
+ version = 0
+ flags = 0x000000
+ balance = 0.000000
+ reserved = 0x0000
+ [dinf: Data Information Box]
+ position = 9983
+ size = 36
+ [dref: Data Reference Box]
+ position = 9991
+ size = 28
+ version = 0
+ flags = 0x000000
+ entry_count = 1
+ [url : Data Entry Url Box]
+ position = 10007
+ size = 12
+ version = 0
+ flags = 0x000001
+ location = in the same file
+ [stbl: Sample Table Box]
+ position = 10019
+ size = 330
+ [stsd: Sample Description Box]
+ position = 10027
+ size = 72
+ version = 0
+ flags = 0x000000
+ entry_count = 1
+ [Opus: Audio Description]
+ position = 10043
+ size = 56
+ reserved = 0x000000000000
+ data_reference_index = 1
+ reserved = 0x0000
+ reserved = 0x0000
+ reserved = 0x00000000
+ channelcount = 2
+ samplesize = 16
+ pre_defined = 0
+ reserved = 0
+ samplerate = 48000.000000
+ [dOps: Opus Specific Box]
+ position = 10071
+ size = 20
+ version = 0
+ flags = 0x000000
+ InputSampleRate = 44100
+ OutputGain = 0.000000
+ OutputChannelCount = 2
+ ChannelMappingFamily = 0
+ [stts: Decoding Time to Sample Box]
+ position = 10099
+ size = 24
+ version = 0
+ flags = 0x000000
+ entry_count = 1
+ entry[0]
+ sample_count = 10
+ sample_delta = 3840
+ [stsc: Sample To Chunk Box]
+ position = 10123
+ size = 40
+ version = 0
+ flags = 0x000000
+ entry_count = 2
+ entry[0]
+ first_chunk = 1
+ samples_per_chunk = 4
+ sample_description_index = 1
+ entry[1]
+ first_chunk = 3
+ samples_per_chunk = 2
+ sample_description_index = 1
+ [stsz: Sample Size Box]
+ position = 10163
+ size = 60
+ version = 0
+ flags = 0x000000
+ sample_size = 0 (variable)
+ sample_count = 10
+ entry_size[0] = 780
+ entry_size[1] = 920
+ entry_size[2] = 963
+ entry_size[3] = 988
+ entry_size[4] = 1024
+ entry_size[5] = 951
+ entry_size[6] = 933
+ entry_size[7] = 1017
+ entry_size[8] = 992
+ entry_size[9] = 975
+ [stco: Chunk Offset Box]
+ position = 10223
+ size = 28
+ version = 0
+ flags = 0x000000
+ entry_count = 3
+ chunk_offset[0] = 40
+ chunk_offset[1] = 3691
+ chunk_offset[2] = 7616
+ [sgpd: Sample Group Description Box]
+ position = 10251
+ size = 30
+ version = 1
+ flags = 0x000000
+ grouping_type = roll
+ default_length = 2 (constant)
+ entry_count = 3
+ roll_distance[0] = -1
+ roll_distance[1] = -2
+ roll_distance[2] = -3
+ [sbgp: Sample to Group Box]
+ position = 10281
+ size = 68
+ version = 0
+ flags = 0x000000
+ grouping_type = roll
+ entry_count = 6
+ entry[0]
+ sample_count = 2
+ group_description_index = 1
+ entry[1]
+ sample_count = 1
+ group_description_index = 2
+ entry[2]
+ sample_count = 1
+ group_description_index = 3
+ entry[3]
+ sample_count = 1
+ group_description_index = 2
+ entry[4]
+ sample_count = 3
+ group_description_index = 3
+ entry[5]
+ sample_count = 2
+ group_description_index = 1
+
+<a name="5"></a>
+5 Authors' Address
+ Yusuke Nakamura
+ Email: muken.the.vfrmaniac |at| gmail.com
+ </div>
+ </body>
+</html>