blob: 574df9f54a779fca2e62c726703fc7be199d4c05 [file] [log] [blame]
Ralph Giles4bbd73a2016-10-04 08:41:07 -07001Encapsulation of FLAC in ISO Base Media File Format
Ralph Giles55fba7e2016-10-27 08:47:09 -07002Version 0.0.4 (draft)
Ralph Giles4bbd73a2016-10-04 08:41:07 -07003
4Table of Contents
51 Scope
Ralph Giles2fd3c222016-10-04 08:49:09 -070062 Supporting Normative References
Ralph Giles09255012016-10-04 09:46:26 -070073 Design Rules of Encapsulation
8 3.1 File Type Identification
9 3.2 Overview of Track Structure
10 3.3 Definition of FLAC sample
11 3.3.1 Sample entry format
12 3.3.2 FLAC Specific Box
13 3.3.3 Sample format
14 3.3.4 Duration of FLAC sample
15 3.3.5 Sub-sample
16 3.3.6 Random Access
17 3.3.6.1 Random Access Point
18 3.4 Basic Structure (informative)
19 3.4.1 Initial Movie
20 3.5 Example of Encapsulation (informative)
214 Acknowledgements
225 Author's Address
Ralph Giles4bbd73a2016-10-04 08:41:07 -070023
241 Scope
25
26 This document specifies the normative mapping for encapsulation of
27 FLAC coded audio bitstreams in ISO Base Media file format and its
28 derivatives. The encapsulation of FLAC coded bitstreams in
29 QuickTime file format is outside the scope of this specification.
30
312 Supporting Normative References
32
33 [1] ISO/IEC 14496-12:2012 Corrected version
34
35 Information technology — Coding of audio-visual objects — Part
36 12: ISO base media file format
37
38 [2] ISO/IEC 14496-12:2012/Amd.1:2013
39
40 Information technology — Coding of audio-visual objects — Part
41 12: ISO base media file format AMENDMENT 1: Various
42 enhancements including support for large metadata
43
44 [3] FLAC format specification
45
46 https://xiph.org/flac/format.html
47
Ralph Giles2fd3c222016-10-04 08:49:09 -070048 Definition of the FLAC Audio Codec stream format
Ralph Giles4bbd73a2016-10-04 08:41:07 -070049
50 [4] FLAC-in-Ogg mapping specification
51
Ralph Giles2fd3c222016-10-04 08:49:09 -070052 https://xiph.org/flac/ogg_mapping.html
Ralph Giles4bbd73a2016-10-04 08:41:07 -070053
Ralph Giles2fd3c222016-10-04 08:49:09 -070054 Ogg Encapsulation for the FLAC Audio Codec
Ralph Giles4bbd73a2016-10-04 08:41:07 -070055
56 [5] Matroska specification
57
Ralph Giles09255012016-10-04 09:46:26 -0700583 Design Rules of Encapsulation
Ralph Giles4bbd73a2016-10-04 08:41:07 -070059
Ralph Giles09255012016-10-04 09:46:26 -070060 3.1 File Type Identification
Ralph Giles4bbd73a2016-10-04 08:41:07 -070061
62 This specification does not define any brand to declare files
Ralph Giles2fd3c222016-10-04 08:49:09 -070063 which conform to this specification. Files which conform to
Ralph Giles4bbd73a2016-10-04 08:41:07 -070064 this specification shall contain at least one brand which
65 supports the requirements and the requirements described in
66 this clause without contradiction in the compatible brands
67 list of the File Type Box. The minimal support of the
68 encapsulation of FLAC bitstreams in ISO Base Media file format
69 requires the 'isom' brand.
Ralph Giles2fd3c222016-10-04 08:49:09 -070070
Ralph Giles09255012016-10-04 09:46:26 -070071 3.2 Overview of Track Structure
Ralph Giles4bbd73a2016-10-04 08:41:07 -070072
73 FLAC coded audio shall be encapsulated into the ISO Base
74 Media File Format as media data within an audio track.
Ralph Giles2fd3c222016-10-04 08:49:09 -070075
Ralph Giles4bbd73a2016-10-04 08:41:07 -070076 + The handler_type field in the Handler Reference Box
77 shall be set to 'soun'.
Ralph Giles2fd3c222016-10-04 08:49:09 -070078
Ralph Giles4bbd73a2016-10-04 08:41:07 -070079 + The Media Information Box shall contain the Sound Media
80 Header Box.
Ralph Giles2fd3c222016-10-04 08:49:09 -070081
Ralph Giles4bbd73a2016-10-04 08:41:07 -070082 + The codingname of the sample entry is 'fLaC'.
Ralph Giles2fd3c222016-10-04 08:49:09 -070083
Ralph Giles4bbd73a2016-10-04 08:41:07 -070084 This specification does not define any encapsulation
85 using MP4AudioSampleEntry with objectTypeIndication
86 specified by the MPEG-4 Registration Authority
87 (http://www.mp4ra.org/). See section 'Sample entry
Ralph Giles2fd3c222016-10-04 08:49:09 -070088 format' for the definition of the sample entry.
89
Ralph Giles4bbd73a2016-10-04 08:41:07 -070090 + The 'dfLa' box is added to the sample entry to convey
91 initializing information for the decoder.
92
Ralph Giles2fd3c222016-10-04 08:49:09 -070093 See section 'FLAC Specific Box' for the definition of
Ralph Giles4bbd73a2016-10-04 08:41:07 -070094 the box contents.
Ralph Giles2fd3c222016-10-04 08:49:09 -070095
96 + A FLAC sample is exactly one FLAC frame as described
97 in the format specification[3]. See section
98 'Sample format' for details of the frame contents.
99
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700100 + Every FLAC sample is a sync sample. No pre-roll or
101 lapping is required. See section 'Random Access' for
102 further details.
103
Ralph Giles09255012016-10-04 09:46:26 -0700104 3.3 Definition of a FLAC sample
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700105
Ralph Giles09255012016-10-04 09:46:26 -0700106 3.3.1 Sample entry format
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700107
Ralph Giles2fd3c222016-10-04 08:49:09 -0700108 For any track containing one or more FLAC bitstreams, a
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700109 sample entry describing the corresponding FLAC bitstream
110 shall be present inside the Sample Table Box. This version
111 of the specification defines only one sample entry format
Ralph Giles2fd3c222016-10-04 08:49:09 -0700112 named FLACSampleEntry whose codingname is 'fLaC'. This
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700113 sample entry includes exactly one FLAC Specific Box
114 defined in section 'FLAC specific box' as a mandatory box
115 and indicates that FLAC samples described by this sample
116 entry are stored by the sample format described in section
117 'Sample format'.
118
119 The syntax and semantics of the FLACSampleEntry is shown
120 as follows. The data fields of this box and native
121 FLAC[3] structures encoded within FLAC blocks are both
122 stored in big-endian format, though for purposes of the
123 ISO BMFF container, FLAC native metadata and data blocks
124 are treated as unstructured octet streams.
Ralph Giles2fd3c222016-10-04 08:49:09 -0700125
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700126 class FLACSampleEntry() extends AudioSampleEntry ('fLaC'){
127 FLACSpecificBox();
128 }
129
Ralph Giles2fd3c222016-10-04 08:49:09 -0700130 The fields of the AudioSampleEntry portion shall be set as
131 follows:
132
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700133 + channelcount:
134
Ralph Giles2fd3c222016-10-04 08:49:09 -0700135 The channelcount field shall be set equal to the
136 channel count specified by the FLAC bitstream's native
137 METADATA_BLOCK_STREAMINFO header as described in [3].
138 Note that the FLAC FRAME_HEADER structure that begins
139 each FLAC sample redundantly encodes channel number;
140 the number of channels declared in each FRAME_HEADER
141 MUST match the number of channels declared here and in
142 the METADATA_BLOCK_STREAMINFO header.
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700143
144 + samplesize:
145
Ralph Giles2fd3c222016-10-04 08:49:09 -0700146 The samplesize field shall be set equal to the bits
147 per sample specified by the FLAC bitstream's native
148 METADATA_BLOCK_STREAMINFO header as described in [3].
149 Note that the FLAC FRAME_HEADER structure that begins
150 each FLAC sample redundantly encodes the number of
151 bits per sample; the bits per sample declared in each
152 FRAME_HEADER MUST match the samplesize declared here
153 and the bits per sample field declared in the
154 METADATA_BLOCK_STREAMINFO header.
155
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700156 + samplerate:
157
Ralph Giles09255012016-10-04 09:46:26 -0700158 When possible, the samplerate field shall be set
159 equal to the sample rate specified by the FLAC
160 bitstream's native METADATA_BLOCK_STREAMINFO header
161 as described in [3], left-shifted by 16 bits to
162 create the appropriate 16.16 fixed-point
163 representation.
164
165 When the bitstream's native sample rate is greater
166 than the maximum expressible value of 65535 Hz,
167 the samplerate field shall hold the greatest
168 expressible regular division of that rate. I.e.
169 the samplerate field shall hold 48000.0 for
170 native sample rates of 96 and 192 kHz. In the
171 case of unusual sample rates which do not have
172 an expressible regular division, the maximum value
173 of 65535.0 Hz should be used.
174
175 High-rate FLAC bitstreams are common, and the native
176 value from the METADATA_BLOCK_STREAMINFO header in
177 the FLACSpecificBox MUST be read to determine the
178 correct sample rate of the bitstream.
179
180 Note that the FLAC FRAME_HEADER structure that begins
181 each FLAC sample redundantly encodes the sample rate;
182 the sample rate declared in each FRAME_HEADER MUST
183 match the sample rate declared in the
184 METADATA_BLOCK_STREAMINFO header, and here in the
185 AudioSampleEntry portion of the FLACSampleEntry
186 as much as is allowed by the encoding restrictions
187 described above.
Ralph Giles2fd3c222016-10-04 08:49:09 -0700188
189 Finally, the FLACSpecificBox carries codec headers:
190
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700191 + FLACSpecificBox
Ralph Giles2fd3c222016-10-04 08:49:09 -0700192
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700193 This box contains initializing information for the
Ralph Giles09255012016-10-04 09:46:26 -0700194 decoder as defined in section 'FLAC specific box'.
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700195
Ralph Giles09255012016-10-04 09:46:26 -0700196 3.3.2 FLAC Specific Box
Ralph Giles2fd3c222016-10-04 08:49:09 -0700197
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700198 Exactly one FLAC Specific Box shall be present in each
Ralph Giles09255012016-10-04 09:46:26 -0700199 FLACSampleEntry. This specification defines version 0
200 of this box. If incompatible changes occur in future
201 versions of this specification, another version number
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700202 will be defined. The data fields of this box and native
203 FLAC[3] structures encoded within FLAC blocks are both
204 stored in big-endian format, though for purposes of the
205 ISO BMFF container, FLAC native metadata and data blocks
206 are treated as unstructured octet streams.
207
208 The syntax and semantics of the FLAC Specific Box is shown
209 as follows.
210
Ralph Giles09255012016-10-04 09:46:26 -0700211 class FLACMetadataBlock {
Ralph Giles2fd3c222016-10-04 08:49:09 -0700212 unsigned int(1) LastMetadataBlockFlag;
213 unsigned int(7) BlockType;
214 unsigned int(24) Length;
215 unsigned int(8) BlockData[Length];
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700216 }
217
Ralph Giles2fd3c222016-10-04 08:49:09 -0700218 aligned(8) class FLACSpecificBox
219 extends FullBox('dfLa', version=0, 0){
220 for (i=0; ; i++) { // to end of box
221 FLACMetadataBlock();
222 }
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700223 }
224
225 + Version:
226
Ralph Giles2fd3c222016-10-04 08:49:09 -0700227 The Version field shall be set to 0.
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700228
Ralph Giles2fd3c222016-10-04 08:49:09 -0700229 In the future versions of this specification, this
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700230 field may be set to other values. And without support
231 of those values, the reader shall not read the fields
232 after this within the FLACSpecificBox.
233
Ralph Giles2fd3c222016-10-04 08:49:09 -0700234 + Flags:
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700235
Ralph Giles2fd3c222016-10-04 08:49:09 -0700236 The Flags field shall be set to 0.
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700237
Ralph Giles2fd3c222016-10-04 08:49:09 -0700238 After the FullBox header, the box contains a sequence of
239 FLAC[3] native-metadata block structures that fill the
240 remainder of the box.
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700241
Ralph Giles2fd3c222016-10-04 08:49:09 -0700242 Each FLACMetadataBlock structure consists of three fields
243 filling a total of four bytes that form a FLAC[3] native
244 METADATA_BLOCK_HEADER, followed by raw octet bytes that
245 comprise the FLAC[3] native METADATA_BLOCK_DATA.
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700246
Ralph Giles2fd3c222016-10-04 08:49:09 -0700247 + LastMetadataBlockFlag:
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700248
Ralph Giles2fd3c222016-10-04 08:49:09 -0700249 The LastMetadataBlockFlag field maps semantically to
250 the FLAC[3] native METADATA_BLOCK_HEADER
251 Last-metadata-block flag as defined in the FLAC[3]
252 file specification.
253
254 The LastMetadataBlockFlag is set to 1 if this
255 MetadataBlock is the last metadata block in the
256 FLACSpecificBox. It is set to 0 otherwise.
257
258 + BlockType:
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700259
Ralph Giles2fd3c222016-10-04 08:49:09 -0700260 The BlockType field maps semantically to the FLAC[3]
Ralph Giles55fba7e2016-10-27 08:47:09 -0700261 native METADATA_BLOCK_HEADER BLOCK_TYPE field as
Ralph Giles2fd3c222016-10-04 08:49:09 -0700262 defined in the FLAC[3] file specification.
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700263
Ralph Giles2fd3c222016-10-04 08:49:09 -0700264 The BlockType is set to a valid FLAC[3] BLOCK_TYPE
265 value that identifies the type of this native metadata
266 block. The BlockType of the first FLACMetadataBlock
267 must be set to 0, signifying this is a FLAC[3] native
268 METADATA_BLOCK_STREAMINFO block.
269
270 + Length:
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700271
Ralph Giles2fd3c222016-10-04 08:49:09 -0700272 The Length field maps semantically to the FLAC[3]
Ralph Giles55fba7e2016-10-27 08:47:09 -0700273 native METADATA_BLOCK_HEADER Length field as
Ralph Giles2fd3c222016-10-04 08:49:09 -0700274 defined in the FLAC[3] file specification.
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700275
Ralph Giles2fd3c222016-10-04 08:49:09 -0700276 The length field specifies the number of bytes of
277 MetadataBlockData to follow.
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700278
Ralph Giles2fd3c222016-10-04 08:49:09 -0700279 + BlockData
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700280
Ralph Giles2fd3c222016-10-04 08:49:09 -0700281 The BlockData field maps semantically to the FLAC[3]
Ralph Giles55fba7e2016-10-27 08:47:09 -0700282 native METADATA_BLOCK_HEADER METADATA_BLOCK_DATA as
Ralph Giles2fd3c222016-10-04 08:49:09 -0700283 defined in the FLAC[3] file specification.
284
285 Taken together, the bytes of the FLACMetadataBlock form a
286 complete FLAC[3] native METADATA_BLOCK structure.
287
288 Note that a minimum of a single FLACMetadataBlock,
289 consisting of a FLAC[3] native METADATA_BLOCK_STREAMINFO
290 structure, is required. Should the FLACSpecificBox
291 contain more than a single FLACMetadataBlock structure,
292 the FLACMetadataBlock containing the FLAC[3] native
293 METADATA_BLOCK_STREAMINFO must occur first in the list.
294
295 Other containers that package FLAC audio streams, such as
296 Ogg[4] and Matroska[5], wrap FLAC[3] native metadata without
297 modification similar to this specification. When
298 repackaging or remuxing FLAC[3] streams from another
299 format that contains FLAC[3] native metadata into an ISO
300 BMFF file, the complete FLAC[3] native metadata should be
301 preserved in the ISO BMFF stream as described above. It
302 is also allowed to parse this native metadata and include
303 contextually redundant ISO BMFF-native repackagings and/or
304 reparsings of FLAC[3] native metadata, so long as the
305 native metadata is also preserved.
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700306
Ralph Giles09255012016-10-04 09:46:26 -0700307 3.3.3 Sample format
Ralph Giles2fd3c222016-10-04 08:49:09 -0700308
309 A FLAC sample is exactly one FLAC audio FRAME (as defined
310 in the FLAC[3] file specification) belonging to a FLAC
311 bitstreams. The FLAC sample data begins with a complete
312 FLAC FRAME_HEADER, followed by one FLAC SUBFRAME per
313 channel, any necessary bit padding, and ends with the
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700314 usual FLAC FRAME_FOOTER.
315
Ralph Giles2fd3c222016-10-04 08:49:09 -0700316 Note that the FLAC native FRAME_HEADER structure that
317 begins each FLAC sample redundantly encodes channel count,
318 sample rate, and sample size. The values of these fields
319 must agree both with the values declared in the FLAC
320 METADATA_BLOCK_STREAMINFO structure as well as the
321 FLACSampleEntry box.
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700322
Ralph Giles09255012016-10-04 09:46:26 -0700323 3.3.4 Duration of a FLAC sample
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700324
Ralph Giles2fd3c222016-10-04 08:49:09 -0700325 The duration of any given FLAC sample is determined by
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700326 dividing the decoded block size of a FLAC frame, as
327 encoded in the FLAC FRAME's FRAME_HEADER structure, by the
328 value of the timescale field in the Media Header Box.
329 FLAC samples are permitted to have variable durations
330 within a given audio stream. FLAC does not use padding
331 values.
332
Ralph Giles09255012016-10-04 09:46:26 -0700333 3.3.5 Sub-sample
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700334
335 Sub-samples are not defined for FLAC samples in this
336 specification.
337
Ralph Giles09255012016-10-04 09:46:26 -0700338 3.3.6 Random Access
Ralph Giles2fd3c222016-10-04 08:49:09 -0700339
Ralph Giles09255012016-10-04 09:46:26 -0700340 This subclause describes the nature of the random access
341 of FLAC sample.
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700342
Ralph Giles09255012016-10-04 09:46:26 -0700343 3.3.6.1 Random Access Point
Ralph Giles2fd3c222016-10-04 08:49:09 -0700344
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700345 All FLAC samples can be independently decoded
346 i.e. every FLAC sample is a sync sample. The Sync
347 Sample Box shall not be present as long as there are
348 no samples other than FLAC samples in the same
349 track. The sample_is_non_sync_sample field for FLAC
350 samples shall be set to 0.
351
Ralph Giles09255012016-10-04 09:46:26 -0700352 3.4 Basic Structure (informative)
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700353
Ralph Giles09255012016-10-04 09:46:26 -0700354 3.4.1 Initial Movie
Ralph Giles2fd3c222016-10-04 08:49:09 -0700355
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700356 This subclause shows a basic structure of the Movie Box as follows:
357
358 +----+----+----+----+----+----+----+----+------------------------------+
359 |moov| | | | | | | | Movie Box |
360 +----+----+----+----+----+----+----+----+------------------------------+
361 | |mvhd| | | | | | | Movie Header Box |
362 +----+----+----+----+----+----+----+----+------------------------------+
363 | |trak| | | | | | | Track Box |
364 +----+----+----+----+----+----+----+----+------------------------------+
365 | | |tkhd| | | | | | Track Header Box |
366 +----+----+----+----+----+----+----+----+------------------------------+
367 | | |edts|* | | | | | Edit Box |
368 +----+----+----+----+----+----+----+----+------------------------------+
369 | | | |elst|* | | | | Edit List Box |
370 +----+----+----+----+----+----+----+----+------------------------------+
371 | | |mdia| | | | | | Media Box |
372 +----+----+----+----+----+----+----+----+------------------------------+
373 | | | |mdhd| | | | | Media Header Box |
374 +----+----+----+----+----+----+----+----+------------------------------+
375 | | | |hdlr| | | | | Handler Reference Box |
376 +----+----+----+----+----+----+----+----+------------------------------+
377 | | | |minf| | | | | Media Information Box |
378 +----+----+----+----+----+----+----+----+------------------------------+
379 | | | | |smhd| | | | Sound Media Header Box |
380 +----+----+----+----+----+----+----+----+------------------------------+
381 | | | | |dinf| | | | Data Information Box |
382 +----+----+----+----+----+----+----+----+------------------------------+
383 | | | | | |dref| | | Data Reference Box |
384 +----+----+----+----+----+----+----+----+------------------------------+
385 | | | | | | |url | | DataEntryUrlBox |
386 +----+----+----+----+----+----+ or +----+------------------------------+
387 | | | | | | |urn | | DataEntryUrnBox |
388 +----+----+----+----+----+----+----+----+------------------------------+
389 | | | | |stbl| | | | Sample Table |
390 +----+----+----+----+----+----+----+----+------------------------------+
391 | | | | | |stsd| | | Sample Description Box |
392 +----+----+----+----+----+----+----+----+------------------------------+
393 | | | | | | |fLaC| | FLACSampleEntry |
394 +----+----+----+----+----+----+----+----+------------------------------+
395 | | | | | | | |dfLa| FLAC Specific Box |
396 +----+----+----+----+----+----+----+----+------------------------------+
397 | | | | | |stts| | | Decoding Time to Sample Box |
398 +----+----+----+----+----+----+----+----+------------------------------+
399 | | | | | |stsc| | | Sample To Chunk Box |
400 +----+----+----+----+----+----+----+----+------------------------------+
401 | | | | | |stsz| | | Sample Size Box |
402 +----+----+----+----+----+ or +----+----+------------------------------+
403 | | | | | |stz2| | | Compact Sample Size Box |
404 +----+----+----+----+----+----+----+----+------------------------------+
405 | | | | | |stco| | | Chunk Offset Box |
406 +----+----+----+----+----+ or +----+----+------------------------------+
407 | | | | | |co64| | | Chunk Large Offset Box |
408 +----+----+----+----+----+----+----+----+------------------------------+
409 | |mvex|* | | | | | | Movie Extends Box |
410 +----+----+----+----+----+----+----+----+------------------------------+
411 | | |trex|* | | | | | Track Extends Box |
412 +----+----+----+----+----+----+----+----+------------------------------+
413
414 Figure 1 - Basic structure of Movie Box
415
416 It is strongly recommended that the order of boxes should
417 follow the above structure. Boxes marked with an asterisk
Ralph Giles52df9c62016-10-04 08:46:00 -0700418 (*) may or may not be present depending on context. For
419 most boxes listed above, the definition is as is defined
420 in ISO/IEC 14496-12 [1]. The additional boxes and the
421 additional requirements, restrictions and recommendations
422 to the other boxes are described in this specification.
Ralph Giles2fd3c222016-10-04 08:49:09 -0700423
Ralph Giles09255012016-10-04 09:46:26 -0700424 3.5 Example of Encapsulation (informative)
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700425 [File]
426 size = 17790
427 [ftyp: File Type Box]
428 position = 0
429 size = 24
430 major_brand = mp42 : MP4 version 2
431 minor_version = 0
432 compatible_brands
433 brand[0] = mp42 : MP4 version 2
434 brand[1] = isom : ISO Base Media file format
435 [moov: Movie Box]
436 position = 24
437 size = 757
438 [mvhd: Movie Header Box]
439 position = 32
440 size = 108
441 version = 0
442 flags = 0x000000
443 creation_time = UTC 2014/12/12, 18:41:19
444 modification_time = UTC 2014/12/12, 18:41:19
445 timescale = 48000
446 duration = 33600 (00:00:00.700)
447 rate = 1.000000
448 volume = 1.000000
449 reserved = 0x0000
450 reserved = 0x00000000
451 reserved = 0x00000000
452 transformation matrix
453 | a, b, u | | 1.000000, 0.000000, 0.000000 |
454 | c, d, v | = | 0.000000, 1.000000, 0.000000 |
455 | x, y, w | | 0.000000, 0.000000, 1.000000 |
456 pre_defined = 0x00000000
457 pre_defined = 0x00000000
458 pre_defined = 0x00000000
459 pre_defined = 0x00000000
460 pre_defined = 0x00000000
461 pre_defined = 0x00000000
462 next_track_ID = 2
463 [iods: Object Descriptor Box]
464 position = 140
465 size = 33
466 version = 0
467 flags = 0x000000
468 [tag = 0x10: MP4_IOD]
469 expandableClassSize = 16
470 ObjectDescriptorID = 1
471 URL_Flag = 0
472 includeInlineProfileLevelFlag = 0
473 reserved = 0xf
474 ODProfileLevelIndication = 0xff
475 sceneProfileLevelIndication = 0xff
476 audioProfileLevelIndication = 0xfe
477 visualProfileLevelIndication = 0xff
478 graphicsProfileLevelIndication = 0xff
479 [tag = 0x0e: ES_ID_Inc]
480 expandableClassSize = 4
481 Track_ID = 1
482 [trak: Track Box]
483 position = 173
484 size = 608
485 [tkhd: Track Header Box]
486 position = 181
487 size = 92
488 version = 0
489 flags = 0x000007
490 Track enabled
491 Track in movie
492 Track in preview
493 creation_time = UTC 2014/12/12, 18:41:19
494 modification_time = UTC 2014/12/12, 18:41:19
495 track_ID = 1
496 reserved = 0x00000000
497 duration = 33600 (00:00:00.700)
498 reserved = 0x00000000
499 reserved = 0x00000000
500 layer = 0
501 alternate_group = 0
502 volume = 1.000000
503 reserved = 0x0000
504 transformation matrix
505 | a, b, u | | 1.000000, 0.000000, 0.000000 |
506 | c, d, v | = | 0.000000, 1.000000, 0.000000 |
507 | x, y, w | | 0.000000, 0.000000, 1.000000 |
508 width = 0.000000
509 height = 0.000000
510 [mdia: Media Box]
511 position = 273
512 size = 472
513 [mdhd: Media Header Box]
514 position = 281
515 size = 32
516 version = 0
517 flags = 0x000000
518 creation_time = UTC 2014/12/12, 18:41:19
519 modification_time = UTC 2014/12/12, 18:41:19
520 timescale = 48000
521 duration = 34560 (00:00:00.720)
522 language = und
523 pre_defined = 0x0000
524 [hdlr: Handler Reference Box]
525 position = 313
526 size = 51
527 version = 0
528 flags = 0x000000
529 pre_defined = 0x00000000
530 handler_type = soun
531 reserved = 0x00000000
532 reserved = 0x00000000
533 reserved = 0x00000000
534 name = Xiph Audio Handler
535 [minf: Media Information Box]
536 position = 364
537 size = 381
538 [smhd: Sound Media Header Box]
539 position = 372
540 size = 16
541 version = 0
542 flags = 0x000000
543 balance = 0.000000
544 reserved = 0x0000
545 [dinf: Data Information Box]
546 position = 388
547 size = 36
548 [dref: Data Reference Box]
549 position = 396
550 size = 28
551 version = 0
552 flags = 0x000000
553 entry_count = 1
554 [url : Data Entry Url Box]
555 position = 412
556 size = 12
557 version = 0
558 flags = 0x000001
559 location = in the same file
560 [stbl: Sample Table Box]
561 position = 424
562 size = 321
563 [stsd: Sample Description Box]
564 position = 432
565 size = 79
566 version = 0
567 flags = 0x000000
568 entry_count = 1
569 [fLaC: Audio Description]
570 position = 448
571 size = 63
572 reserved = 0x000000000000
573 data_reference_index = 1
574 reserved = 0x0000
575 reserved = 0x0000
576 reserved = 0x00000000
577 channelcount = 2
578 samplesize = 16
579 pre_defined = 0
580 reserved = 0
581 samplerate = 48000.000000
582 [dfLa: FLAC Specific Box]
583 position = 484
Ralph Giles2fd3c222016-10-04 08:49:09 -0700584 size = 50
585 version = 0
586 flags = 0x000000
Ralph Giles09255012016-10-04 09:46:26 -0700587 [FLACMetadataBlock]
Ralph Giles2fd3c222016-10-04 08:49:09 -0700588 LastMetadataBlockFlag = 1
589 BlockType = 0
590 Length = 34
591 BlockData[34];
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700592 [stts: Decoding Time to Sample Box]
Ralph Giles2fd3c222016-10-04 08:49:09 -0700593 position = 492
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700594 size = 24
595 version = 0
596 flags = 0x000000
597 entry_count = 1
598 entry[0]
599 sample_count = 18
600 sample_delta = 1920
601 [stsc: Sample To Chunk Box]
Ralph Giles2fd3c222016-10-04 08:49:09 -0700602 position = 516
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700603 size = 40
604 version = 0
605 flags = 0x000000
606 entry_count = 2
607 entry[0]
608 first_chunk = 1
609 samples_per_chunk = 13
610 sample_description_index = 1
611 entry[1]
612 first_chunk = 2
613 samples_per_chunk = 5
614 sample_description_index = 1
615 [stsz: Sample Size Box]
Ralph Giles2fd3c222016-10-04 08:49:09 -0700616 position = 556
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700617 size = 92
618 version = 0
619 flags = 0x000000
620 sample_size = 0 (variable)
621 sample_count = 18
622 entry_size[0] = 977
623 entry_size[1] = 938
624 entry_size[2] = 939
625 entry_size[3] = 938
626 entry_size[4] = 934
627 entry_size[5] = 945
628 entry_size[6] = 948
629 entry_size[7] = 956
630 entry_size[8] = 955
631 entry_size[9] = 930
632 entry_size[10] = 933
633 entry_size[11] = 934
634 entry_size[12] = 972
635 entry_size[13] = 977
636 entry_size[14] = 958
637 entry_size[15] = 949
638 entry_size[16] = 962
639 entry_size[17] = 848
640 [stco: Chunk Offset Box]
Ralph Giles2fd3c222016-10-04 08:49:09 -0700641 position = 648
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700642 size = 24
643 version = 0
644 flags = 0x000000
645 entry_count = 2
646 chunk_offset[0] = 686
647 chunk_offset[1] = 12985
648 [free: Free Space Box]
Ralph Giles2fd3c222016-10-04 08:49:09 -0700649 position = 672
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700650 size = 8
651 [mdat: Media Data Box]
Ralph Giles2fd3c222016-10-04 08:49:09 -0700652 position = 680
Ralph Giles4bbd73a2016-10-04 08:41:07 -0700653 size = 17001
654
Ralph Giles09255012016-10-04 09:46:26 -07006554 Acknowledgements
Ralph Giles52df9c62016-10-04 08:46:00 -0700656
657 This spec draws heavily from the Opus-in-ISOBMFF specification
658 work done by Yusuke Nakamura <muken.the.vfrmaniac |at| gmail.com>
659
Ralph Giles09255012016-10-04 09:46:26 -0700660 Thank you to Tim Terriberry, David Evans, and Yusuke Nakamura
661 for valuable feedback. Thank you to Ralph Giles for editorial
662 help.
663
6645 Author Address
Ralph Giles52df9c62016-10-04 08:46:00 -0700665
666 Monty Montgomery <cmontgomery@mozilla.com>