mirror of
https://github.com/xiph/opus.git
synced 2025-06-01 16:17:42 +00:00
Update mp4 encapsulation spec to v0.4.8.
Based on http://vfrmaniac.fushizen.eu/contents/opus_in_isobmff.html
This commit is contained in:
parent
6d5ba300e5
commit
d19c314ca1
1 changed files with 161 additions and 98 deletions
|
@ -7,11 +7,12 @@
|
||||||
</head>
|
</head>
|
||||||
<body bgcolor="0x333333" text="#60B0C0">
|
<body bgcolor="0x333333" text="#60B0C0">
|
||||||
<b><u>Encapsulation of Opus in ISO Base Media File Format</u></b><br>
|
<b><u>Encapsulation of Opus in ISO Base Media File Format</u></b><br>
|
||||||
<font size="2">last updated: September 26, 2014</font><br>
|
<font size="2">last updated: September 27, 2014</font><br>
|
||||||
<br>
|
<br>
|
||||||
<div class="normal_link pre frame_box">
|
<div class="normal_link pre frame_box">
|
||||||
|
|
||||||
<center>Encapsulation of Opus in ISO Base Media File Format</center>
|
<center>Encapsulation of Opus in ISO Base Media File Format</center>
|
||||||
<center>Version 0.1.7 (incomplete)</center>
|
<center>Version 0.4.8 (incomplete)</center>
|
||||||
|
|
||||||
Table of Contents
|
Table of Contents
|
||||||
<a href="#1">1</a> Scope
|
<a href="#1">1</a> Scope
|
||||||
|
@ -30,26 +31,27 @@ Table of Contents
|
||||||
<a href="#4.5.1">4.5.1</a> Random Access Point
|
<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.5.2">4.5.2</a> Pre-roll
|
||||||
<a href="#4.6">4.6</a> Trimming of Actual Duration
|
<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">4.7</a> Channel Layout
|
||||||
<a href="#4.7.1">4.7.1</a> File Type Box
|
<a href="#4.8">4.8</a> Additional Requirements, Restrictions, Recommendations and Definitions for Boxes
|
||||||
<a href="#4.7.2">4.7.2</a> Segment Type Box
|
<a href="#4.8.1">4.8.1</a> File Type Box
|
||||||
<a href="#4.7.3">4.7.3</a> Movie Header Box
|
<a href="#4.8.2">4.8.2</a> Segment Type Box
|
||||||
<a href="#4.7.4">4.7.4</a> Track Header Box
|
<a href="#4.8.3">4.8.3</a> Movie Header Box
|
||||||
<a href="#4.7.5">4.7.5</a> Edit Box
|
<a href="#4.8.4">4.8.4</a> Track Header Box
|
||||||
<a href="#4.7.6">4.7.6</a> Edit List Box
|
<a href="#4.8.5">4.8.5</a> Edit Box
|
||||||
<a href="#4.7.7">4.7.7</a> Media Header Box
|
<a href="#4.8.6">4.8.6</a> Edit List Box
|
||||||
<a href="#4.7.8">4.7.8</a> Handler Reference Box
|
<a href="#4.8.7">4.8.7</a> Media Header Box
|
||||||
<a href="#4.7.9">4.7.9</a> Sound Media Header Box
|
<a href="#4.8.8">4.8.8</a> Handler Reference Box
|
||||||
<a href="#4.7.10">4.7.10</a> Sample Table Box
|
<a href="#4.8.9">4.8.9</a> Sound Media Header Box
|
||||||
<a href="#4.7.11">4.7.11</a> OpusSampleEntry
|
<a href="#4.8.10">4.8.10</a> Sample Table Box
|
||||||
<a href="#4.7.12">4.7.12</a> Opus Specific Box
|
<a href="#4.8.11">4.8.11</a> OpusSampleEntry
|
||||||
<a href="#4.7.13">4.7.13</a> Sample Group Description Box
|
<a href="#4.8.12">4.8.12</a> Opus Specific Box
|
||||||
<a href="#4.7.14">4.7.14</a> Sample to Group Box
|
<a href="#4.8.13">4.8.13</a> Sample Group Description Box
|
||||||
<a href="#4.7.15">4.7.15</a> Track Extends Box
|
<a href="#4.8.14">4.8.14</a> Sample to Group Box
|
||||||
<a href="#4.7.16">4.7.16</a> Track Fragment Box
|
<a href="#4.8.15">4.8.15</a> Track Extends Box
|
||||||
<a href="#4.7.17">4.7.17</a> Track Fragment Header Box
|
<a href="#4.8.16">4.8.16</a> Track Fragment Box
|
||||||
<a href="#4.7.18">4.7.18</a> Track Fragment Run Box
|
<a href="#4.8.17">4.8.17</a> Track Fragment Header Box
|
||||||
<a href="#4.8">4.8</a> Example of Encapsulation
|
<a href="#4.8.18">4.8.18</a> Track Fragment Run Box
|
||||||
|
<a href="#4.9">4.9</a> Example of Encapsulation
|
||||||
<a href="#5">5</a> Author's Address
|
<a href="#5">5</a> Author's Address
|
||||||
|
|
||||||
<a name="1"></a>
|
<a name="1"></a>
|
||||||
|
@ -74,22 +76,32 @@ Table of Contents
|
||||||
|
|
||||||
<a name="3"></a>
|
<a name="3"></a>
|
||||||
3 Terms and Definitions
|
3 Terms and Definitions
|
||||||
3.1 actual duration
|
3.1 active track
|
||||||
|
enabled track from the non-alternate group or selected track from alternate group
|
||||||
|
TODO: For alternate group, how about handling of disabled tracks?
|
||||||
|
Some implementations treat disabled tracks in alternate group as a non-default track.
|
||||||
|
Under the such implementations, the selected track behaves as an enabled track.
|
||||||
|
Should we define the implementation in this specification?
|
||||||
|
Or leave it as implementation-defined?
|
||||||
|
|
||||||
|
3.2 actual duration
|
||||||
duration constructed from valid samples
|
duration constructed from valid samples
|
||||||
|
|
||||||
3.2 edit
|
3.3 edit
|
||||||
entry in the Edit List Box
|
entry in the Edit List Box
|
||||||
|
|
||||||
3.3 padded samples
|
3.4 padded samples
|
||||||
PCM samples after decoding Opus sample(s) which are not valid samples
|
PCM samples after decoding Opus sample(s) which are not valid samples
|
||||||
|
An Opus bitstream always contains them partially at the beginning and may contain them in part at the end, as
|
||||||
|
long as not physically removed yet at the beginning and/or the end.
|
||||||
|
|
||||||
3.4 priming samples
|
3.5 priming samples
|
||||||
extra PCM samples after decoding Opus sample(s) at the beginning of the Opus bitstream
|
padded samples at the beginning of the Opus bitstream
|
||||||
|
|
||||||
3.5 sample-accurate
|
3.6 sample-accurate
|
||||||
for any PCM sample, a timestamp exactly matching its sampling timestamp is present in the media timeline.
|
for any PCM sample, a timestamp exactly matching its sampling timestamp is present in the media timeline.
|
||||||
|
|
||||||
3.6 valid samples
|
3.7 valid samples
|
||||||
PCM samples after decoding Opus sample(s) corresponding to input PCM samples
|
PCM samples after decoding Opus sample(s) corresponding to input PCM samples
|
||||||
|
|
||||||
<a name="4"></a>
|
<a name="4"></a>
|
||||||
|
@ -170,7 +182,7 @@ Table of Contents
|
||||||
It is strongly recommended that the order of boxes should follow the above structure.
|
It is strongly recommended that the order of boxes should follow the above structure.
|
||||||
Boxes marked with an asterisk (*) may be present.
|
Boxes marked with an asterisk (*) may be present.
|
||||||
For some boxes listed above, the additional requirements, restrictions, recommendations and definitions
|
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
|
are specified in 4.8 Additional Requirements, Restrictions, Recommendations and Definitions for Boxes in
|
||||||
this specification.
|
this specification.
|
||||||
For the others, the definition is as is defined in ISO/IEC 14496-12 [1].
|
For the others, the definition is as is defined in ISO/IEC 14496-12 [1].
|
||||||
|
|
||||||
|
@ -197,7 +209,7 @@ Table of Contents
|
||||||
placed first in their container.
|
placed first in their container.
|
||||||
Boxes marked with an asterisk (*) may be present.
|
Boxes marked with an asterisk (*) may be present.
|
||||||
For some boxes listed above, the additional requirements, restrictions, recommendations and definitions
|
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
|
are specified in 4.8 Additional Requirements, Restrictions, Recommendations and Definitions for Boxes in
|
||||||
this specification.
|
this specification.
|
||||||
For the others, the definition is as is defined in ISO/IEC 14496-12 [1].
|
For the others, the definition is as is defined in ISO/IEC 14496-12 [1].
|
||||||
<a name="4.3"></a>
|
<a name="4.3"></a>
|
||||||
|
@ -212,16 +224,15 @@ Table of Contents
|
||||||
share with the total of frame sizes in a single Opus sample.
|
share with the total of frame sizes in a single Opus sample.
|
||||||
In this specification, 'sample' means 'Opus sample' except for 'padded samples', 'priming samples', 'valid
|
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].
|
sample' and 'sample-accurate', i.e. 'sample' is 'sample' in the term defined in ISO/IEC 14496-12 [1].
|
||||||
TODO: If an Opus sample consists of multiple Opus streams, it can be splitted into individual streams and
|
|
||||||
reconstructed into new Opus samples as long as every Opus stream has the same total duration in each
|
|
||||||
Opus sample. 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>
|
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
|
The duration of Opus sample is given by multiplying the total of frame sizes for a single Opus bitstream
|
||||||
of all frames inside Opus sample by the value of the timescale field in the Media Header Box.
|
expressed in seconds by the value of the timescale field in the Media Header Box.
|
||||||
|
Let's say an Opus sample consists of two Opus bitstreams, where the frame size of one bitstream is 40 milli-
|
||||||
|
seconds and the frame size of another is 60 milliseconds, and the timescale field in the Media Header Box
|
||||||
|
is set to 48000, then the duration of that Opus sample shall be 120 milliseconds since three 40 millisecond
|
||||||
|
frame and two 60 millisecond frames shall be contained because of the maximum duration of Opus packet, 120
|
||||||
|
milliseconds, and 5760 in the timescale indicated in the Media Header Box.
|
||||||
|
|
||||||
To indicate the valid samples excluding the padded samples at the end of Opus bitstream, the duration of
|
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
|
the last Opus sample of an Opus bitstream is given by multiplying the number of the valid samples by the
|
||||||
|
@ -230,10 +241,11 @@ Table of Contents
|
||||||
4.5 Random Access
|
4.5 Random Access
|
||||||
4.5.1 Random Access Point<a name="4.5.1"></a>
|
4.5.1 Random Access Point<a name="4.5.1"></a>
|
||||||
All Opus samples can be independently decoded i.e. every Opus sample is a sync sample.
|
All Opus samples can be independently decoded i.e. every Opus sample is a sync sample.
|
||||||
Therefore, the Sync Sample Box shall not be present.
|
Therefore, the Sync Sample Box shall not be present as long as there are no samples other than Opus samples
|
||||||
|
in the same track.
|
||||||
|
|
||||||
4.5.2 Pre-roll<a name="4.5.2"></a>
|
4.5.2 Pre-roll<a name="4.5.2"></a>
|
||||||
Opus requires at least 80 milli-second pre-roll after each random access.
|
Opus requires at least 80 millisecond pre-roll after each random access.
|
||||||
Pre-roll is indicated by the roll_distance field in AudioRollRecoveryEntry. AudioPreRollEntry shall not be
|
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.
|
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
|
Note that roll_distance is expressed in sample units in a term of ISO Base Media File Format, and always
|
||||||
|
@ -241,12 +253,12 @@ Table of Contents
|
||||||
|
|
||||||
For the requirement of AudioRollRecoveryEntry, the compatible_brands field in the File Type Box and/or
|
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.
|
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.
|
See also 4.8.1 File Type Box and 4.8.2 Segment Type Box.
|
||||||
<a name="4.6"></a>
|
<a name="4.6"></a>
|
||||||
4.6 Trimming of Actual Duration
|
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
|
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.
|
padded samples at the end, we need trim from media to get the actual duration. An edit in the Edit List Box can
|
||||||
An edit in the Edit List Box can achieve this demand.
|
achieve this demand.
|
||||||
For sample-accurate trimming, proper timescale should be set to the timescale field in the Movie Header Box
|
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.
|
and the Media Header Box inside Track Box(es) for Opus bitstream.
|
||||||
|
|
||||||
|
@ -255,14 +267,49 @@ Table of Contents
|
||||||
the duration of the last Opus sample may be helpful.
|
the duration of the last Opus sample may be helpful.
|
||||||
TODO: Should we define a new box which indicates the last Opus samples?
|
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
|
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.
|
bitstreams in a track, each Opus bitstream may contain some padded samples.
|
||||||
Without such a box, we cannot know in container level whether an Opus sample is the last Opus sample in
|
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?
|
an Opus bitstream or not. Is this preferable?
|
||||||
|
|
||||||
See also 4.7.6 Edit List Box.
|
See also 4.8.6 Edit List Box.
|
||||||
<a name="4.7"></a>
|
<a name="4.7"></a>
|
||||||
4.7 Additional Requirements, Restrictions, Recommendations and Definitions for Boxes
|
4.7 Channel Layout
|
||||||
4.7.1 File Type Box<a name="4.7.1"></a>
|
By the application of alternate_group in the Track Header Box, whole audio channels in all active tracks from
|
||||||
|
non-alternate group and/or different alternate group from each other are composited into the presentation. If
|
||||||
|
an Opus sample consists of multiple Opus bitstreams, it can be splitted into individual Opus bitstreams and
|
||||||
|
reconstructed into new Opus samples as long as every Opus bitstream has the same total duration in each Opus
|
||||||
|
sample. This nature can be utilized to encapsulate a single Opus bitstream in each track without breaking the
|
||||||
|
original channel layout.
|
||||||
|
|
||||||
|
As an example, let's say there is a following track:
|
||||||
|
StreamCount = 4;
|
||||||
|
CoupledCount = 2;
|
||||||
|
OutputChannelCount = 6;
|
||||||
|
ChannelMapping = {0, 1, 2, 3, 4, 5}; // front left, front center, front right, rear left, rear right, LFE
|
||||||
|
You extract the four Opus bitstreams from this track and you encapsulate two of the four into a track and the
|
||||||
|
others into another track. The former track is as follows.
|
||||||
|
StreamCount = 2;
|
||||||
|
CoupledCount = 2;
|
||||||
|
OutputChannelCount = 5;
|
||||||
|
ChannelMapping = {0, 255, 1, 2, 3}; // front left, silent, front right, rear left, rear right
|
||||||
|
And the latter track is as follows.
|
||||||
|
StreamCount = 2;
|
||||||
|
CoupledCount = 0;
|
||||||
|
OutputChannelCount = 6;
|
||||||
|
ChannelMapping = {255, 0, 255, 255, 255, 1}; // silent, front center, silent, silent, silent, LFE
|
||||||
|
In addition, the value of the alternate_group field in the both tracks is set to 0. As the result, the player
|
||||||
|
may play as if channels with 255 are not present, and play the presentation constructed from the both tracks
|
||||||
|
in the same channel layout as the one of the original track. Keep in mind that the way of the composition, i.e.
|
||||||
|
the mixing for playback, is not defined here, and maybe different results could occur except for the channel
|
||||||
|
layout of the original, depending on an implementation or the definition of a derived file format.
|
||||||
|
|
||||||
|
Note that some derived file formats may specify the restriction to ignore alternate grouping. In the context of
|
||||||
|
such file formats, this application is not available. This unavailability does not mean incompatibilities among
|
||||||
|
file formats unless the restriction to the value of the alternate_group field is specified and brings about
|
||||||
|
any conflict among their definitions.
|
||||||
|
<a name="4.8"></a>
|
||||||
|
4.8 Additional Requirements, Restrictions, Recommendations and Definitions for Boxes
|
||||||
|
4.8.1 File Type Box<a name="4.8.1"></a>
|
||||||
For any track containing Opus bitstreams, the following requirements are applied.
|
For any track containing Opus bitstreams, the following requirements are applied.
|
||||||
+ compatible_brands:
|
+ compatible_brands:
|
||||||
The compatible_brands fields shall contain at least one brand which requires support for roll groups
|
The compatible_brands fields shall contain at least one brand which requires support for roll groups
|
||||||
|
@ -271,18 +318,18 @@ Table of Contents
|
||||||
the compatible_brands fields shall also contain at least one brand which requires support of Sample
|
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).
|
Group Description Boxes in Movie Fragments (e.g. the 'iso6' brand).
|
||||||
|
|
||||||
4.7.2 Segment Type Box<a name="4.7.2"></a>
|
4.8.2 Segment Type Box<a name="4.8.2"></a>
|
||||||
For any track containing Opus bitstreams, the following requirements are applied.
|
For any track containing Opus bitstreams, the following requirements are applied.
|
||||||
+ compatible_brands:
|
+ compatible_brands:
|
||||||
The same requirements as specified at 4.7.1 File Type Box are applied.
|
The same requirements as specified at 4.8.1 File Type Box are applied.
|
||||||
|
|
||||||
4.7.3 Movie Header Box<a name="4.7.3"></a>
|
4.8.3 Movie Header Box<a name="4.8.3"></a>
|
||||||
If any track containing Opus bitstreams, the following recommendations are applied.
|
If any track containing Opus bitstreams, the following recommendations are applied.
|
||||||
+ timescale:
|
+ timescale:
|
||||||
The timescale field should be set to the same value of the timescale field in the Media Header Box
|
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.
|
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>
|
4.8.4 Track Header Box<a name="4.8.4"></a>
|
||||||
For any track containing Opus bitstreams, the following requirements are applied.
|
For any track containing Opus bitstreams, the following requirements are applied.
|
||||||
+ layer:
|
+ layer:
|
||||||
The layer field shall be set to 0.
|
The layer field shall be set to 0.
|
||||||
|
@ -293,42 +340,46 @@ Table of Contents
|
||||||
+ height:
|
+ height:
|
||||||
The height field shall be set to 0.
|
The height field shall be set to 0.
|
||||||
|
|
||||||
4.7.5 Edit Box<a name="4.7.5"></a>
|
4.8.5 Edit Box<a name="4.8.5"></a>
|
||||||
For any track containing Opus bitstreams, exactly one Edit Box shall be present.
|
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>
|
4.8.6 Edit List Box<a name="4.8.6"></a>
|
||||||
For any track containing Opus bitstreams, exactly one Edit List Box shall be present. In addition, for
|
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.
|
non-empty edits, the following recommendations are applied.
|
||||||
+ segment_duration:
|
+ segment_duration:
|
||||||
The segment_duration field is used to indicate the actual duration of Opus bitstream.
|
The segment_duration field can be 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
|
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.
|
field shall be set to the number of the valid samples to indicate the actual duration.
|
||||||
When enabling movie fragments, the segment_duration field may be set to 0. The value 0 represents
|
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
|
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.
|
the padded samples from the presentation timeline when producing movie fragments on the fly.
|
||||||
+ media_time:
|
+ media_time:
|
||||||
The media_time field is used to remove the priming samples of Opus bitstream.
|
The media_time field can be used to remove the priming samples of Opus bitstreams.
|
||||||
When the value of the timescale field in the Media Header Box is equal to 48000, the media_time shall
|
When the value of the timescale field in the Media Header Box is equal to 48000, the media_time field
|
||||||
be set to the number of priming samples to remove the priming samples for the first non-empty edit.
|
shall be set to the number of the priming samples to remove the priming samples.
|
||||||
|
+ media_rate:
|
||||||
|
If the segment_duration field is used to indicate the actual duration, the media_rate field shall be
|
||||||
|
set to 1.
|
||||||
|
|
||||||
4.7.7 Media Header Box<a name="4.7.7"></a>
|
4.8.7 Media Header Box<a name="4.8.7"></a>
|
||||||
For any track containing Opus bitstreams, the following recommendation is applied.
|
For any track containing Opus bitstreams, the following recommendation is applied.
|
||||||
+ timescale:
|
+ timescale:
|
||||||
The timescale field should be set to 48000 to access sample-accurately.
|
The timescale field should be set to 48000 to access sample-accurately.
|
||||||
|
|
||||||
4.7.8 Handler Reference Box<a name="4.7.8"></a>
|
4.8.8 Handler Reference Box<a name="4.8.8"></a>
|
||||||
For any track containing Opus bitstreams, the following requirement is applied.
|
For any track containing Opus bitstreams, the following requirement is applied.
|
||||||
+ handler_type:
|
+ handler_type:
|
||||||
The handler_type field shall be set to 'soun'.
|
The handler_type field shall be set to 'soun'.
|
||||||
|
|
||||||
4.7.9 Sound Media Header Box<a name="4.7.9"></a>
|
4.8.9 Sound Media Header Box<a name="4.8.9"></a>
|
||||||
For any track containing Opus bitstreams, the Sound Media Header Box shall be present.
|
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>
|
4.8.10 Sample Table Box<a name="4.8.10"></a>
|
||||||
For any track containing Opus bitstreams, at least one Sample Group Description Boxes and at least one
|
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.
|
Sample to Group Boxes shall be present, and the Sync Sample Box shall not be present as long as there are
|
||||||
|
no samples other than Opus samples in the same track.
|
||||||
|
|
||||||
4.7.11 OpusSampleEntry<a name="4.7.11"></a>
|
4.8.11 OpusSampleEntry<a name="4.8.11"></a>
|
||||||
For any track containing Opus bitstreams, at least one OpusSampleEntry shall be present.
|
For any track containing Opus bitstreams, at least one OpusSampleEntry shall be present.
|
||||||
|
|
||||||
The syntax and semantics of the OpusSampleEntry is shown as follows.
|
The syntax and semantics of the OpusSampleEntry is shown as follows.
|
||||||
|
@ -347,7 +398,7 @@ Table of Contents
|
||||||
+ samplerate:
|
+ samplerate:
|
||||||
The samplerate field shall be set to 48000<<16.
|
The samplerate field shall be set to 48000<<16.
|
||||||
|
|
||||||
4.7.12 Opus Specific Box<a name="4.7.12"></a>
|
4.8.12 Opus Specific Box<a name="4.8.12"></a>
|
||||||
Exactly one Opus Specific Box shall be present in each OpusSampleEntry.
|
Exactly one Opus Specific Box shall be present in each OpusSampleEntry.
|
||||||
The Opus Specific Box contains the version field and this specification defines version 0 of this box.
|
The Opus Specific Box contains the version field and this specification defines version 0 of this box.
|
||||||
If incompatible changes occured in the fields after the version field within the OpusSpecificBox in the
|
If incompatible changes occured in the fields after the version field within the OpusSpecificBox in the
|
||||||
|
@ -356,13 +407,17 @@ Table of Contents
|
||||||
The syntax and semantics of the Opus Specific Box is shown as follows.
|
The syntax and semantics of the Opus Specific Box is shown as follows.
|
||||||
|
|
||||||
aligned(8) class OpusSpecificBox extends FullBox('dOps', version, dflags){
|
aligned(8) class OpusSpecificBox extends FullBox('dOps', version, dflags){
|
||||||
if (flags & 0x000001) {
|
unsigned int(8) OutputChannelCount;
|
||||||
|
if (dflags & 0x000001) {
|
||||||
unsigned int(16) PreSkip;
|
unsigned int(16) PreSkip;
|
||||||
}
|
}
|
||||||
unsigned int(32) InputSampleRate;
|
if (dflags & 0x000002) {
|
||||||
signed int(16) OutputGain;
|
unsigned int(32) InputSampleRate;
|
||||||
unsigned int(8) OutputChannelCount;
|
}
|
||||||
unsigned int(8) ChannelMappingFamily;
|
if (dflags & 0x000004) {
|
||||||
|
signed int(16) OutputGain;
|
||||||
|
}
|
||||||
|
unsigned int(8) ChannelMappingFamily;
|
||||||
if (ChannelMappingFamily != 0) {
|
if (ChannelMappingFamily != 0) {
|
||||||
unsigned int(8 * (2 + OutputChannelCount)) ChannelMappingTable;
|
unsigned int(8 * (2 + OutputChannelCount)) ChannelMappingTable;
|
||||||
}
|
}
|
||||||
|
@ -376,21 +431,28 @@ Table of Contents
|
||||||
The following flags are defined in the dflags:
|
The following flags are defined in the dflags:
|
||||||
0x000001 pre-skip-present:
|
0x000001 pre-skip-present:
|
||||||
This flag indicates the presence of the PreSkip field.
|
This flag indicates the presence of the PreSkip field.
|
||||||
+ PreSkip:
|
0x000002 input-sample-rate-present:
|
||||||
The PreSkip field shall be set to the same value as the *Pre-skip* field in the identification header
|
This flag indicates the presence of the InputSampleRate field.
|
||||||
defined in Ogg Opus [4]. Note that the value is stored as big-endian format.
|
0x000004 output-gain-present:
|
||||||
This field can be absent after removing Opus samples containing the number of PCM samples more than the
|
This flag indicates the presence of the OutputGain field.
|
||||||
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:
|
+ OutputChannelCount:
|
||||||
The OutputChannelCount field shall be set to the same value as the *Output Channel Count* field in the
|
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].
|
identification header defined in Ogg Opus [4].
|
||||||
|
+ 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.
|
||||||
|
The PreSkip field can be absent after removing Opus samples containing the number of PCM samples more
|
||||||
|
than of the priming samples.
|
||||||
|
The PreSkip field is not used for removing the priming samples at the whole playback at all since it is
|
||||||
|
informative only, and that task falls on the Edit List Box.
|
||||||
|
+ 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.
|
||||||
|
If the InputSampleRate field is absent, process as if it is set to 0, which indicates "unspecified".
|
||||||
|
+ 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 8.8 fixed-point and big-endian format.
|
||||||
|
If the OutputGain field is absent, process as if it is set to 0.
|
||||||
+ ChannelMappingFamily:
|
+ ChannelMappingFamily:
|
||||||
The ChannelMappingFamily field shall be set to the same value as the *Channel Mapping Family* field in
|
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].
|
the identification header defined in Ogg Opus [4].
|
||||||
|
@ -398,7 +460,7 @@ Table of Contents
|
||||||
The ChannelMappingTable field shall be set to the same octet string as *Channel Mapping Table* field in
|
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].
|
the identification header defined in Ogg Opus [4].
|
||||||
|
|
||||||
4.7.13 Sample Group Description Box<a name="4.7.13"></a>
|
4.8.13 Sample Group Description Box<a name="4.8.13"></a>
|
||||||
For any track containing Opus bitstreams, at least one Sample Group Description Box shall be present and have
|
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'. In addition, the following requirements and restriction are applied.
|
the grouping_type field set to 'roll'. In addition, the following requirements and restriction are applied.
|
||||||
+ version:
|
+ version:
|
||||||
|
@ -406,38 +468,39 @@ Table of Contents
|
||||||
+ default_length
|
+ default_length
|
||||||
The default_length field shall be set to 2 if the grouping_type field set to 'roll'.
|
The default_length field shall be set to 2 if the grouping_type field set to 'roll'.
|
||||||
+ roll_distance:
|
+ roll_distance:
|
||||||
The roll_distance field in any AudioRollRecoveryEntry shall not be set to positive values.
|
The roll_distance field in any AudioRollRecoveryEntry shall not be set to zero and positive values for
|
||||||
|
any Opus sample.
|
||||||
|
|
||||||
See also 4.5.2 Pre-roll.
|
See also 4.5.2 Pre-roll.
|
||||||
|
|
||||||
4.7.14 Sample to Group Box<a name="4.7.14"></a>
|
4.8.14 Sample to Group Box<a name="4.8.14"></a>
|
||||||
For any track containing Opus bitstreams, at least one Sample to Group Box shall be present and have the
|
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.
|
grouping_type field set to 'roll'. In addition, the following requirement is applied.
|
||||||
+ group_description_index:
|
+ group_description_index:
|
||||||
The group_description_index fields shall not be set to 0 if the grouping_type field set to 'roll'.
|
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>
|
4.8.15 Track Extends Box<a name="4.8.15"></a>
|
||||||
For any track containing Opus bitstreams, the following requirement is applied.
|
For any track containing Opus bitstreams, the following requirement is applied.
|
||||||
+ default_sample_flags:
|
+ default_sample_flags:
|
||||||
The sample_is_non_sync_sample field shall be set to 0.
|
The sample_is_non_sync_sample field shall be set to 0.
|
||||||
|
|
||||||
4.7.16 Track Fragment Box<a name="4.7.16"></a>
|
4.8.16 Track Fragment Box<a name="4.8.16"></a>
|
||||||
For any track containing Opus bitstreams, if any sample is contained in track fragment, the Sample to
|
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.
|
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>
|
4.8.17 Track Fragment Header Box<a name="4.8.17"></a>
|
||||||
For any track containing Opus bitstreams, the following requirement is applied.
|
For any track containing Opus bitstreams, the following requirement is applied.
|
||||||
+ default_sample_flags:
|
+ default_sample_flags:
|
||||||
The sample_is_non_sync_sample field shall be set to 0.
|
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>
|
4.8.18 Track Fragment Run Box<a name="4.8.18"></a>
|
||||||
For any track containing Opus bitstreams, the following requirements are applied.
|
For any track containing Opus bitstreams, the following requirements are applied.
|
||||||
+ first_sample_flags:
|
+ first_sample_flags:
|
||||||
The sample_is_non_sync_sample field shall be set to 0.
|
The sample_is_non_sync_sample field shall be set to 0.
|
||||||
+ sample_flags:
|
+ sample_flags:
|
||||||
The sample_is_non_sync_sample field shall be set to 0.
|
The sample_is_non_sync_sample field shall be set to 0.
|
||||||
<a name="4.8"></a>
|
<a name="4.9"></a>
|
||||||
4.8 Example of Encapsulation
|
4.9 Example of Encapsulation
|
||||||
[File]
|
[File]
|
||||||
size = 10349
|
size = 10349
|
||||||
[ftyp: File Type Box]
|
[ftyp: File Type Box]
|
||||||
|
@ -465,7 +528,7 @@ Table of Contents
|
||||||
creation_time = UTC 2014/09/23, 15:23:21
|
creation_time = UTC 2014/09/23, 15:23:21
|
||||||
modification_time = UTC 2014/09/23, 15:23:21
|
modification_time = UTC 2014/09/23, 15:23:21
|
||||||
timescale = 48000
|
timescale = 48000
|
||||||
duration = 33600 (00:00:07.000)
|
duration = 33600 (00:00:00.700)
|
||||||
rate = 1.000000
|
rate = 1.000000
|
||||||
volume = 1.000000
|
volume = 1.000000
|
||||||
reserved = 0x0000
|
reserved = 0x0000
|
||||||
|
@ -516,7 +579,7 @@ Table of Contents
|
||||||
modification_time = UTC 2014/09/23, 15:23:21
|
modification_time = UTC 2014/09/23, 15:23:21
|
||||||
track_ID = 1
|
track_ID = 1
|
||||||
reserved = 0x00000000
|
reserved = 0x00000000
|
||||||
duration = 33600 (00:00:07.000)
|
duration = 33600 (00:00:00.700)
|
||||||
reserved = 0x00000000
|
reserved = 0x00000000
|
||||||
reserved = 0x00000000
|
reserved = 0x00000000
|
||||||
layer = 0
|
layer = 0
|
||||||
|
@ -553,7 +616,7 @@ Table of Contents
|
||||||
creation_time = UTC 2014/09/23, 15:23:21
|
creation_time = UTC 2014/09/23, 15:23:21
|
||||||
modification_time = UTC 2014/09/23, 15:23:21
|
modification_time = UTC 2014/09/23, 15:23:21
|
||||||
timescale = 48000
|
timescale = 48000
|
||||||
duration = 38400 (00:00:08.000)
|
duration = 38400 (00:00:00.800)
|
||||||
language = und
|
language = und
|
||||||
pre_defined = 0x0000
|
pre_defined = 0x0000
|
||||||
[hdlr: Handler Reference Box]
|
[hdlr: Handler Reference Box]
|
||||||
|
@ -618,10 +681,10 @@ Table of Contents
|
||||||
position = 10071
|
position = 10071
|
||||||
size = 20
|
size = 20
|
||||||
version = 0
|
version = 0
|
||||||
flags = 0x000000
|
flags = 0x000006
|
||||||
|
OutputChannelCount = 2
|
||||||
InputSampleRate = 44100
|
InputSampleRate = 44100
|
||||||
OutputGain = 0.000000
|
OutputGain = 0.000000
|
||||||
OutputChannelCount = 2
|
|
||||||
ChannelMappingFamily = 0
|
ChannelMappingFamily = 0
|
||||||
[stts: Decoding Time to Sample Box]
|
[stts: Decoding Time to Sample Box]
|
||||||
position = 10099
|
position = 10099
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue