summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc9559.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc9559.txt')
-rw-r--r--doc/rfc/rfc9559.txt8479
1 files changed, 8479 insertions, 0 deletions
diff --git a/doc/rfc/rfc9559.txt b/doc/rfc/rfc9559.txt
new file mode 100644
index 0000000..8beb93f
--- /dev/null
+++ b/doc/rfc/rfc9559.txt
@@ -0,0 +1,8479 @@
+
+
+
+
+Internet Engineering Task Force (IETF) S. Lhomme
+Request for Comments: 9559
+Updates: 8794 M. Bunkus
+Category: Standards Track
+ISSN: 2070-1721 D. Rice
+ October 2024
+
+
+ Matroska Media Container Format Specification
+
+Abstract
+
+ This document defines the Matroska audiovisual data container
+ structure, including definitions of its structural elements,
+ terminology, vocabulary, and application.
+
+ This document updates RFC 8794 to permit the use of a previously
+ reserved Extensible Binary Meta Language (EBML) Element ID.
+
+Status of This Memo
+
+ This is an Internet Standards Track document.
+
+ This document is a product of the Internet Engineering Task Force
+ (IETF). It represents the consensus of the IETF community. It has
+ received public review and has been approved for publication by the
+ Internet Engineering Steering Group (IESG). Further information on
+ Internet Standards is available in Section 2 of RFC 7841.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ https://www.rfc-editor.org/info/rfc9559.
+
+Copyright Notice
+
+ Copyright (c) 2024 IETF Trust and the persons identified as the
+ document authors. All rights reserved.
+
+ This document is subject to BCP 78 and the IETF Trust's Legal
+ Provisions Relating to IETF Documents
+ (https://trustee.ietf.org/license-info) in effect on the date of
+ publication of this document. Please review these documents
+ carefully, as they describe your rights and restrictions with respect
+ to this document. Code Components extracted from this document must
+ include Revised BSD License text as described in Section 4.e of the
+ Trust Legal Provisions and are provided without warranty as described
+ in the Revised BSD License.
+
+Table of Contents
+
+ 1. Introduction
+ 2. Status of This Document
+ 3. Notation and Conventions
+ 4. Matroska Overview
+ 4.1. Principles
+ 4.2. Updates to RFC 8794
+ 4.3. Added EBML Constraints
+ 4.4. Design Rules
+ 4.5. Data Layout
+ 5. Matroska Schema
+ 5.1. Segment Element
+ 5.1.1. SeekHead Element
+ 5.1.1.1. Seek Element
+ 5.1.2. Info Element
+ 5.1.2.1. SegmentUUID Element
+ 5.1.2.2. SegmentFilename Element
+ 5.1.2.3. PrevUUID Element
+ 5.1.2.4. PrevFilename Element
+ 5.1.2.5. NextUUID Element
+ 5.1.2.6. NextFilename Element
+ 5.1.2.7. SegmentFamily Element
+ 5.1.2.8. ChapterTranslate Element
+ 5.1.2.9. TimestampScale Element
+ 5.1.2.10. Duration Element
+ 5.1.2.11. DateUTC Element
+ 5.1.2.12. Title Element
+ 5.1.2.13. MuxingApp Element
+ 5.1.2.14. WritingApp Element
+ 5.1.3. Cluster Element
+ 5.1.3.1. Timestamp Element
+ 5.1.3.2. Position Element
+ 5.1.3.3. PrevSize Element
+ 5.1.3.4. SimpleBlock Element
+ 5.1.3.5. BlockGroup Element
+ 5.1.4. Tracks Element
+ 5.1.4.1. TrackEntry Element
+ 5.1.5. Cues Element
+ 5.1.5.1. CuePoint Element
+ 5.1.6. Attachments Element
+ 5.1.6.1. AttachedFile Element
+ 5.1.7. Chapters Element
+ 5.1.7.1. EditionEntry Element
+ 5.1.8. Tags Element
+ 5.1.8.1. Tag Element
+ 6. Matroska Element Ordering
+ 6.1. Top-Level Elements
+ 6.2. CRC-32
+ 6.3. SeekHead
+ 6.4. Cues (Index)
+ 6.5. Info
+ 6.6. Chapters Element
+ 6.7. Attachments
+ 6.8. Tags
+ 7. Matroska Versioning
+ 8. Stream Copy
+ 9. DefaultDecodedFieldDuration
+ 10. Cluster Blocks
+ 10.1. Block Structure
+ 10.2. SimpleBlock Structure
+ 10.3. Block Lacing
+ 10.3.1. No Lacing
+ 10.3.2. Xiph Lacing
+ 10.3.3. EBML Lacing
+ 10.3.4. Fixed-size Lacing
+ 10.3.5. Laced Frames Timestamp
+ 10.4. Random Access Points
+ 11. Timestamps
+ 11.1. Timestamp Ticks
+ 11.1.1. Matroska Ticks
+ 11.1.2. Segment Ticks
+ 11.1.3. Track Ticks
+ 11.2. Block Timestamps
+ 11.3. TimestampScale Rounding
+ 12. Language Codes
+ 13. Country Codes
+ 14. Encryption
+ 15. Image Presentation
+ 15.1. Cropping
+ 15.2. Rotation
+ 16. Segment Position
+ 16.1. Segment Position Exception
+ 16.2. Example of Segment Position
+ 17. Linked Segments
+ 17.1. Hard Linking
+ 17.2. Medium Linking
+ 17.2.1. Linked-Duration
+ 17.2.2. Linked-Edition
+ 18. Track Flags
+ 18.1. Default Flag
+ 18.2. Forced Flag
+ 18.3. Hearing-Impaired Flag
+ 18.4. Visual-Impaired Flag
+ 18.5. Descriptions Flag
+ 18.6. Original Flag
+ 18.7. Commentary Flag
+ 18.8. Track Operation
+ 18.9. Overlay Track
+ 18.10. Multi-planar and 3D Videos
+ 19. Default Track Selection
+ 19.1. Audio Selection
+ 19.2. Subtitle Selection
+ 20. Chapters
+ 20.1. EditionEntry
+ 20.1.1. EditionFlagDefault
+ 20.1.2. Default Edition
+ 20.1.3. EditionFlagOrdered
+ 20.1.3.1. Ordered-Edition and Matroska Segment Linking
+ 20.2. ChapterAtom
+ 20.2.1. ChapterTimeStart
+ 20.2.2. ChapterTimeEnd
+ 20.2.3. Nested Chapters
+ 20.2.4. Nested Chapters in Ordered Chapters
+ 20.2.5. ChapterFlagHidden
+ 20.3. Menu Features
+ 20.4. Physical Types
+ 20.5. Chapter Examples
+ 20.5.1. Example 1: Basic Chaptering
+ 20.5.2. Example 2: Nested Chapters
+ 20.5.2.1. The Micronauts "Bleep To Bleep"
+ 21. Attachments
+ 21.1. Cover Art
+ 21.2. Font Files
+ 22. Cues
+ 22.1. Recommendations
+ 23. Matroska Streaming
+ 23.1. File Access
+ 23.2. Livestreaming
+ 24. Tags
+ 24.1. Tags Precedence
+ 24.2. Tag Levels
+ 25. Implementation Recommendations
+ 25.1. Cluster
+ 25.2. SeekHead
+ 25.3. Optimum Layouts
+ 25.3.1. Optimum Layout for a Muxer
+ 25.3.2. Optimum Layout after Editing Tags
+ 25.3.3. Optimum Layout with Cues at the Front
+ 25.3.4. Optimum Layout for Livestreaming
+ 26. Security Considerations
+ 27. IANA Considerations
+ 27.1. Matroska Element IDs Registry
+ 27.2. Matroska Compression Algorithms Registry
+ 27.3. Matroska Encryption Algorithms Registry
+ 27.4. Matroska AES Cipher Modes Registry
+ 27.5. Matroska Content Encoding Scopes Registry
+ 27.6. Matroska Content Encoding Types Registry
+ 27.7. Matroska Stereo Modes Registry
+ 27.8. Matroska Alpha Modes Registry
+ 27.9. Matroska Display Units Registry
+ 27.10. Matroska Horizontal Chroma Sitings Registry
+ 27.11. Matroska Vertical Chroma Sitings Registry
+ 27.12. Matroska Color Ranges Registry
+ 27.13. Matroska Tags Target Types Registry
+ 27.14. Matroska Chapter Codec IDs Registry
+ 27.15. Matroska Projection Types Registry
+ 27.16. Matroska Track Types Registry
+ 27.17. Matroska Track Plane Types Registry
+ 27.18. Media Types
+ 27.18.1. For Files Containing Video Tracks
+ 27.18.2. For Files Containing Audio Tracks with No Video
+ Tracks
+ 27.18.3. For Files Containing a Stereoscopic Video Track
+ 28. References
+ 28.1. Normative References
+ 28.2. Informative References
+ Appendix A. Historic Deprecated Elements
+ A.1. SilentTracks Element
+ A.2. SilentTrackNumber Element
+ A.3. BlockVirtual Element
+ A.4. ReferenceVirtual Element
+ A.5. Slices Element
+ A.6. TimeSlice Element
+ A.7. LaceNumber Element
+ A.8. FrameNumber Element
+ A.9. BlockAdditionID Element
+ A.10. Delay Element
+ A.11. SliceDuration Element
+ A.12. ReferenceFrame Element
+ A.13. ReferenceOffset Element
+ A.14. ReferenceTimestamp Element
+ A.15. EncryptedBlock Element
+ A.16. MinCache Element
+ A.17. MaxCache Element
+ A.18. TrackOffset Element
+ A.19. CodecSettings Element
+ A.20. CodecInfoURL Element
+ A.21. CodecDownloadURL Element
+ A.22. CodecDecodeAll Element
+ A.23. TrackOverlay Element
+ A.24. AspectRatioType Element
+ A.25. GammaValue Element
+ A.26. FrameRate Element
+ A.27. ChannelPositions Element
+ A.28. TrickTrackUID Element
+ A.29. TrickTrackSegmentUID Element
+ A.30. TrickTrackFlag Element
+ A.31. TrickMasterTrackUID Element
+ A.32. TrickMasterTrackSegmentUID Element
+ A.33. ContentSignature Element
+ A.34. ContentSigKeyID Element
+ A.35. ContentSigAlgo Element
+ A.36. ContentSigHashAlgo Element
+ A.37. CueRefCluster Element
+ A.38. CueRefNumber Element
+ A.39. CueRefCodecState Element
+ A.40. FileReferral Element
+ A.41. FileUsedStartTime Element
+ A.42. FileUsedEndTime Element
+ A.43. TagDefaultBogus Element
+ Authors' Addresses
+
+1. Introduction
+
+ Matroska is an audiovisual data container format. It was derived
+ from a project called [MCF] but diverges from it significantly
+ because it is based on EBML (Extensible Binary Meta Language)
+ [RFC8794], a binary derivative of XML. EBML provides significant
+ advantages in terms of future format extensibility, without breaking
+ file support in parsers reading the previous versions.
+
+ To avoid any misunderstandings, it is essential to clarify exactly
+ what an audio/video container is:
+
+ * It is NOT a video or audio compression format (codec).
+
+ * It is an envelope in which there can be many audio, video, and
+ subtitles streams, allowing the user to store a complete movie or
+ CD in a single file.
+
+ Matroska is designed with the future in mind. It incorporates
+ features such as:
+
+ * Fast seeking in the file
+
+ * Chapter entries
+
+ * Full metadata (tags) support
+
+ * Selectable subtitle/audio/video streams
+
+ * Modularly expandable
+
+ * Error resilience (can recover playback even when the stream is
+ damaged)
+
+ * Streamable over the Internet and local networks (HTTP [RFC9110],
+ FTP [RFC0959], SMB [SMB-CIFS], etc.)
+
+ * Menus (like menus that DVDs have [DVD-Video])
+
+2. Status of This Document
+
+ This document covers Matroska versions 1, 2, 3, and 4. Matroska
+ version 4 is the current version. Matroska versions 1 to 3 are no
+ longer maintained. No new elements are expected in files with
+ version numbers 1, 2, or 3.
+
+3. Notation and Conventions
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
+ "OPTIONAL" in this document are to be interpreted as described in BCP
+ 14 [RFC2119] [RFC8174] when, and only when, they appear in all
+ capitals, as shown here.
+
+ This document defines the following terms in order to define the
+ format and application of Matroska:
+
+ Matroska: A multimedia container format based on EBML (Extensible
+ Binary Meta Language).
+
+ Matroska Reader: A data parser that interprets the semantics of a
+ Matroska document and creates a way for programs to use Matroska.
+
+ Matroska Player: A Matroska Reader with the primary purpose of
+ playing audiovisual files, including Matroska documents.
+
+ Matroska Writer: A data writer that creates Matroska documents.
+
+4. Matroska Overview
+
+4.1. Principles
+
+ Matroska is a Document Type of EBML. This specification is dependent
+ on the EBML specification [RFC8794]. For an understanding of
+ Matroska's EBML Schema, see in particular the sections of the EBML
+ specification that cover EBML Element Types (Section 7), EBML Schema
+ (Section 11.1), and EBML Structure (Section 3).
+
+4.2. Updates to RFC 8794
+
+ Because of an oversight, [RFC8794] reserved EBML ID 0x80, which is
+ used by deployed Matroska implementations. For this reason, this
+ specification updates [RFC8794] to make 0x80 a legal EBML ID.
+ Additionally, this specification makes the following updates:
+
+ * Section 17.1 of [RFC8794] (per Erratum ID #7189 [Err7189])
+
+ OLD:
+
+ | One-octet Element IDs MUST be between 0x81 and 0xFE. These items
+ | are valuable because they are short, and they need to be used for
+ | commonly repeated elements. Element IDs are to be allocated
+ | within this range according to the "RFC Required" policy
+ | [RFC8126].
+ |
+ | The following one-octet Element IDs are RESERVED: 0xFF and 0x80.
+
+ NEW:
+
+ | One-octet Element IDs MUST be between 0x80 and 0xFE. These items
+ | are valuable because they are short, and they need to be used for
+ | commonly repeated elements. Element IDs are to be allocated
+ | within this range according to the "RFC Required" policy
+ | [RFC8126].
+ |
+ | The following one-octet Element ID is RESERVED: 0xFF.
+
+ * Section 5 of [RFC8794] (per Erratum ID #7191 [Err7191])
+
+ OLD:
+
+ +=========================+================+=================+
+ | Element ID Octet Length | Range of Valid | Number of Valid |
+ | | Element IDs | Element IDs |
+ +=========================+================+=================+
+ | 1 | 0x81 - 0xFE | 126 |
+ +-------------------------+----------------+-----------------+
+
+ NEW:
+
+ +=========================+================+=================+
+ | Element ID Octet Length | Range of Valid | Number of Valid |
+ | | Element IDs | Element IDs |
+ +=========================+================+=================+
+ | 1 | 0x80 - 0xFE | 127 |
+ +-------------------------+----------------+-----------------+
+
+4.3. Added EBML Constraints
+
+ As an EBML Document Type, Matroska adds the following constraints to
+ the EBML specification [RFC8794]:
+
+ * The docType of the EBML Header MUST be "matroska".
+
+ * The EBMLMaxIDLength of the EBML Header MUST be 4.
+
+ * The EBMLMaxSizeLength of the EBML Header MUST be between 1 and 8,
+ inclusive.
+
+4.4. Design Rules
+
+ The Root Element and all Top-Level Elements MUST use 4 octets for
+ their EBML Element ID -- i.e., Segment and direct children of
+ Segment.
+
+ Legacy EBML/Matroska parsers did not handle Empty Elements properly;
+ elements were present in the file but had a length of 0. They always
+ assumed the value was 0 for integers/dates or 0x0p+0, the textual
+ expression of floats using the format in [ISO9899], no matter the
+ default value of the element that should have been used instead.
+ Therefore, Matroska Writers MUST NOT use EBML Empty Elements if the
+ element has a default value that is not 0 for integers/dates and
+ 0x0p+0 for floats.
+
+ When adding new elements to Matroska, these rules apply:
+
+ * A non-mandatory integer/date Element MUST NOT have a default value
+ other than 0.
+
+ * A non-mandatory float Element MUST NOT have a default value other
+ than 0x0p+0.
+
+ * A non-mandatory string Element MUST NOT have a default value, as
+ empty strings cannot be defined in the XML Schema.
+
+4.5. Data Layout
+
+ A Matroska file MUST be composed of at least one EBML Document using
+ the Matroska Document Type. Each EBML Document MUST start with an
+ EBML Header and MUST be followed by the EBML Root Element, defined as
+ Segment in Matroska. Matroska defines several Top-Level Elements
+ that may occur within the Segment.
+
+ As an example, a simple Matroska file consisting of a single EBML
+ Document could be represented like this:
+
+ * EBML Header
+ * Segment
+
+ A more complex Matroska file consisting of an EBML Stream (consisting
+ of two EBML Documents) could be represented like this:
+
+ * EBML Header
+ * Segment
+ * EBML Header
+ * Segment
+
+ The following diagram represents a simple Matroska file, comprised of
+ an EBML Document with an EBML Header, a Segment element (the Root
+ Element), and all eight Matroska Top-Level Elements. In the diagrams
+ in this section, horizontal spacing expresses a parent-child
+ relationship between Matroska elements (e.g., the Info element is
+ contained within the Segment element), whereas vertical alignment
+ represents the storage order within the file.
+
+ +-------------+
+ | EBML Header |
+ +---------------------------+
+ | Segment | SeekHead |
+ | |-------------|
+ | | Info |
+ | |-------------|
+ | | Tracks |
+ | |-------------|
+ | | Chapters |
+ | |-------------|
+ | | Cluster |
+ | |-------------|
+ | | Cues |
+ | |-------------|
+ | | Attachments |
+ | |-------------|
+ | | Tags |
+ +---------------------------+
+
+ Figure 1: Basic Layout of a Matroska File
+
+ The Matroska EBML Schema defines eight Top-Level Elements:
+
+ * SeekHead (Section 6.3)
+
+ * Info (Section 6.5)
+
+ * Tracks (Section 18)
+
+ * Chapters (Section 20)
+
+ * Cluster (Section 10)
+
+ * Cues (Section 22)
+
+ * Attachments (Section 21)
+
+ * Tags (Section 6.8)
+
+ The SeekHead element (also known as MetaSeek) contains an index of
+ Top-Level Elements locations within the Segment. Use of the SeekHead
+ element is RECOMMENDED. Without a SeekHead element, a Matroska
+ parser would have to search the entire file to find all of the other
+ Top-Level Elements. This is due to Matroska's flexible ordering
+ requirements; for instance, it is acceptable for the Chapters element
+ to be stored after the Cluster element(s).
+
+ +--------------------------------+
+ | SeekHead | Seek | SeekID |
+ | | |--------------|
+ | | | SeekPosition |
+ +--------------------------------+
+
+ Figure 2: Representation of a SeekHead Element
+
+ The Info element contains vital information for identifying the whole
+ Segment. This includes the title for the Segment, a randomly
+ generated unique identifier (UID), and the UID(s) of any linked
+ Segment elements.
+
+ +-------------------------+
+ | Info | SegmentUUID |
+ | |------------------|
+ | | SegmentFilename |
+ | |------------------|
+ | | PrevUUID |
+ | |------------------|
+ | | PrevFilename |
+ | |------------------|
+ | | NextUUID |
+ | |------------------|
+ | | NextFilename |
+ | |------------------|
+ | | SegmentFamily |
+ | |------------------|
+ | | ChapterTranslate |
+ | |------------------|
+ | | TimestampScale |
+ | |------------------|
+ | | Duration |
+ | |------------------|
+ | | DateUTC |
+ | |------------------|
+ | | Title |
+ | |------------------|
+ | | MuxingApp |
+ | |------------------|
+ | | WritingApp |
+ |-------------------------|
+
+ Figure 3: Representation of an Info Element and Its Child Elements
+
+ The Tracks element defines the technical details for each track and
+ can store the name, number, UID, language, and type (audio, video,
+ subtitles, etc.) of each track. For example, the Tracks element MAY
+ store information about the resolution of a video track or sample
+ rate of an audio track.
+
+ The Tracks element MUST identify all the data needed by the codec to
+ decode the data of the specified track. However, the data required
+ is contingent on the codec used for the track. For example, a Track
+ element for uncompressed audio only requires the audio bit rate to be
+ present. A codec such as AC-3 would require that the CodecID element
+ be present for all tracks, as it is the primary way to identify which
+ codec to use to decode the track.
+
+ +------------------------------------+
+ | Tracks | TrackEntry | TrackNumber |
+ | | |--------------|
+ | | | TrackUID |
+ | | |--------------|
+ | | | TrackType |
+ | | |--------------|
+ | | | Name |
+ | | |--------------|
+ | | | Language |
+ | | |--------------|
+ | | | CodecID |
+ | | |--------------|
+ | | | CodecPrivate |
+ | | |--------------|
+ | | | CodecName |
+ | | |----------------------------------+
+ | | | Video | FlagInterlaced |
+ | | | |-------------------|
+ | | | | FieldOrder |
+ | | | |-------------------|
+ | | | | StereoMode |
+ | | | |-------------------|
+ | | | | AlphaMode |
+ | | | |-------------------|
+ | | | | PixelWidth |
+ | | | |-------------------|
+ | | | | PixelHeight |
+ | | | |-------------------|
+ | | | | DisplayWidth |
+ | | | |-------------------|
+ | | | | DisplayHeight |
+ | | | |-------------------|
+ | | | | AspectRatioType |
+ | | | |-------------------|
+ | | | | Colour |
+ | | |----------------------------------|
+ | | | Audio | SamplingFrequency |
+ | | | |-------------------|
+ | | | | Channels |
+ | | | |-------------------|
+ | | | | BitDepth |
+ |--------------------------------------------------------|
+
+ Figure 4: Representation of the Tracks Element and a Selection of Its
+ Descendant Elements
+
+ The Chapters element lists all of the chapters. Chapters are a way
+ to set predefined points to jump to in video or audio.
+
+ +-----------------------------------------+
+ | Chapters | Edition | EditionUID |
+ | | Entry |--------------------|
+ | | | EditionFlagDefault |
+ | | |--------------------|
+ | | | EditionFlagOrdered |
+ | | |---------------------------------+
+ | | | ChapterAtom | ChapterUID |
+ | | | |-------------------|
+ | | | | ChapterStringUID |
+ | | | |-------------------|
+ | | | | ChapterTimeStart |
+ | | | |-------------------|
+ | | | | ChapterTimeEnd |
+ | | | |-------------------|
+ | | | | ChapterFlagHidden |
+ | | | |-------------------------------+
+ | | | | ChapterDisplay | ChapString |
+ | | | | |--------------|
+ | | | | | ChapLanguage |
+ +------------------------------------------------------------------+
+
+ Figure 5: Representation of the Chapters Element and a Selection
+ of Its Descendant Elements
+
+ Cluster elements contain the content for each track, e.g., video
+ frames. A Matroska file SHOULD contain at least one Cluster element.
+ In the rare case it doesn't, there should be a method for Segments to
+ link together, possibly using Chapters; see Section 17.
+
+ The Cluster element helps to break up SimpleBlock or BlockGroup
+ elements and helps with seeking and error protection. Every Cluster
+ element MUST contain a Timestamp element. This SHOULD be the
+ Timestamp element used to play the first Block in the Cluster
+ element, unless a different value is needed to accommodate for more
+ Blocks; see Section 11.2.
+
+ Cluster elements contain one or more Block element, such as
+ BlockGroup or SimpleBlock elements. In some situations, a Cluster
+ element MAY contain no Block element, for example, in a live
+ recording when no data has been collected.
+
+ A BlockGroup element MAY contain a Block of data and any information
+ relating directly to that Block.
+
+ +--------------------------+
+ | Cluster | Timestamp |
+ | |----------------|
+ | | Position |
+ | |----------------|
+ | | PrevSize |
+ | |----------------|
+ | | SimpleBlock |
+ | |----------------|
+ | | BlockGroup |
+ +--------------------------+
+
+ Figure 6: Representation of a Cluster Element and Its Immediate
+ Child Elements
+
+ +----------------------------------+
+ | Block | Portion of | Data Type |
+ | | a Block | - Bit Flag |
+ | |--------------------------+
+ | | Header | TrackNumber |
+ | | |-------------|
+ | | | Timestamp |
+ | | |-------------|
+ | | | Flags |
+ | | | - Gap |
+ | | | - Lacing |
+ | | | - Reserved |
+ | |--------------------------|
+ | | Optional | FrameSize |
+ | |--------------------------|
+ | | Data | Frame |
+ +----------------------------------+
+
+ Figure 7: Representation of the Block Element Structure
+
+ Each Cluster MUST contain exactly one Timestamp element. The
+ Timestamp element value MUST be stored once per Cluster. The
+ Timestamp element in the Cluster is relative to the entire Segment.
+ The Timestamp element SHOULD be the first element in the Cluster it
+ belongs to or the second element if that Cluster contains a CRC-32
+ element (Section 6.2).
+
+ Additionally, the Block contains an offset that, when added to the
+ Cluster's Timestamp element value, yields the Block's effective
+ timestamp. Therefore, the timestamp in the Block itself is relative
+ to the Timestamp element in the Cluster. For example, if the
+ Timestamp element in the Cluster is set to 10 seconds and a Block in
+ that Cluster is supposed to be played 12 seconds into the clip, the
+ timestamp in the Block would be set to 2 seconds.
+
+ The ReferenceBlock in the BlockGroup is used instead of the basic
+ "P-frame"/"B-frame" description. Instead of simply saying that this
+ Block depends on the Block directly before or directly after, the
+ Timestamp of the necessary Block is used. Because there can be as
+ many ReferenceBlock elements as necessary for a Block, it allows for
+ some extremely complex referencing.
+
+ The Cues element is used to seek when playing back a file by
+ providing a temporal index for some of the Tracks. It is similar to
+ the SeekHead element but is used for seeking to a specific time when
+ playing back the file. It is possible to seek without this element,
+ but it is much more difficult because a Matroska Reader would have to
+ "hunt and peck" through the file to look for the correct timestamp.
+
+ The Cues element SHOULD contain at least one CuePoint element. Each
+ CuePoint element stores the position of the Cluster that contains the
+ BlockGroup or SimpleBlock element. The timestamp is stored in the
+ CueTime element, and the location is stored in the CueTrackPositions
+ element.
+
+ The Cues element is flexible. For instance, the Cues element can be
+ used to index every single timestamp of every Block or they can be
+ indexed selectively.
+
+ +-------------------------------------+
+ | Cues | CuePoint | CueTime |
+ | | |-------------------|
+ | | | CueTrackPositions |
+ | |------------------------------|
+ | | CuePoint | CueTime |
+ | | |-------------------|
+ | | | CueTrackPositions |
+ +-------------------------------------+
+
+ Figure 8: Representation of a Cues Element and Two Levels of Its
+ Descendant Elements
+
+ The Attachments element is for attaching files to a Matroska file,
+ such as pictures, fonts, web pages, etc.
+
+ +------------------------------------------------+
+ | Attachments | AttachedFile | FileDescription |
+ | | |-------------------|
+ | | | FileName |
+ | | |-------------------|
+ | | | FileMediaType |
+ | | |-------------------|
+ | | | FileData |
+ | | |-------------------|
+ | | | FileUID |
+ +------------------------------------------------+
+
+ Figure 9: Representation of an Attachments Element
+
+ The Tags element contains metadata that describes the Segment and
+ potentially its Tracks, Chapters, and Attachments. Each Track or
+ Chapter that those tags applies to has its UID listed in the Tags.
+ The Tags contain all extra information about the file: scriptwriters,
+ singers, actors, directors, titles, edition, price, dates, genre,
+ comments, etc. Tags can contain their values in multiple languages.
+ For example, a movie's "TITLE" tag value might contain both the
+ original English title as well as the German title.
+
+ +-------------------------------------------+
+ | Tags | Tag | Targets | TargetTypeValue |
+ | | | |------------------|
+ | | | | TargetType |
+ | | | |------------------|
+ | | | | TagTrackUID |
+ | | | |------------------|
+ | | | | TagEditionUID |
+ | | | |------------------|
+ | | | | TagChapterUID |
+ | | | |------------------|
+ | | | | TagAttachmentUID |
+ | | |------------------------------|
+ | | | SimpleTag | TagName |
+ | | | |------------------|
+ | | | | TagLanguage |
+ | | | |------------------|
+ | | | | TagDefault |
+ | | | |------------------|
+ | | | | TagString |
+ | | | |------------------|
+ | | | | TagBinary |
+ | | | |------------------|
+ | | | | SimpleTag |
+ +-------------------------------------------+
+
+ Figure 10: Representation of a Tags Element and Three Levels of
+ Its Children Elements
+
+5. Matroska Schema
+
+ This specification includes an EBML Schema that defines the elements
+ and structure of Matroska using the EBML Schema elements and
+ attributes defined in Section 11.1 of [RFC8794].
+
+ Attributes using their default value (like minOccurs, minver, etc.)
+ or attributes with undefined values (like length, maxver, etc.) are
+ omitted.
+
+ The definitions for each Matroska element are provided below.
+
+5.1. Segment Element
+
+ id / type: 0x18538067 / master
+ unknownsizeallowed: True
+ path: \Segment
+ minOccurs / maxOccurs: 1 / 1
+ definition: The Root Element that contains all other Top-Level
+ Elements; see Section 4.5.
+
+5.1.1. SeekHead Element
+
+ id / type: 0x114D9B74 / master
+ path: \Segment\SeekHead
+ maxOccurs: 2
+ definition: Contains seeking information of Top-Level Elements; see
+ Section 4.5.
+
+5.1.1.1. Seek Element
+
+ id / type: 0x4DBB / master
+ path: \Segment\SeekHead\Seek
+ minOccurs: 1
+ definition: Contains a single seek entry to an EBML Element.
+
+5.1.1.1.1. SeekID Element
+
+ id / type: 0x53AB / binary
+ length: 4
+ path: \Segment\SeekHead\Seek\SeekID
+ minOccurs / maxOccurs: 1 / 1
+ definition: The binary EBML ID of a Top-Level Element.
+
+5.1.1.1.2. SeekPosition Element
+
+ id / type: 0x53AC / uinteger
+ path: \Segment\SeekHead\Seek\SeekPosition
+ minOccurs / maxOccurs: 1 / 1
+ definition: The Segment Position (Section 16) of a Top-Level
+ Element.
+
+5.1.2. Info Element
+
+ id / type: 0x1549A966 / master
+ path: \Segment\Info
+ minOccurs / maxOccurs: 1 / 1
+ recurring: True
+ definition: Contains general information about the Segment.
+
+5.1.2.1. SegmentUUID Element
+
+ id / type: 0x73A4 / binary
+ length: 16
+ path: \Segment\Info\SegmentUUID
+ maxOccurs: 1
+ definition: A randomly generated UID that identifies the Segment
+ amongst many others (128 bits). It is equivalent to a Universally
+ Unique Identifier (UUID) v4 [RFC9562] with all bits randomly (or
+ pseudorandomly) chosen. An actual UUID v4 value, where some bits
+ are not random, MAY also be used.
+ usage notes: If the Segment is a part of a Linked Segment, then this
+ element is REQUIRED. The value of the UID MUST contain at least
+ one bit set to 1.
+
+5.1.2.2. SegmentFilename Element
+
+ id / type: 0x7384 / utf-8
+ path: \Segment\Info\SegmentFilename
+ maxOccurs: 1
+ definition: A filename corresponding to this Segment.
+
+5.1.2.3. PrevUUID Element
+
+ id / type: 0x3CB923 / binary
+ length: 16
+ path: \Segment\Info\PrevUUID
+ maxOccurs: 1
+ definition: An ID that identifies the previous Segment of a Linked
+ Segment.
+ usage notes: If the Segment is a part of a Linked Segment that uses
+ Hard Linking (Section 17.1), then either the PrevUUID or the
+ NextUUID element is REQUIRED. If a Segment contains a PrevUUID
+ but not a NextUUID, then it MAY be considered as the last Segment
+ of the Linked Segment. The PrevUUID MUST NOT be equal to the
+ SegmentUUID.
+
+5.1.2.4. PrevFilename Element
+
+ id / type: 0x3C83AB / utf-8
+ path: \Segment\Info\PrevFilename
+ maxOccurs: 1
+ definition: A filename corresponding to the file of the previous
+ Linked Segment.
+ usage notes: Provision of the previous filename is for display
+ convenience, but PrevUUID SHOULD be considered authoritative for
+ identifying the previous Segment in a Linked Segment.
+
+5.1.2.5. NextUUID Element
+
+ id / type: 0x3EB923 / binary
+ length: 16
+ path: \Segment\Info\NextUUID
+ maxOccurs: 1
+ definition: An ID that identifies the next Segment of a Linked
+ Segment.
+ usage notes: If the Segment is a part of a Linked Segment that uses
+ Hard Linking (Section 17.1), then either the PrevUUID or the
+ NextUUID element is REQUIRED. If a Segment contains a NextUUID
+ but not a PrevUUID, then it MAY be considered as the first Segment
+ of the Linked Segment. The NextUUID MUST NOT be equal to the
+ SegmentUUID.
+
+5.1.2.6. NextFilename Element
+
+ id / type: 0x3E83BB / utf-8
+ path: \Segment\Info\NextFilename
+ maxOccurs: 1
+ definition: A filename corresponding to the file of the next Linked
+ Segment.
+ usage notes: Provision of the next filename is for display
+ convenience, but NextUUID SHOULD be considered authoritative for
+ identifying the Next Segment.
+
+5.1.2.7. SegmentFamily Element
+
+ id / type: 0x4444 / binary
+ length: 16
+ path: \Segment\Info\SegmentFamily
+ definition: A UID that all Segments of a Linked Segment MUST share
+ (128 bits). It is equivalent to a UUID v4 [RFC9562] with all bits
+ randomly (or pseudorandomly) chosen. An actual UUID v4 value,
+ where some bits are not random, MAY also be used.
+ usage notes: If the Segment Info contains a ChapterTranslate
+ element, this element is REQUIRED.
+
+5.1.2.8. ChapterTranslate Element
+
+ id / type: 0x6924 / master
+ path: \Segment\Info\ChapterTranslate
+ definition: The mapping between this Segment and a segment value in
+ the given Chapter Codec.
+ rationale: Chapter Codecs may need to address different segments,
+ but they may not know of the way to identify such segments when
+ stored in Matroska. This element and its child elements add a way
+ to map the internal segments known to the Chapter Codec to the
+ SegmentUUIDs in Matroska. This allows remuxing a file with
+ Chapter Codec without changing the content of the codec data, just
+ the Segment mapping.
+
+5.1.2.8.1. ChapterTranslateID Element
+
+ id / type: 0x69A5 / binary
+ path: \Segment\Info\ChapterTranslate\ChapterTranslateID
+ minOccurs / maxOccurs: 1 / 1
+ definition: The binary value used to represent this Segment in the
+ chapter codec data. The format depends on the ChapProcessCodecID
+ used; see Section 5.1.7.1.4.15.
+
+5.1.2.8.2. ChapterTranslateCodec Element
+
+ id / type: 0x69BF / uinteger
+ path: \Segment\Info\ChapterTranslate\ChapterTranslateCodec
+ minOccurs / maxOccurs: 1 / 1
+ definition: Applies to the chapter codec of the given chapter
+ edition(s); see Section 5.1.7.1.4.15.
+ defined values: See Table 31. Additional values can be registered
+ in the "Matroska Chapter Codec IDs" registry defined in
+ Section 27.14.
+
+5.1.2.8.3. ChapterTranslateEditionUID Element
+
+ id / type: 0x69FC / uinteger
+ path: \Segment\Info\ChapterTranslate\ChapterTranslateEditionUID
+ definition: Specifies a chapter edition UID to which this
+ ChapterTranslate applies.
+ usage notes: When no ChapterTranslateEditionUID is specified in the
+ ChapterTranslate, the ChapterTranslate applies to all chapter
+ editions found in the Segment using the given
+ ChapterTranslateCodec.
+
+5.1.2.9. TimestampScale Element
+
+ id / type / default: 0x2AD7B1 / uinteger / 1000000
+ range: not 0 (1-18446744073709551615)
+ path: \Segment\Info\TimestampScale
+ minOccurs / maxOccurs: 1 / 1
+ definition: Base unit for Segment Ticks and Track Ticks, in
+ nanoseconds. A TimestampScale value of 1000000 means scaled
+ timestamps in the Segment are expressed in milliseconds; see
+ Section 11 on how to interpret timestamps.
+
+5.1.2.10. Duration Element
+
+ id / type: 0x4489 / float
+ range: > 0x0p+0
+ path: \Segment\Info\Duration
+ maxOccurs: 1
+ definition: Duration of the Segment, expressed in Segment Ticks,
+ which are based on TimestampScale; see Section 11.1.
+
+5.1.2.11. DateUTC Element
+
+ id / type: 0x4461 / date
+ path: \Segment\Info\DateUTC
+ maxOccurs: 1
+ definition: The date and time that the Segment was created by the
+ muxing application or library.
+
+5.1.2.12. Title Element
+
+ id / type: 0x7BA9 / utf-8
+ path: \Segment\Info\Title
+ maxOccurs: 1
+ definition: General name of the Segment.
+
+5.1.2.13. MuxingApp Element
+
+ id / type: 0x4D80 / utf-8
+ path: \Segment\Info\MuxingApp
+ minOccurs / maxOccurs: 1 / 1
+ definition: Muxing application or library (example: "libmatroska-
+ 0.4.3").
+ usage notes: Include the full name of the application or library
+ followed by the version number.
+
+5.1.2.14. WritingApp Element
+
+ id / type: 0x5741 / utf-8
+ path: \Segment\Info\WritingApp
+ minOccurs / maxOccurs: 1 / 1
+ definition: Writing application (example: "mkvmerge-0.3.3").
+ usage notes: Include the full name of the application followed by
+ the version number.
+
+5.1.3. Cluster Element
+
+ id / type: 0x1F43B675 / master
+ unknownsizeallowed: True
+ path: \Segment\Cluster
+ definition: The Top-Level Element containing the (monolithic) Block
+ structure.
+
+5.1.3.1. Timestamp Element
+
+ id / type: 0xE7 / uinteger
+ path: \Segment\Cluster\Timestamp
+ minOccurs / maxOccurs: 1 / 1
+ definition: Absolute timestamp of the cluster, expressed in Segment
+ Ticks, which are based on TimestampScale; see Section 11.1.
+ usage notes: This element SHOULD be the first child element of the
+ Cluster it belongs to or the second if that Cluster contains a
+ CRC-32 element (Section 6.2).
+
+5.1.3.2. Position Element
+
+ id / type: 0xA7 / uinteger
+ path: \Segment\Cluster\Position
+ maxOccurs: 1
+ maxver: 4
+ definition: The Segment Position of the Cluster in the Segment (0 in
+ live streams). It might help to resynchronize the offset on
+ damaged streams.
+
+5.1.3.3. PrevSize Element
+
+ id / type: 0xAB / uinteger
+ path: \Segment\Cluster\PrevSize
+ maxOccurs: 1
+ definition: Size of the previous Cluster, in octets. Can be useful
+ for backward playing.
+
+5.1.3.4. SimpleBlock Element
+
+ id / type: 0xA3 / binary
+ path: \Segment\Cluster\SimpleBlock
+ minver: 2
+ definition: Similar to Block (see Section 10.1) but without all the
+ extra information. Mostly used to reduce overhead when no extra
+ feature is needed; see Section 10.2 on SimpleBlock Structure.
+
+5.1.3.5. BlockGroup Element
+
+ id / type: 0xA0 / master
+ path: \Segment\Cluster\BlockGroup
+ definition: Basic container of information containing a single Block
+ and information specific to that Block.
+
+5.1.3.5.1. Block Element
+
+ id / type: 0xA1 / binary
+ path: \Segment\Cluster\BlockGroup\Block
+ minOccurs / maxOccurs: 1 / 1
+ definition: Block containing the actual data to be rendered and a
+ timestamp relative to the Cluster Timestamp; see Section 10.1 on
+ Block Structure.
+
+5.1.3.5.2. BlockAdditions Element
+
+ id / type: 0x75A1 / master
+ path: \Segment\Cluster\BlockGroup\BlockAdditions
+ maxOccurs: 1
+ definition: Contains additional binary data to complete the Block
+ element; see Section 4.1.5 of [MatroskaCodec] for more
+ information. An EBML parser that has no knowledge of the Block
+ structure could still see and use/skip these data.
+
+5.1.3.5.2.1. BlockMore Element
+
+ id / type: 0xA6 / master
+ path: \Segment\Cluster\BlockGroup\BlockAdditions\BlockMore
+ minOccurs: 1
+ definition: Contains the BlockAdditional and some parameters.
+
+5.1.3.5.2.2. BlockAdditional Element
+
+ id / type: 0xA5 / binary
+ path: \Segment\Cluster\BlockGroup\BlockAdditions\BlockMore\BlockAddi
+ tional
+ minOccurs / maxOccurs: 1 / 1
+ definition: Interpreted by the codec as it wishes (using the
+ BlockAddID).
+
+5.1.3.5.2.3. BlockAddID Element
+
+ id / type / default: 0xEE / uinteger / 1
+ range: not 0 (1-18446744073709551615)
+ path: \Segment\Cluster\BlockGroup\BlockAdditions\BlockMore\BlockAddI
+ D
+ minOccurs / maxOccurs: 1 / 1
+ definition: An ID that identifies how to interpret the
+ BlockAdditional data; see Section 4.1.5 of [MatroskaCodec] for
+ more information. A value of 1 indicates that the BlockAdditional
+ data is defined by the codec. Any other value indicates that the
+ BlockAdditional data should be handled according to the
+ BlockAddIDType that is located in the TrackEntry.
+ usage notes: Each BlockAddID value MUST be unique between all
+ BlockMore elements found in a BlockAdditions element. To keep
+ MaxBlockAdditionID as low as possible, small values SHOULD be
+ used.
+
+5.1.3.5.3. BlockDuration Element
+
+ id / type: 0x9B / uinteger
+ path: \Segment\Cluster\BlockGroup\BlockDuration
+ minOccurs / maxOccurs: See Table 1 / 1
+ definition: The duration of the Block, expressed in Track Ticks; see
+ Section 11.1. The BlockDuration element can be useful at the end
+ of a Track to define the duration of the last frame (as there is
+ no subsequent Block available) or when there is a break in a track
+ like for subtitle tracks.
+ notes: See Table 1.
+
+ +===========+==================================================+
+ | attribute | note |
+ +===========+==================================================+
+ | minOccurs | BlockDuration MUST be set (minOccurs=1) if the |
+ | | associated TrackEntry stores a DefaultDuration |
+ | | value. |
+ +-----------+--------------------------------------------------+
+ | default | If a value is not present and no DefaultDuration |
+ | | is defined, the value is assumed to be the |
+ | | difference between the timestamp of this Block |
+ | | and the timestamp of the next Block in "display" |
+ | | order (not coding order). |
+ +-----------+--------------------------------------------------+
+
+ Table 1: BlockDuration Implementation Notes
+
+5.1.3.5.4. ReferencePriority Element
+
+ id / type / default: 0xFA / uinteger / 0
+ path: \Segment\Cluster\BlockGroup\ReferencePriority
+ minOccurs / maxOccurs: 1 / 1
+ definition: This frame is referenced and has the specified cache
+ priority. In the cache, only a frame of the same or higher
+ priority can replace this frame. A value of 0 means the frame is
+ not referenced.
+
+5.1.3.5.5. ReferenceBlock Element
+
+ id / type: 0xFB / integer
+ path: \Segment\Cluster\BlockGroup\ReferenceBlock
+ definition: A timestamp value, relative to the timestamp of the
+ Block in this BlockGroup, expressed in Track Ticks; see
+ Section 11.1. This is used to reference other frames necessary to
+ decode this frame. The relative value SHOULD correspond to a
+ valid Block that this Block depends on. Historically, Matroska
+ Writers didn't write the actual Block(s) that this Block depends
+ on, but they did write _some_ Block(s) in the past.
+
+ The value "0" MAY also be used to signify that this Block cannot be
+ decoded on its own, but the necessary reference Block(s) is unknown.
+ In this case, other ReferenceBlock elements MUST NOT be found in the
+ same BlockGroup. If the BlockGroup doesn't have a ReferenceBlock
+ element, then the Block it contains can be decoded without using any
+ other Block data.
+
+5.1.3.5.6. CodecState Element
+
+ id / type: 0xA4 / binary
+ path: \Segment\Cluster\BlockGroup\CodecState
+ maxOccurs: 1
+ minver: 2
+ definition: The new codec state to use. Data interpretation is
+ private to the codec. This information SHOULD always be
+ referenced by a seek entry.
+
+5.1.3.5.7. DiscardPadding Element
+
+ id / type: 0x75A2 / integer
+ path: \Segment\Cluster\BlockGroup\DiscardPadding
+ maxOccurs: 1
+ minver: 4
+ definition: Duration of the silent data added to the Block,
+ expressed in Matroska Ticks -- i.e., in nanoseconds; see
+ Section 11.1 (padding at the end of the Block for positive values
+ and at the beginning of the Block for negative values). The
+ duration of DiscardPadding is not calculated in the duration of
+ the TrackEntry and SHOULD be discarded during playback.
+
+5.1.4. Tracks Element
+
+ id / type: 0x1654AE6B / master
+ path: \Segment\Tracks
+ maxOccurs: 1
+ recurring: True
+ definition: A Top-Level Element of information with many tracks
+ described.
+
+5.1.4.1. TrackEntry Element
+
+ id / type: 0xAE / master
+ path: \Segment\Tracks\TrackEntry
+ minOccurs: 1
+ definition: Describes a track with all elements.
+
+5.1.4.1.1. TrackNumber Element
+
+ id / type: 0xD7 / uinteger
+ range: not 0 (1-18446744073709551615)
+ path: \Segment\Tracks\TrackEntry\TrackNumber
+ minOccurs / maxOccurs: 1 / 1
+ definition: The track number as used in the Block Header.
+
+5.1.4.1.2. TrackUID Element
+
+ id / type: 0x73C5 / uinteger
+ range: not 0 (1-18446744073709551615)
+ path: \Segment\Tracks\TrackEntry\TrackUID
+ minOccurs / maxOccurs: 1 / 1
+ definition: A UID that identifies the Track.
+ stream copy: True (Section 8)
+
+5.1.4.1.3. TrackType Element
+
+ id / type: 0x83 / uinteger
+ range: not 0 (1-18446744073709551615)
+ path: \Segment\Tracks\TrackEntry\TrackType
+ minOccurs / maxOccurs: 1 / 1
+ definition: The TrackType defines the type of each frame found in
+ the Track. The value SHOULD be stored on 1 octet.
+ defined values: See Table 2. Additional values can be registered in
+ the "Matroska Track Types" registry defined in Section 27.16.
+ stream copy: True (Section 8)
+
+ +=======+==========+==========================================+
+ | value | label | contents of each frame |
+ +=======+==========+==========================================+
+ | 1 | video | An image. |
+ +-------+----------+------------------------------------------+
+ | 2 | audio | Audio samples. |
+ +-------+----------+------------------------------------------+
+ | 3 | complex | A mix of different other TrackType. The |
+ | | | codec needs to define how the Matroska |
+ | | | Player should interpret such data. |
+ +-------+----------+------------------------------------------+
+ | 16 | logo | An image to be rendered over the video |
+ | | | track(s). |
+ +-------+----------+------------------------------------------+
+ | 17 | subtitle | Subtitle or closed caption data to be |
+ | | | rendered over the video track(s). |
+ +-------+----------+------------------------------------------+
+ | 18 | buttons | Interactive button(s) to be rendered |
+ | | | over the video track(s). |
+ +-------+----------+------------------------------------------+
+ | 32 | control | Metadata used to control the player of |
+ | | | the Matroska Player. |
+ +-------+----------+------------------------------------------+
+ | 33 | metadata | Timed metadata that can be passed on to |
+ | | | the Matroska Player. |
+ +-------+----------+------------------------------------------+
+
+ Table 2: TrackType Values
+
+5.1.4.1.4. FlagEnabled Element
+
+ id / type / default: 0xB9 / uinteger / 1
+ range: 0-1
+ path: \Segment\Tracks\TrackEntry\FlagEnabled
+ minOccurs / maxOccurs: 1 / 1
+ minver: 2
+ definition: Set to 1 if the track is usable. It is possible to turn
+ a track that is not usable into a usable track using chapter
+ codecs or control tracks.
+
+5.1.4.1.5. FlagDefault Element
+
+ id / type / default: 0x88 / uinteger / 1
+ range: 0-1
+ path: \Segment\Tracks\TrackEntry\FlagDefault
+ minOccurs / maxOccurs: 1 / 1
+ definition: Set to 1 if the track (audio, video, or subtitles) is
+ eligible for automatic selection by the player; see Section 19 for
+ more details.
+
+5.1.4.1.6. FlagForced Element
+
+ id / type / default: 0x55AA / uinteger / 0
+ range: 0-1
+ path: \Segment\Tracks\TrackEntry\FlagForced
+ minOccurs / maxOccurs: 1 / 1
+ definition: Applies only to subtitles. Set to 1 if the track is
+ eligible for automatic selection by the player if it matches the
+ user's language preference, even if the user's preferences would
+ not normally enable subtitles with the selected audio track; this
+ can be used for tracks containing only translations of audio in
+ foreign languages or on-screen text. See Section 19 for more
+ details.
+
+5.1.4.1.7. FlagHearingImpaired Element
+
+ id / type: 0x55AB / uinteger
+ range: 0-1
+ path: \Segment\Tracks\TrackEntry\FlagHearingImpaired
+ maxOccurs: 1
+ minver: 4
+ definition: Set to 1 if and only if the track is suitable for users
+ with hearing impairments.
+
+5.1.4.1.8. FlagVisualImpaired Element
+
+ id / type: 0x55AC / uinteger
+ range: 0-1
+ path: \Segment\Tracks\TrackEntry\FlagVisualImpaired
+ maxOccurs: 1
+ minver: 4
+ definition: Set to 1 if and only if the track is suitable for users
+ with visual impairments.
+
+5.1.4.1.9. FlagTextDescriptions Element
+
+ id / type: 0x55AD / uinteger
+ range: 0-1
+ path: \Segment\Tracks\TrackEntry\FlagTextDescriptions
+ maxOccurs: 1
+ minver: 4
+ definition: Set to 1 if and only if the track contains textual
+ descriptions of video content.
+
+5.1.4.1.10. FlagOriginal Element
+
+ id / type: 0x55AE / uinteger
+ range: 0-1
+ path: \Segment\Tracks\TrackEntry\FlagOriginal
+ maxOccurs: 1
+ minver: 4
+ definition: Set to 1 if and only if the track is in the content's
+ original language.
+
+5.1.4.1.11. FlagCommentary Element
+
+ id / type: 0x55AF / uinteger
+ range: 0-1
+ path: \Segment\Tracks\TrackEntry\FlagCommentary
+ maxOccurs: 1
+ minver: 4
+ definition: Set to 1 if and only if the track contains commentary.
+
+5.1.4.1.12. FlagLacing Element
+
+ id / type / default: 0x9C / uinteger / 1
+ range: 0-1
+ path: \Segment\Tracks\TrackEntry\FlagLacing
+ minOccurs / maxOccurs: 1 / 1
+ definition: Set to 1 if the track MAY contain blocks that use
+ lacing. When set to 0, all blocks MUST have their lacing flags
+ set to "no lacing"; see Section 10.3 on 'Block' Lacing.
+
+5.1.4.1.13. DefaultDuration Element
+
+ id / type: 0x23E383 / uinteger
+ range: not 0 (1-18446744073709551615)
+ path: \Segment\Tracks\TrackEntry\DefaultDuration
+ maxOccurs: 1
+ definition: Number of nanoseconds per frame, expressed in Matroska
+ Ticks -- i.e., in nanoseconds; see Section 11.1 ("frame" in the
+ Matroska sense -- one element put into a (Simple)Block).
+ stream copy: True (Section 8)
+
+5.1.4.1.14. DefaultDecodedFieldDuration Element
+
+ id / type: 0x234E7A / uinteger
+ range: not 0 (1-18446744073709551615)
+ path: \Segment\Tracks\TrackEntry\DefaultDecodedFieldDuration
+ maxOccurs: 1
+ minver: 4
+ definition: The period between two successive fields at the output
+ of the decoding process, expressed in Matroska Ticks -- i.e., in
+ nanoseconds; see Section 11.1. See Section 9 for more
+ information.
+ stream copy: True (Section 8)
+
+5.1.4.1.15. TrackTimestampScale Element
+
+ id / type / default: 0x23314F / float / 0x1p+0
+ range: > 0x0p+0
+ path: \Segment\Tracks\TrackEntry\TrackTimestampScale
+ minOccurs / maxOccurs: 1 / 1
+ maxver: 3
+ definition: The scale to apply on this track to work at normal speed
+ in relation with other tracks (mostly used to adjust video speed
+ when the audio length differs).
+ stream copy: True (Section 8)
+
+5.1.4.1.16. MaxBlockAdditionID Element
+
+ id / type / default: 0x55EE / uinteger / 0
+ path: \Segment\Tracks\TrackEntry\MaxBlockAdditionID
+ minOccurs / maxOccurs: 1 / 1
+ definition: The maximum value of BlockAddID (Section 5.1.3.5.2.3).
+ A value of 0 means there is no BlockAdditions (Section 5.1.3.5.2)
+ for this track.
+
+5.1.4.1.17. BlockAdditionMapping Element
+
+ id / type: 0x41E4 / master
+ path: \Segment\Tracks\TrackEntry\BlockAdditionMapping
+ minver: 4
+ definition: Contains elements that extend the track format by adding
+ content either to each frame, with BlockAddID
+ (Section 5.1.3.5.2.3), or to the track as a whole with
+ BlockAddIDExtraData.
+
+5.1.4.1.17.1. BlockAddIDValue Element
+
+ id / type: 0x41F0 / uinteger
+ range: >=2
+ path: \Segment\Tracks\TrackEntry\BlockAdditionMapping\BlockAddIDValu
+ e
+ maxOccurs: 1
+ minver: 4
+ definition: If the track format extension needs content beside
+ frames, the value refers to the BlockAddID (Section 5.1.3.5.2.3)
+ value being described.
+ usage notes: To keep MaxBlockAdditionID as low as possible, small
+ values SHOULD be used.
+
+5.1.4.1.17.2. BlockAddIDName Element
+
+ id / type: 0x41A4 / string
+ path: \Segment\Tracks\TrackEntry\BlockAdditionMapping\BlockAddIDName
+ maxOccurs: 1
+ minver: 4
+ definition: A human-friendly name describing the type of
+ BlockAdditional data, as defined by the associated Block
+ Additional Mapping.
+
+5.1.4.1.17.3. BlockAddIDType Element
+
+ id / type / default: 0x41E7 / uinteger / 0
+ path: \Segment\Tracks\TrackEntry\BlockAdditionMapping\BlockAddIDType
+ minOccurs / maxOccurs: 1 / 1
+ minver: 4
+ definition: Stores the registered identifier of the Block Additional
+ Mapping to define how the BlockAdditional data should be handled.
+ usage notes: If BlockAddIDType is 0, the BlockAddIDValue and
+ corresponding BlockAddID values MUST be 1.
+
+5.1.4.1.17.4. BlockAddIDExtraData Element
+
+ id / type: 0x41ED / binary
+ path: \Segment\Tracks\TrackEntry\BlockAdditionMapping\BlockAddIDExtr
+ aData
+ maxOccurs: 1
+ minver: 4
+ definition: Extra binary data that the BlockAddIDType can use to
+ interpret the BlockAdditional data. The interpretation of the
+ binary data depends on the BlockAddIDType value and the
+ corresponding Block Additional Mapping.
+
+5.1.4.1.18. Name Element
+
+ id / type: 0x536E / utf-8
+ path: \Segment\Tracks\TrackEntry\Name
+ maxOccurs: 1
+ definition: A human-readable track name.
+
+5.1.4.1.19. Language Element
+
+ id / type / default: 0x22B59C / string / eng
+ path: \Segment\Tracks\TrackEntry\Language
+ minOccurs / maxOccurs: 1 / 1
+ definition: The language of the track, in the Matroska languages
+ form; see Section 12 on language codes. This element MUST be
+ ignored if the LanguageBCP47 element is used in the same
+ TrackEntry.
+
+5.1.4.1.20. LanguageBCP47 Element
+
+ id / type: 0x22B59D / string
+ path: \Segment\Tracks\TrackEntry\LanguageBCP47
+ maxOccurs: 1
+ minver: 4
+ definition: The language of the track, in the form defined in
+ [RFC5646]; see Section 12 on language codes. If this element is
+ used, then any Language elements used in the same TrackEntry MUST
+ be ignored.
+
+5.1.4.1.21. CodecID Element
+
+ id / type: 0x86 / string
+ path: \Segment\Tracks\TrackEntry\CodecID
+ minOccurs / maxOccurs: 1 / 1
+ definition: An ID corresponding to the codec; see [MatroskaCodec]
+ for more info.
+ stream copy: True (Section 8)
+
+5.1.4.1.22. CodecPrivate Element
+
+ id / type: 0x63A2 / binary
+ path: \Segment\Tracks\TrackEntry\CodecPrivate
+ maxOccurs: 1
+ definition: Private data only known to the codec.
+ stream copy: True (Section 8)
+
+5.1.4.1.23. CodecName Element
+
+ id / type: 0x258688 / utf-8
+ path: \Segment\Tracks\TrackEntry\CodecName
+ maxOccurs: 1
+ definition: A human-readable string specifying the codec.
+
+5.1.4.1.24. AttachmentLink Element
+
+ id / type: 0x7446 / uinteger
+ range: not 0 (1-18446744073709551615)
+ path: \Segment\Tracks\TrackEntry\AttachmentLink
+ maxOccurs: 1
+ maxver: 3
+ definition: The UID of an attachment that is used by this codec.
+ usage notes: The value MUST match the FileUID value of an attachment
+ found in this Segment.
+
+5.1.4.1.25. CodecDelay Element
+
+ id / type / default: 0x56AA / uinteger / 0
+ path: \Segment\Tracks\TrackEntry\CodecDelay
+ minOccurs / maxOccurs: 1 / 1
+ minver: 4
+ definition: The built-in delay for the codec, expressed in Matroska
+ Ticks -- i.e., in nanoseconds; see Section 11.1. It represents
+ the number of codec samples that will be discarded by the decoder
+ during playback. This timestamp value MUST be subtracted from
+ each frame timestamp in order to get the timestamp that will be
+ actually played. The value SHOULD be small so the muxing of
+ tracks with the same actual timestamp are in the same Cluster.
+ stream copy: True (Section 8)
+
+5.1.4.1.26. SeekPreRoll Element
+
+ id / type / default: 0x56BB / uinteger / 0
+ path: \Segment\Tracks\TrackEntry\SeekPreRoll
+ minOccurs / maxOccurs: 1 / 1
+ minver: 4
+ definition: After a discontinuity, the duration of the data that the
+ decoder MUST decode before the decoded data is valid, expressed in
+ Matroska Ticks -- i.e., in nanoseconds; see Section 11.1.
+ stream copy: True (Section 8)
+
+5.1.4.1.27. TrackTranslate Element
+
+ id / type: 0x6624 / master
+ path: \Segment\Tracks\TrackEntry\TrackTranslate
+ definition: The mapping between this TrackEntry and a track value in
+ the given Chapter Codec.
+ rationale: Chapter Codecs may need to address content in a specific
+ track, but they may not know of the way to identify tracks in
+ Matroska. This element and its child elements add a way to map
+ the internal tracks known to the Chapter Codec to the track IDs in
+ Matroska. This allows remuxing a file with Chapter Codec without
+ changing the content of the codec data, just the track mapping.
+
+5.1.4.1.27.1. TrackTranslateTrackID Element
+
+ id / type: 0x66A5 / binary
+ path: \Segment\Tracks\TrackEntry\TrackTranslate\TrackTranslateTrackI
+ D
+ minOccurs / maxOccurs: 1 / 1
+ definition: The binary value used to represent this TrackEntry in
+ the chapter codec data. The format depends on the
+ ChapProcessCodecID used; see Section 5.1.7.1.4.15.
+
+5.1.4.1.27.2. TrackTranslateCodec Element
+
+ id / type: 0x66BF / uinteger
+ path: \Segment\Tracks\TrackEntry\TrackTranslate\TrackTranslateCodec
+ minOccurs / maxOccurs: 1 / 1
+ definition: Applies to the chapter codec of the given chapter
+ edition(s); see Section 5.1.7.1.4.15.
+ defined values: See Table 31. Additional values can be registered
+ in the "Matroska Chapter Codec IDs" registry defined in
+ Section 27.14.
+
+5.1.4.1.27.3. TrackTranslateEditionUID Element
+
+ id / type: 0x66FC / uinteger
+ path: \Segment\Tracks\TrackEntry\TrackTranslate\TrackTranslateEditio
+ nUID
+ definition: Specifies a chapter edition UID to which this
+ TrackTranslate applies.
+ usage notes: When no TrackTranslateEditionUID is specified in the
+ TrackTranslate, the TrackTranslate applies to all chapter editions
+ found in the Segment using the given TrackTranslateCodec.
+
+5.1.4.1.28. Video Element
+
+ id / type: 0xE0 / master
+ path: \Segment\Tracks\TrackEntry\Video
+ maxOccurs: 1
+ definition: Video settings.
+
+5.1.4.1.28.1. FlagInterlaced Element
+
+ id / type / default: 0x9A / uinteger / 0
+ path: \Segment\Tracks\TrackEntry\Video\FlagInterlaced
+ minOccurs / maxOccurs: 1 / 1
+ minver: 2
+ definition: Specifies whether the video frames in this track are
+ interlaced.
+ restrictions: See Table 3.
+ stream copy: True (Section 8)
+
+ +=======+==============+==========================+
+ | value | label | definition |
+ +=======+==============+==========================+
+ | 0 | undetermined | Unknown status. This |
+ | | | value SHOULD be avoided. |
+ +-------+--------------+--------------------------+
+ | 1 | interlaced | Interlaced frames. |
+ +-------+--------------+--------------------------+
+ | 2 | progressive | No interlacing. |
+ +-------+--------------+--------------------------+
+
+ Table 3: FlagInterlaced Values
+
+5.1.4.1.28.2. FieldOrder Element
+
+ id / type / default: 0x9D / uinteger / 2
+ path: \Segment\Tracks\TrackEntry\Video\FieldOrder
+ minOccurs / maxOccurs: 1 / 1
+ minver: 4
+ definition: Specifies the field ordering of video frames in this
+ track.
+ restrictions: See Table 4.
+ usage notes: If FlagInterlaced is not set to 1, this element MUST be
+ ignored.
+ stream copy: True (Section 8)
+
+ +=======+===============+=========================================+
+ | value | label | definition |
+ +=======+===============+=========================================+
+ | 0 | progressive | Interlaced frames. This value SHOULD |
+ | | | be avoided; setting FlagInterlaced to 2 |
+ | | | is sufficient. |
+ +-------+---------------+-----------------------------------------+
+ | 1 | tff | Top field displayed first. Top field |
+ | | | stored first. |
+ +-------+---------------+-----------------------------------------+
+ | 2 | undetermined | Unknown field order. This value SHOULD |
+ | | | be avoided. |
+ +-------+---------------+-----------------------------------------+
+ | 6 | bff | Bottom field displayed first. Bottom |
+ | | | field stored first. |
+ +-------+---------------+-----------------------------------------+
+ | 9 | tff | Top field displayed first. Fields are |
+ | | (interleaved) | interleaved in storage with the top |
+ | | | line of the top field stored first. |
+ +-------+---------------+-----------------------------------------+
+ | 14 | bff | Bottom field displayed first. Fields |
+ | | (interleaved) | are interleaved in storage with the top |
+ | | | line of the top field stored first. |
+ +-------+---------------+-----------------------------------------+
+
+ Table 4: FieldOrder Values
+
+5.1.4.1.28.3. StereoMode Element
+
+ id / type / default: 0x53B8 / uinteger / 0
+ path: \Segment\Tracks\TrackEntry\Video\StereoMode
+ minOccurs / maxOccurs: 1 / 1
+ minver: 3
+ definition: Stereo-3D video mode. See Section 18.10 for more
+ details.
+ defined values: See Table 5. Additional values can be registered in
+ the "Matroska Stereo Modes" registry defined in Section 27.7.
+ stream copy: True (Section 8)
+
+ +=======+===================================================+
+ | value | label |
+ +=======+===================================================+
+ | 0 | mono |
+ +-------+---------------------------------------------------+
+ | 1 | side by side (left eye first) |
+ +-------+---------------------------------------------------+
+ | 2 | top - bottom (right eye is first) |
+ +-------+---------------------------------------------------+
+ | 3 | top - bottom (left eye is first) |
+ +-------+---------------------------------------------------+
+ | 4 | checkboard (right eye is first) |
+ +-------+---------------------------------------------------+
+ | 5 | checkboard (left eye is first) |
+ +-------+---------------------------------------------------+
+ | 6 | row interleaved (right eye is first) |
+ +-------+---------------------------------------------------+
+ | 7 | row interleaved (left eye is first) |
+ +-------+---------------------------------------------------+
+ | 8 | column interleaved (right eye is first) |
+ +-------+---------------------------------------------------+
+ | 9 | column interleaved (left eye is first) |
+ +-------+---------------------------------------------------+
+ | 10 | anaglyph (cyan/red) |
+ +-------+---------------------------------------------------+
+ | 11 | side by side (right eye first) |
+ +-------+---------------------------------------------------+
+ | 12 | anaglyph (green/magenta) |
+ +-------+---------------------------------------------------+
+ | 13 | both eyes laced in one Block (left eye is first) |
+ +-------+---------------------------------------------------+
+ | 14 | both eyes laced in one Block (right eye is first) |
+ +-------+---------------------------------------------------+
+
+ Table 5: StereoMode Values
+
+5.1.4.1.28.4. AlphaMode Element
+
+ id / type / default: 0x53C0 / uinteger / 0
+ path: \Segment\Tracks\TrackEntry\Video\AlphaMode
+ minOccurs / maxOccurs: 1 / 1
+ minver: 3
+ definition: Indicates whether the BlockAdditional element with
+ BlockAddID of "1" contains Alpha data as defined by the Codec
+ Mapping for the CodecID. Undefined values (i.e., values other
+ than 0 or 1) SHOULD NOT be used, as the behavior of known
+ implementations is different.
+ defined values: See Table 6. Additional values can be registered in
+ the "Matroska Alpha Modes" registry defined in Section 27.8.
+ stream copy: True (Section 8)
+
+ +=======+=========+============================================+
+ | value | label | definition |
+ +=======+=========+============================================+
+ | 0 | none | The BlockAdditional element with |
+ | | | BlockAddID of "1" does not exist or SHOULD |
+ | | | NOT be considered as containing such data. |
+ +-------+---------+--------------------------------------------+
+ | 1 | present | The BlockAdditional element with |
+ | | | BlockAddID of "1" contains alpha channel |
+ | | | data. |
+ +-------+---------+--------------------------------------------+
+
+ Table 6: AlphaMode Values
+
+5.1.4.1.28.5. OldStereoMode Element
+
+ id / type: 0x53B9 / uinteger
+ path: \Segment\Tracks\TrackEntry\Video\OldStereoMode
+ maxOccurs: 1
+ maxver: 2
+ definition: Bogus StereoMode value used in old versions of
+ [libmatroska].
+ restrictions: See Table 7.
+ usage notes: This element MUST NOT be used. It was an incorrect
+ value used in libmatroska up to 0.9.0.
+
+ +=======+===========+
+ | value | label |
+ +=======+===========+
+ | 0 | mono |
+ +-------+-----------+
+ | 1 | right eye |
+ +-------+-----------+
+ | 2 | left eye |
+ +-------+-----------+
+ | 3 | both eyes |
+ +-------+-----------+
+
+ Table 7: OldStereoMode
+ Values
+
+5.1.4.1.28.6. PixelWidth Element
+
+ id / type: 0xB0 / uinteger
+ range: not 0 (1-18446744073709551615)
+ path: \Segment\Tracks\TrackEntry\Video\PixelWidth
+ minOccurs / maxOccurs: 1 / 1
+ definition: Width of the encoded video frames in pixels.
+ stream copy: True (Section 8)
+
+5.1.4.1.28.7. PixelHeight Element
+
+ id / type: 0xBA / uinteger
+ range: not 0 (1-18446744073709551615)
+ path: \Segment\Tracks\TrackEntry\Video\PixelHeight
+ minOccurs / maxOccurs: 1 / 1
+ definition: Height of the encoded video frames in pixels.
+ stream copy: True (Section 8)
+
+5.1.4.1.28.8. PixelCropBottom Element
+
+ id / type / default: 0x54AA / uinteger / 0
+ path: \Segment\Tracks\TrackEntry\Video\PixelCropBottom
+ minOccurs / maxOccurs: 1 / 1
+ definition: The number of video pixels to remove at the bottom of
+ the image.
+ stream copy: True (Section 8)
+
+5.1.4.1.28.9. PixelCropTop Element
+
+ id / type / default: 0x54BB / uinteger / 0
+ path: \Segment\Tracks\TrackEntry\Video\PixelCropTop
+ minOccurs / maxOccurs: 1 / 1
+ definition: The number of video pixels to remove at the top of the
+ image.
+ stream copy: True (Section 8)
+
+5.1.4.1.28.10. PixelCropLeft Element
+
+ id / type / default: 0x54CC / uinteger / 0
+ path: \Segment\Tracks\TrackEntry\Video\PixelCropLeft
+ minOccurs / maxOccurs: 1 / 1
+ definition: The number of video pixels to remove on the left of the
+ image.
+ stream copy: True (Section 8)
+
+5.1.4.1.28.11. PixelCropRight Element
+
+ id / type / default: 0x54DD / uinteger / 0
+ path: \Segment\Tracks\TrackEntry\Video\PixelCropRight
+ minOccurs / maxOccurs: 1 / 1
+ definition: The number of video pixels to remove on the right of the
+ image.
+ stream copy: True (Section 8)
+
+5.1.4.1.28.12. DisplayWidth Element
+
+ id / type: 0x54B0 / uinteger
+ range: not 0 (1-18446744073709551615)
+ path: \Segment\Tracks\TrackEntry\Video\DisplayWidth
+ maxOccurs: 1
+ definition: Width of the video frames to display. Applies to the
+ video frame after cropping (PixelCrop* Elements).
+ notes: See Table 8.
+ stream copy: True (Section 8)
+
+ +===========+==================================================+
+ | attribute | note |
+ +===========+==================================================+
+ | default | If the DisplayUnit of the same TrackEntry is 0, |
+ | | then the default value for DisplayWidth is equal |
+ | | to PixelWidth - PixelCropLeft - PixelCropRight; |
+ | | else, there is no default value. |
+ +-----------+--------------------------------------------------+
+
+ Table 8: DisplayWidth Implementation Notes
+
+5.1.4.1.28.13. DisplayHeight Element
+
+ id / type: 0x54BA / uinteger
+ range: not 0 (1-18446744073709551615)
+ path: \Segment\Tracks\TrackEntry\Video\DisplayHeight
+ maxOccurs: 1
+ definition: Height of the video frames to display. Applies to the
+ video frame after cropping (PixelCrop* Elements).
+ notes: See Table 9.
+ stream copy: True (Section 8)
+
+ +===========+===================================================+
+ | attribute | note |
+ +===========+===================================================+
+ | default | If the DisplayUnit of the same TrackEntry is 0, |
+ | | then the default value for DisplayHeight is equal |
+ | | to PixelHeight - PixelCropTop - PixelCropBottom; |
+ | | else, there is no default value. |
+ +-----------+---------------------------------------------------+
+
+ Table 9: DisplayHeight Implementation Notes
+
+5.1.4.1.28.14. DisplayUnit Element
+
+ id / type / default: 0x54B2 / uinteger / 0
+ path: \Segment\Tracks\TrackEntry\Video\DisplayUnit
+ minOccurs / maxOccurs: 1 / 1
+ definition: How DisplayWidth and DisplayHeight are interpreted.
+ defined values: See Table 10. Additional values can be registered
+ in the "Matroska Display Units" registry defined in Section 27.9.
+
+ +=======+======================+
+ | value | label |
+ +=======+======================+
+ | 0 | pixels |
+ +-------+----------------------+
+ | 1 | centimeters |
+ +-------+----------------------+
+ | 2 | inches |
+ +-------+----------------------+
+ | 3 | display aspect ratio |
+ +-------+----------------------+
+ | 4 | unknown |
+ +-------+----------------------+
+
+ Table 10: DisplayUnit Values
+
+5.1.4.1.28.15. UncompressedFourCC Element
+
+ id / type: 0x2EB524 / binary
+ length: 4
+ path: \Segment\Tracks\TrackEntry\Video\UncompressedFourCC
+ minOccurs / maxOccurs: See Table 11 / 1
+ definition: Specifies the uncompressed pixel format used for the
+ Track's data as a FourCC. This value is similar in scope to the
+ biCompression value of AVI's BITMAPINFO [AVIFormat]. There is
+ neither a definitive list of FourCC values nor an official
+ registry. Some common values for YUV pixel formats can be found
+ at [MSYUV8], [MSYUV16], and [FourCC-YUV]. Some common values for
+ uncompressed RGB pixel formats can be found at [MSRGB] and
+ [FourCC-RGB].
+ notes: See Table 11.
+ stream copy: True (Section 8)
+
+ +===========+==============================================+
+ | attribute | note |
+ +===========+==============================================+
+ | minOccurs | UncompressedFourCC MUST be set (minOccurs=1) |
+ | | in TrackEntry when the CodecID element of |
+ | | the TrackEntry is set to "V_UNCOMPRESSED". |
+ +-----------+----------------------------------------------+
+
+ Table 11: UncompressedFourCC Implementation Notes
+
+5.1.4.1.28.16. Colour Element
+
+ id / type: 0x55B0 / master
+ path: \Segment\Tracks\TrackEntry\Video\Colour
+ maxOccurs: 1
+ minver: 4
+ definition: Settings describing the color format.
+ stream copy: True (Section 8)
+
+5.1.4.1.28.17. MatrixCoefficients Element
+
+ id / type / default: 0x55B1 / uinteger / 2
+ path: \Segment\Tracks\TrackEntry\Video\Colour\MatrixCoefficients
+ minOccurs / maxOccurs: 1 / 1
+ minver: 4
+ definition: The Matrix Coefficients of the video used to derive luma
+ and chroma values from red, green, and blue color primaries. For
+ clarity, the value and meanings for MatrixCoefficients are adopted
+ from Table 4 of [ITU-H.273].
+ restrictions: See Table 12.
+ stream copy: True (Section 8)
+
+ +=======+=======================================+
+ | value | label |
+ +=======+=======================================+
+ | 0 | Identity |
+ +-------+---------------------------------------+
+ | 1 | ITU-R BT.709 |
+ +-------+---------------------------------------+
+ | 2 | unspecified |
+ +-------+---------------------------------------+
+ | 3 | reserved |
+ +-------+---------------------------------------+
+ | 4 | US FCC 73.682 |
+ +-------+---------------------------------------+
+ | 5 | ITU-R BT.470BG |
+ +-------+---------------------------------------+
+ | 6 | SMPTE 170M |
+ +-------+---------------------------------------+
+ | 7 | SMPTE 240M |
+ +-------+---------------------------------------+
+ | 8 | YCoCg |
+ +-------+---------------------------------------+
+ | 9 | BT2020 Non-constant Luminance |
+ +-------+---------------------------------------+
+ | 10 | BT2020 Constant Luminance |
+ +-------+---------------------------------------+
+ | 11 | SMPTE ST 2085 |
+ +-------+---------------------------------------+
+ | 12 | Chroma-derived Non-constant Luminance |
+ +-------+---------------------------------------+
+ | 13 | Chroma-derived Constant Luminance |
+ +-------+---------------------------------------+
+ | 14 | ITU-R BT.2100-0 |
+ +-------+---------------------------------------+
+
+ Table 12: MatrixCoefficients Values
+
+5.1.4.1.28.18. BitsPerChannel Element
+
+ id / type / default: 0x55B2 / uinteger / 0
+ path: \Segment\Tracks\TrackEntry\Video\Colour\BitsPerChannel
+ minOccurs / maxOccurs: 1 / 1
+ minver: 4
+ definition: Number of decoded bits per channel. A value of 0
+ indicates that the BitsPerChannel is unspecified.
+ stream copy: True (Section 8)
+
+5.1.4.1.28.19. ChromaSubsamplingHorz Element
+
+ id / type: 0x55B3 / uinteger
+ path: \Segment\Tracks\TrackEntry\Video\Colour\ChromaSubsamplingHorz
+ maxOccurs: 1
+ minver: 4
+ definition: The number of pixels to remove in the Cr and Cb channels
+ for every pixel not removed horizontally. Example: For video with
+ 4:2:0 chroma subsampling, the ChromaSubsamplingHorz SHOULD be set
+ to 1.
+ stream copy: True (Section 8)
+
+5.1.4.1.28.20. ChromaSubsamplingVert Element
+
+ id / type: 0x55B4 / uinteger
+ path: \Segment\Tracks\TrackEntry\Video\Colour\ChromaSubsamplingVert
+ maxOccurs: 1
+ minver: 4
+ definition: The number of pixels to remove in the Cr and Cb channels
+ for every pixel not removed vertically. Example: For video with
+ 4:2:0 chroma subsampling, the ChromaSubsamplingVert SHOULD be set
+ to 1.
+ stream copy: True (Section 8)
+
+5.1.4.1.28.21. CbSubsamplingHorz Element
+
+ id / type: 0x55B5 / uinteger
+ path: \Segment\Tracks\TrackEntry\Video\Colour\CbSubsamplingHorz
+ maxOccurs: 1
+ minver: 4
+ definition: The number of pixels to remove in the Cb channel for
+ every pixel not removed horizontally. This is additive with
+ ChromaSubsamplingHorz. Example: For video with 4:2:1 chroma
+ subsampling, the ChromaSubsamplingHorz SHOULD be set to 1, and
+ CbSubsamplingHorz SHOULD be set to 1.
+ stream copy: True (Section 8)
+
+5.1.4.1.28.22. CbSubsamplingVert Element
+
+ id / type: 0x55B6 / uinteger
+ path: \Segment\Tracks\TrackEntry\Video\Colour\CbSubsamplingVert
+ maxOccurs: 1
+ minver: 4
+ definition: The number of pixels to remove in the Cb channel for
+ every pixel not removed vertically. This is additive with
+ ChromaSubsamplingVert.
+ stream copy: True (Section 8)
+
+5.1.4.1.28.23. ChromaSitingHorz Element
+
+ id / type / default: 0x55B7 / uinteger / 0
+ path: \Segment\Tracks\TrackEntry\Video\Colour\ChromaSitingHorz
+ minOccurs / maxOccurs: 1 / 1
+ minver: 4
+ definition: How chroma is subsampled horizontally.
+ defined values: See Table 13. Additional values can be registered
+ in the "Matroska Horizontal Chroma Sitings" registry defined in
+ Section 27.10.
+ stream copy: True (Section 8)
+
+ +=======+=================+
+ | value | label |
+ +=======+=================+
+ | 0 | unspecified |
+ +-------+-----------------+
+ | 1 | left collocated |
+ +-------+-----------------+
+ | 2 | half |
+ +-------+-----------------+
+
+ Table 13:
+ ChromaSitingHorz Values
+
+5.1.4.1.28.24. ChromaSitingVert Element
+
+ id / type / default: 0x55B8 / uinteger / 0
+ path: \Segment\Tracks\TrackEntry\Video\Colour\ChromaSitingVert
+ minOccurs / maxOccurs: 1 / 1
+ minver: 4
+ definition: How chroma is subsampled vertically.
+ defined values: See Table 14. Additional values can be registered
+ in the "Matroska Vertical Chroma Sitings" registry defined in
+ Section 27.11.
+ stream copy: True (Section 8)
+
+ +=======+================+
+ | value | label |
+ +=======+================+
+ | 0 | unspecified |
+ +-------+----------------+
+ | 1 | top collocated |
+ +-------+----------------+
+ | 2 | half |
+ +-------+----------------+
+
+ Table 14:
+ ChromaSitingVert
+ Values
+
+5.1.4.1.28.25. Color Range Element
+
+ id / type / default: 0x55B9 / uinteger / 0
+ path: \Segment\Tracks\TrackEntry\Video\Colour\Range
+ minOccurs / maxOccurs: 1 / 1
+ minver: 4
+ definition: Clipping of the color ranges.
+ defined values: See Table 15. Additional values can be registered
+ in the "Matroska Color Ranges" registry defined in Section 27.12.
+ stream copy: True (Section 8)
+
+ +=======+=========================================================+
+ | value | label |
+ +=======+=========================================================+
+ | 0 | unspecified |
+ +-------+---------------------------------------------------------+
+ | 1 | broadcast range |
+ +-------+---------------------------------------------------------+
+ | 2 | full range (no clipping) |
+ +-------+---------------------------------------------------------+
+ | 3 | defined by MatrixCoefficients / TransferCharacteristics |
+ +-------+---------------------------------------------------------+
+
+ Table 15: Range Values
+
+5.1.4.1.28.26. TransferCharacteristics Element
+
+ id / type / default: 0x55BA / uinteger / 2
+ path: \Segment\Tracks\TrackEntry\Video\Colour\TransferCharacteristic
+ s
+ minOccurs / maxOccurs: 1 / 1
+ minver: 4
+ definition: The transfer characteristics of the video. For clarity,
+ the value and meanings for TransferCharacteristics are adopted
+ from Table 3 of [ITU-H.273].
+ restrictions: See Table 16.
+ stream copy: True (Section 8)
+
+ +=======+=======================================+
+ | value | label |
+ +=======+=======================================+
+ | 0 | reserved |
+ +-------+---------------------------------------+
+ | 1 | ITU-R BT.709 |
+ +-------+---------------------------------------+
+ | 2 | unspecified |
+ +-------+---------------------------------------+
+ | 3 | reserved2 |
+ +-------+---------------------------------------+
+ | 4 | Gamma 2.2 curve - BT.470M |
+ +-------+---------------------------------------+
+ | 5 | Gamma 2.8 curve - BT.470BG |
+ +-------+---------------------------------------+
+ | 6 | SMPTE 170M |
+ +-------+---------------------------------------+
+ | 7 | SMPTE 240M |
+ +-------+---------------------------------------+
+ | 8 | Linear |
+ +-------+---------------------------------------+
+ | 9 | Log |
+ +-------+---------------------------------------+
+ | 10 | Log Sqrt |
+ +-------+---------------------------------------+
+ | 11 | IEC 61966-2-4 |
+ +-------+---------------------------------------+
+ | 12 | ITU-R BT.1361 Extended Colour Gamut |
+ +-------+---------------------------------------+
+ | 13 | IEC 61966-2-1 |
+ +-------+---------------------------------------+
+ | 14 | ITU-R BT.2020 10 bit |
+ +-------+---------------------------------------+
+ | 15 | ITU-R BT.2020 12 bit |
+ +-------+---------------------------------------+
+ | 16 | ITU-R BT.2100 Perceptual Quantization |
+ +-------+---------------------------------------+
+ | 17 | SMPTE ST 428-1 |
+ +-------+---------------------------------------+
+ | 18 | ARIB STD-B67 (HLG) |
+ +-------+---------------------------------------+
+
+ Table 16: TransferCharacteristics Values
+
+5.1.4.1.28.27. Primaries Element
+
+ id / type / default: 0x55BB / uinteger / 2
+ path: \Segment\Tracks\TrackEntry\Video\Colour\Primaries
+ minOccurs / maxOccurs: 1 / 1
+ minver: 4
+ definition: The color primaries of the video. For clarity, the
+ value and meanings for Primaries are adopted from Table 2 of
+ [ITU-H.273].
+ restrictions: See Table 17.
+ stream copy: True (Section 8)
+
+ +=======+========================================+
+ | value | label |
+ +=======+========================================+
+ | 0 | reserved |
+ +-------+----------------------------------------+
+ | 1 | ITU-R BT.709 |
+ +-------+----------------------------------------+
+ | 2 | unspecified |
+ +-------+----------------------------------------+
+ | 3 | reserved2 |
+ +-------+----------------------------------------+
+ | 4 | ITU-R BT.470M |
+ +-------+----------------------------------------+
+ | 5 | ITU-R BT.470BG - BT.601 625 |
+ +-------+----------------------------------------+
+ | 6 | ITU-R BT.601 525 - SMPTE 170M |
+ +-------+----------------------------------------+
+ | 7 | SMPTE 240M |
+ +-------+----------------------------------------+
+ | 8 | FILM |
+ +-------+----------------------------------------+
+ | 9 | ITU-R BT.2020 |
+ +-------+----------------------------------------+
+ | 10 | SMPTE ST 428-1 |
+ +-------+----------------------------------------+
+ | 11 | SMPTE RP 432-2 |
+ +-------+----------------------------------------+
+ | 12 | SMPTE EG 432-2 |
+ +-------+----------------------------------------+
+ | 22 | EBU Tech. 3213-E - JEDEC P22 phosphors |
+ +-------+----------------------------------------+
+
+ Table 17: Primaries Values
+
+5.1.4.1.28.28. MaxCLL Element
+
+ id / type: 0x55BC / uinteger
+ path: \Segment\Tracks\TrackEntry\Video\Colour\MaxCLL
+ maxOccurs: 1
+ minver: 4
+ definition: Maximum brightness of a single pixel (Maximum Content
+ Light Level) in candelas per square meter (cd/m^2).
+ stream copy: True (Section 8)
+
+5.1.4.1.28.29. MaxFALL Element
+
+ id / type: 0x55BD / uinteger
+ path: \Segment\Tracks\TrackEntry\Video\Colour\MaxFALL
+ maxOccurs: 1
+ minver: 4
+ definition: Maximum brightness of a single full frame (Maximum
+ Frame-Average Light Level) in candelas per square meter (cd/m^2).
+ stream copy: True (Section 8)
+
+5.1.4.1.28.30. MasteringMetadata Element
+
+ id / type: 0x55D0 / master
+ path: \Segment\Tracks\TrackEntry\Video\Colour\MasteringMetadata
+ maxOccurs: 1
+ minver: 4
+ definition: SMPTE 2086 mastering data.
+ stream copy: True (Section 8)
+
+5.1.4.1.28.31. PrimaryRChromaticityX Element
+
+ id / type: 0x55D1 / float
+ range: 0x0p+0-0x1p+0
+ path: \Segment\Tracks\TrackEntry\Video\Colour\MasteringMetadata\Prim
+ aryRChromaticityX
+ maxOccurs: 1
+ minver: 4
+ definition: Red X chromaticity coordinate, as defined by [CIE-1931].
+ stream copy: True (Section 8)
+
+5.1.4.1.28.32. PrimaryRChromaticityY Element
+
+ id / type: 0x55D2 / float
+ range: 0x0p+0-0x1p+0
+ path: \Segment\Tracks\TrackEntry\Video\Colour\MasteringMetadata\Prim
+ aryRChromaticityY
+ maxOccurs: 1
+ minver: 4
+ definition: Red Y chromaticity coordinate, as defined by [CIE-1931].
+ stream copy: True (Section 8)
+
+5.1.4.1.28.33. PrimaryGChromaticityX Element
+
+ id / type: 0x55D3 / float
+ range: 0x0p+0-0x1p+0
+ path: \Segment\Tracks\TrackEntry\Video\Colour\MasteringMetadata\Prim
+ aryGChromaticityX
+ maxOccurs: 1
+ minver: 4
+ definition: Green X chromaticity coordinate, as defined by
+ [CIE-1931].
+ stream copy: True (Section 8)
+
+5.1.4.1.28.34. PrimaryGChromaticityY Element
+
+ id / type: 0x55D4 / float
+ range: 0x0p+0-0x1p+0
+ path: \Segment\Tracks\TrackEntry\Video\Colour\MasteringMetadata\Prim
+ aryGChromaticityY
+ maxOccurs: 1
+ minver: 4
+ definition: Green Y chromaticity coordinate, as defined by
+ [CIE-1931].
+ stream copy: True (Section 8)
+
+5.1.4.1.28.35. PrimaryBChromaticityX Element
+
+ id / type: 0x55D5 / float
+ range: 0x0p+0-0x1p+0
+ path: \Segment\Tracks\TrackEntry\Video\Colour\MasteringMetadata\Prim
+ aryBChromaticityX
+ maxOccurs: 1
+ minver: 4
+ definition: Blue X chromaticity coordinate, as defined by
+ [CIE-1931].
+ stream copy: True (Section 8)
+
+5.1.4.1.28.36. PrimaryBChromaticityY Element
+
+ id / type: 0x55D6 / float
+ range: 0x0p+0-0x1p+0
+ path: \Segment\Tracks\TrackEntry\Video\Colour\MasteringMetadata\Prim
+ aryBChromaticityY
+ maxOccurs: 1
+ minver: 4
+ definition: Blue Y chromaticity coordinate, as defined by
+ [CIE-1931].
+ stream copy: True (Section 8)
+
+5.1.4.1.28.37. WhitePointChromaticityX Element
+
+ id / type: 0x55D7 / float
+ range: 0x0p+0-0x1p+0
+ path: \Segment\Tracks\TrackEntry\Video\Colour\MasteringMetadata\Whit
+ ePointChromaticityX
+ maxOccurs: 1
+ minver: 4
+ definition: White X chromaticity coordinate, as defined by
+ [CIE-1931].
+ stream copy: True (Section 8)
+
+5.1.4.1.28.38. WhitePointChromaticityY Element
+
+ id / type: 0x55D8 / float
+ range: 0x0p+0-0x1p+0
+ path: \Segment\Tracks\TrackEntry\Video\Colour\MasteringMetadata\Whit
+ ePointChromaticityY
+ maxOccurs: 1
+ minver: 4
+ definition: White Y chromaticity coordinate, as defined by
+ [CIE-1931].
+ stream copy: True (Section 8)
+
+5.1.4.1.28.39. LuminanceMax Element
+
+ id / type: 0x55D9 / float
+ range: >= 0x0p+0
+ path: \Segment\Tracks\TrackEntry\Video\Colour\MasteringMetadata\Lumi
+ nanceMax
+ maxOccurs: 1
+ minver: 4
+ definition: Maximum luminance. Represented in candelas per square
+ meter (cd/m^2).
+ stream copy: True (Section 8)
+
+5.1.4.1.28.40. LuminanceMin Element
+
+ id / type: 0x55DA / float
+ range: >= 0x0p+0
+ path: \Segment\Tracks\TrackEntry\Video\Colour\MasteringMetadata\Lumi
+ nanceMin
+ maxOccurs: 1
+ minver: 4
+ definition: Minimum luminance. Represented in candelas per square
+ meter (cd/m^2).
+ stream copy: True (Section 8)
+
+5.1.4.1.28.41. Projection Element
+
+ id / type: 0x7670 / master
+ path: \Segment\Tracks\TrackEntry\Video\Projection
+ maxOccurs: 1
+ minver: 4
+ definition: Describes the video projection details. Used to render
+ spherical or VR videos or to flip videos horizontally or
+ vertically.
+ stream copy: True (Section 8)
+
+5.1.4.1.28.42. ProjectionType Element
+
+ id / type / default: 0x7671 / uinteger / 0
+ path: \Segment\Tracks\TrackEntry\Video\Projection\ProjectionType
+ minOccurs / maxOccurs: 1 / 1
+ minver: 4
+ definition: Describes the projection used for this video track.
+ defined values: See Table 18. Additional values can be registered
+ in the "Matroska Projection Types" registry defined in
+ Section 27.15.
+ stream copy: True (Section 8)
+
+ +=======+=================+
+ | value | label |
+ +=======+=================+
+ | 0 | rectangular |
+ +-------+-----------------+
+ | 1 | equirectangular |
+ +-------+-----------------+
+ | 2 | cubemap |
+ +-------+-----------------+
+ | 3 | mesh |
+ +-------+-----------------+
+
+ Table 18:
+ ProjectionType Values
+
+5.1.4.1.28.43. ProjectionPrivate Element
+
+ id / type: 0x7672 / binary
+ path: \Segment\Tracks\TrackEntry\Video\Projection\ProjectionPrivate
+ maxOccurs: 1
+ minver: 4
+ definition: Private data that only applies to a specific projection.
+
+ * If ProjectionType equals 0 (rectangular), then this element MUST
+ NOT be present.
+ * If ProjectionType equals 1 (equirectangular), then this element
+ MUST be present and contain the same binary data that would be
+ stored inside an ISOBMFF Equirectangular Projection Box ("equi").
+ * If ProjectionType equals 2 (cubemap), then this element MUST be
+ present and contain the same binary data that would be stored
+ inside an ISOBMFF Cubemap Projection Box ("cbmp").
+ * If ProjectionType equals 3 (mesh), then this element MUST be
+ present and contain the same binary data that would be stored
+ inside an ISOBMFF Mesh Projection Box ("mshp").
+
+ usage notes: ISOBMFF box size and FourCC fields are not included in
+ the binary data, but the FullBox version and flag fields are.
+ This is to avoid redundant framing information while preserving
+ versioning and semantics between the two container formats.
+ stream copy: True (Section 8)
+
+5.1.4.1.28.44. ProjectionPoseYaw Element
+
+ id / type / default: 0x7673 / float / 0x0p+0
+ range: >= -0xB4p+0, <= 0xB4p+0
+ path: \Segment\Tracks\TrackEntry\Video\Projection\ProjectionPoseYaw
+ minOccurs / maxOccurs: 1 / 1
+ minver: 4
+ definition: Specifies a yaw rotation to the projection. Value
+ represents a clockwise rotation, in degrees, around the up vector.
+ This rotation must be applied before any ProjectionPosePitch or
+ ProjectionPoseRoll rotations. The value of this element MUST be
+ in the -180 to 180 degree range, both inclusive.
+
+ Setting ProjectionPoseYaw to 180 or -180 degrees with
+ ProjectionPoseRoll and ProjectionPosePitch set to 0 degrees flips the
+ image horizontally.
+
+ stream copy: True (Section 8)
+
+5.1.4.1.28.45. ProjectionPosePitch Element
+
+ id / type / default: 0x7674 / float / 0x0p+0
+ range: >= -0x5Ap+0, <= 0x5Ap+0
+ path: \Segment\Tracks\TrackEntry\Video\Projection\ProjectionPosePitc
+ h
+ minOccurs / maxOccurs: 1 / 1
+ minver: 4
+ definition: Specifies a pitch rotation to the projection. Value
+ represents a counter-clockwise rotation, in degrees, around the
+ right vector. This rotation must be applied after the
+ ProjectionPoseYaw rotation and before the ProjectionPoseRoll
+ rotation. The value of this element MUST be in the -90 to 90
+ degree range, both inclusive.
+ stream copy: True (Section 8)
+
+5.1.4.1.28.46. ProjectionPoseRoll Element
+
+ id / type / default: 0x7675 / float / 0x0p+0
+ range: >= -0xB4p+0, <= 0xB4p+0
+ path: \Segment\Tracks\TrackEntry\Video\Projection\ProjectionPoseRoll
+ minOccurs / maxOccurs: 1 / 1
+ minver: 4
+ definition: Specifies a roll rotation to the projection. Value
+ represents a counter-clockwise rotation, in degrees, around the
+ forward vector. This rotation must be applied after the
+ ProjectionPoseYaw and ProjectionPosePitch rotations. The value of
+ this element MUST be in the -180 to 180 degree range, both
+ inclusive. Setting ProjectionPoseRoll to 180 or -180 degrees and
+ ProjectionPoseYaw to 180 or -180 degrees with ProjectionPosePitch
+ set to 0 degrees flips the image vertically. Setting
+ ProjectionPoseRoll to 180 or -180 degrees with ProjectionPoseYaw
+ and ProjectionPosePitch set to 0 degrees flips the image
+ horizontally and vertically.
+ stream copy: True (Section 8)
+
+5.1.4.1.29. Audio Element
+
+ id / type: 0xE1 / master
+ path: \Segment\Tracks\TrackEntry\Audio
+ maxOccurs: 1
+ definition: Audio settings.
+
+5.1.4.1.29.1. SamplingFrequency Element
+
+ id / type / default: 0xB5 / float / 0x1.f4p+12
+ range: > 0x0p+0
+ path: \Segment\Tracks\TrackEntry\Audio\SamplingFrequency
+ minOccurs / maxOccurs: 1 / 1
+ definition: Sampling frequency in Hz.
+ stream copy: True (Section 8)
+
+5.1.4.1.29.2. OutputSamplingFrequency Element
+
+ id / type: 0x78B5 / float
+ range: > 0x0p+0
+ path: \Segment\Tracks\TrackEntry\Audio\OutputSamplingFrequency
+ maxOccurs: 1
+ definition: Real output sampling frequency in Hz that is used for
+ Spectral Band Replication (SBR) techniques.
+ notes: See Table 19.
+
+ +===========+======================================================+
+ | attribute | note |
+ +===========+======================================================+
+ | default | The default value for OutputSamplingFrequency of the |
+ | | same TrackEntry is equal to the SamplingFrequency. |
+ +-----------+------------------------------------------------------+
+
+ Table 19: OutputSamplingFrequency Implementation Notes
+
+5.1.4.1.29.3. Channels Element
+
+ id / type / default: 0x9F / uinteger / 1
+ range: not 0 (1-18446744073709551615)
+ path: \Segment\Tracks\TrackEntry\Audio\Channels
+ minOccurs / maxOccurs: 1 / 1
+ definition: Numbers of channels in the track.
+ stream copy: True (Section 8)
+
+5.1.4.1.29.4. BitDepth Element
+
+ id / type: 0x6264 / uinteger
+ range: not 0 (1-18446744073709551615)
+ path: \Segment\Tracks\TrackEntry\Audio\BitDepth
+ maxOccurs: 1
+ definition: Bits per sample, mostly used for PCM.
+ stream copy: True (Section 8)
+
+5.1.4.1.30. TrackOperation Element
+
+ id / type: 0xE2 / master
+ path: \Segment\Tracks\TrackEntry\TrackOperation
+ maxOccurs: 1
+ minver: 3
+ definition: Operation that needs to be applied on tracks to create
+ this virtual track. For more details, see Section 18.8.
+ stream copy: True (Section 8)
+
+5.1.4.1.30.1. TrackCombinePlanes Element
+
+ id / type: 0xE3 / master
+ path: \Segment\Tracks\TrackEntry\TrackOperation\TrackCombinePlanes
+ maxOccurs: 1
+ minver: 3
+ definition: Contains the list of all video plane tracks that need to
+ be combined to create this 3D track.
+ stream copy: True (Section 8)
+
+5.1.4.1.30.2. TrackPlane Element
+
+ id / type: 0xE4 / master
+ path: \Segment\Tracks\TrackEntry\TrackOperation\TrackCombinePlanes\T
+ rackPlane
+ minOccurs: 1
+ minver: 3
+ definition: Contains a video plane track that needs to be combined
+ to create this 3D track.
+ stream copy: True (Section 8)
+
+5.1.4.1.30.3. TrackPlaneUID Element
+
+ id / type: 0xE5 / uinteger
+ range: not 0 (1-18446744073709551615)
+ path: \Segment\Tracks\TrackEntry\TrackOperation\TrackCombinePlanes\T
+ rackPlane\TrackPlaneUID
+ minOccurs / maxOccurs: 1 / 1
+ minver: 3
+ definition: The TrackUID number of the track representing the plane.
+ stream copy: True (Section 8)
+
+5.1.4.1.30.4. TrackPlaneType Element
+
+ id / type: 0xE6 / uinteger
+ path: \Segment\Tracks\TrackEntry\TrackOperation\TrackCombinePlanes\T
+ rackPlane\TrackPlaneType
+ minOccurs / maxOccurs: 1 / 1
+ minver: 3
+ definition: The kind of plane this track corresponds to.
+ defined values: See Table 20. Additional values can be registered
+ in the "Matroska Track Plane Types" registry defined in
+ Section 27.17.
+ stream copy: True (Section 8)
+
+ +=======+============+
+ | value | label |
+ +=======+============+
+ | 0 | left eye |
+ +-------+------------+
+ | 1 | right eye |
+ +-------+------------+
+ | 2 | background |
+ +-------+------------+
+
+ Table 20:
+ TrackPlaneType Values
+
+5.1.4.1.30.5. TrackJoinBlocks Element
+
+ id / type: 0xE9 / master
+ path: \Segment\Tracks\TrackEntry\TrackOperation\TrackJoinBlocks
+ maxOccurs: 1
+ minver: 3
+ definition: Contains the list of all tracks whose Blocks need to be
+ combined to create this virtual track.
+ stream copy: True (Section 8)
+
+5.1.4.1.30.6. TrackJoinUID Element
+
+ id / type: 0xED / uinteger
+ range: not 0 (1-18446744073709551615)
+ path: \Segment\Tracks\TrackEntry\TrackOperation\TrackJoinBlocks\Trac
+ kJoinUID
+ minOccurs: 1
+ minver: 3
+ definition: The TrackUID number of a track whose blocks are used to
+ create this virtual track.
+ stream copy: True (Section 8)
+
+5.1.4.1.31. ContentEncodings Element
+
+ id / type: 0x6D80 / master
+ path: \Segment\Tracks\TrackEntry\ContentEncodings
+ maxOccurs: 1
+ definition: Settings for several content encoding mechanisms like
+ compression or encryption.
+ stream copy: True (Section 8)
+
+5.1.4.1.31.1. ContentEncoding Element
+
+ id / type: 0x6240 / master
+ path: \Segment\Tracks\TrackEntry\ContentEncodings\ContentEncoding
+ minOccurs: 1
+ definition: Settings for one content encoding like compression or
+ encryption.
+ stream copy: True (Section 8)
+
+5.1.4.1.31.2. ContentEncodingOrder Element
+
+ id / type / default: 0x5031 / uinteger / 0
+ path: \Segment\Tracks\TrackEntry\ContentEncodings\ContentEncoding\Co
+ ntentEncodingOrder
+ minOccurs / maxOccurs: 1 / 1
+ definition: Defines the order to apply each ContentEncoding of the
+ ContentEncodings. The decoder/demuxer MUST start with the
+ ContentEncoding with the highest ContentEncodingOrder and work its
+ way down to the ContentEncoding with the lowest
+ ContentEncodingOrder. This value MUST be unique for each
+ ContentEncoding found in the ContentEncodings of this TrackEntry.
+ stream copy: True (Section 8)
+
+5.1.4.1.31.3. ContentEncodingScope Element
+
+ id / type / default: 0x5032 / uinteger / 1
+ range: not 0 (0x1-0x8000000000000000)
+ path: \Segment\Tracks\TrackEntry\ContentEncodings\ContentEncoding\Co
+ ntentEncodingScope
+ minOccurs / maxOccurs: 1 / 1
+ definition: A bit field that describes which elements have been
+ modified in this way. Values (big-endian) can be OR'ed.
+ defined values: See Table 21. Additional values can be registered
+ in the "Matroska Content Encoding Scopes" registry defined in
+ Section 27.5.
+ stream copy: True (Section 8)
+
+ +=======+=========+============================================+
+ | value | label | definition |
+ +=======+=========+============================================+
+ | 0x1 | Block | All frame contents, excluding lacing data. |
+ +-------+---------+--------------------------------------------+
+ | 0x2 | Private | The track's CodecPrivate data. |
+ +-------+---------+--------------------------------------------+
+ | 0x4 | Next | The next ContentEncoding (next |
+ | | | ContentEncodingOrder; the data inside |
+ | | | ContentCompression and/or |
+ | | | ContentEncryption). This value SHOULD NOT |
+ | | | be used, as it's not supported by players. |
+ +-------+---------+--------------------------------------------+
+
+ Table 21: ContentEncodingScope Values
+
+5.1.4.1.31.4. ContentEncodingType Element
+
+ id / type / default: 0x5033 / uinteger / 0
+ path: \Segment\Tracks\TrackEntry\ContentEncodings\ContentEncoding\Co
+ ntentEncodingType
+ minOccurs / maxOccurs: 1 / 1
+ definition: A value describing the kind of transformation that is
+ applied.
+ defined values: See Table 22. Additional values can be registered
+ in the "Matroska Content Encoding Types" registry defined in
+ Section 27.6.
+ stream copy: True (Section 8)
+
+ +=======+=============+
+ | value | label |
+ +=======+=============+
+ | 0 | Compression |
+ +-------+-------------+
+ | 1 | Encryption |
+ +-------+-------------+
+
+ Table 22:
+ ContentEncodingType
+ Values
+
+5.1.4.1.31.5. ContentCompression Element
+
+ id / type: 0x5034 / master
+ path: \Segment\Tracks\TrackEntry\ContentEncodings\ContentEncoding\Co
+ ntentCompression
+ maxOccurs: 1
+ definition: Settings describing the compression used. This element
+ MUST be present if the value of ContentEncodingType is 0 and
+ absent otherwise. Each block MUST be decompressable, even if no
+ previous block is available in order to not prevent seeking.
+ stream copy: True (Section 8)
+
+5.1.4.1.31.6. ContentCompAlgo Element
+
+ id / type / default: 0x4254 / uinteger / 0
+ path: \Segment\Tracks\TrackEntry\ContentEncodings\ContentEncoding\Co
+ ntentCompression\ContentCompAlgo
+ minOccurs / maxOccurs: 1 / 1
+ definition: The compression algorithm used.
+ defined values: See Table 23. Additional values can be registered
+ in the "Matroska Compression Algorithms" registry defined in
+ Section 27.2.
+ usage notes: Compression method "1" (bzlib) and "2" (lzo1x) lack
+ proper documentation on the format, which limits implementation
+ possibilities. Due to licensing conflicts on commonly available
+ libraries' compression methods, "2" (lzo1x) does not offer
+ widespread interoperability. A Matroska Writer SHOULD NOT use
+ these compression methods by default. A Matroska Reader MAY
+ support methods "1" and "2" and SHOULD support other methods.
+ stream copy: True (Section 8)
+
+ +=======+===========+========================================+
+ | value | label | definition |
+ +=======+===========+========================================+
+ | 0 | zlib | zlib compression [RFC1950]. |
+ +-------+-----------+----------------------------------------+
+ | 1 | bzlib | bzip2 compression [BZIP2] SHOULD NOT |
+ | | | be used; see usage notes. |
+ +-------+-----------+----------------------------------------+
+ | 2 | lzo1x | Lempel-Ziv-Oberhumer compression [LZO] |
+ | | | SHOULD NOT be used; see usage notes. |
+ +-------+-----------+----------------------------------------+
+ | 3 | Header | Octets in ContentCompSettings |
+ | | Stripping | (Section 5.1.4.1.31.7) have been |
+ | | | stripped from each frame. |
+ +-------+-----------+----------------------------------------+
+
+ Table 23: ContentCompAlgo Values
+
+5.1.4.1.31.7. ContentCompSettings Element
+
+ id / type: 0x4255 / binary
+ path: \Segment\Tracks\TrackEntry\ContentEncodings\ContentEncoding\Co
+ ntentCompression\ContentCompSettings
+ maxOccurs: 1
+ definition: Settings that might be needed by the decompressor. For
+ Header Stripping (ContentCompAlgo=3), the bytes that were removed
+ from the beginning of each frame of the track.
+ stream copy: True (Section 8)
+
+5.1.4.1.31.8. ContentEncryption Element
+
+ id / type: 0x5035 / master
+ path: \Segment\Tracks\TrackEntry\ContentEncodings\ContentEncoding\Co
+ ntentEncryption
+ maxOccurs: 1
+ definition: Settings describing the encryption used. This element
+ MUST be present if the value of ContentEncodingType is 1
+ (encryption) and MUST be ignored otherwise. A Matroska Player MAY
+ support encryption.
+ stream copy: True (Section 8)
+
+5.1.4.1.31.9. ContentEncAlgo Element
+
+ id / type / default: 0x47E1 / uinteger / 0
+ path: \Segment\Tracks\TrackEntry\ContentEncodings\ContentEncoding\Co
+ ntentEncryption\ContentEncAlgo
+ minOccurs / maxOccurs: 1 / 1
+ definition: The encryption algorithm used.
+ defined values: See Table 24. Additional values can be registered
+ in the "Matroska Encryption Algorithms" registry defined in
+ Section 27.3.
+ stream copy: True (Section 8)
+
+ +=======+===========+============================================+
+ | value | label | definition |
+ +=======+===========+============================================+
+ | 0 | Not | The data are not encrypted. |
+ | | encrypted | |
+ +-------+-----------+--------------------------------------------+
+ | 1 | DES | Data Encryption Standard (DES) [FIPS46-3]. |
+ | | | This value SHOULD be avoided. |
+ +-------+-----------+--------------------------------------------+
+ | 2 | 3DES | Triple Data Encryption Algorithm |
+ | | | [SP800-67]. This value SHOULD be avoided. |
+ +-------+-----------+--------------------------------------------+
+ | 3 | Twofish | Twofish Encryption Algorithm [Twofish]. |
+ +-------+-----------+--------------------------------------------+
+ | 4 | Blowfish | Blowfish Encryption Algorithm [Blowfish]. |
+ | | | This value SHOULD be avoided. |
+ +-------+-----------+--------------------------------------------+
+ | 5 | AES | Advanced Encryption Standard (AES) |
+ | | | [FIPS197]. |
+ +-------+-----------+--------------------------------------------+
+
+ Table 24: ContentEncAlgo Values
+
+5.1.4.1.31.10. ContentEncKeyID Element
+
+ id / type: 0x47E2 / binary
+ path: \Segment\Tracks\TrackEntry\ContentEncodings\ContentEncoding\Co
+ ntentEncryption\ContentEncKeyID
+ maxOccurs: 1
+ definition: For public key algorithms, the ID of the public key that
+ the data was encrypted with.
+ stream copy: True (Section 8)
+
+5.1.4.1.31.11. ContentEncAESSettings Element
+
+ id / type: 0x47E7 / master
+ path: \Segment\Tracks\TrackEntry\ContentEncodings\ContentEncoding\Co
+ ntentEncryption\ContentEncAESSettings
+ maxOccurs: 1
+ minver: 4
+ definition: Settings describing the encryption algorithm used.
+ notes: See Table 25.
+ stream copy: True (Section 8)
+
+ +===========+=================================================+
+ | attribute | note |
+ +===========+=================================================+
+ | maxOccurs | ContentEncAESSettings MUST NOT be set |
+ | | (maxOccurs=0) if ContentEncAlgo is not AES (5). |
+ +-----------+-------------------------------------------------+
+
+ Table 25: ContentEncAESSettings Implementation Notes
+
+5.1.4.1.31.12. AESSettingsCipherMode Element
+
+ id / type: 0x47E8 / uinteger
+ range: not 0 (1-18446744073709551615)
+ path: \Segment\Tracks\TrackEntry\ContentEncodings\ContentEncoding\Co
+ ntentEncryption\ContentEncAESSettings\AESSettingsCipherMode
+ minOccurs / maxOccurs: 1 / 1
+ minver: 4
+ definition: The AES cipher mode used in the encryption.
+ defined values: See Table 26. Additional values can be registered
+ in the "Matroska AES Cipher Modes" registry defined in
+ Section 27.4.
+ notes: See Table 27.
+ stream copy: True (Section 8)
+
+ +=======+=========+===================================+
+ | value | label | definition |
+ +=======+=========+===================================+
+ | 1 | AES-CTR | Counter [SP800-38A] |
+ +-------+---------+-----------------------------------+
+ | 2 | AES-CBC | Cipher Block Chaining [SP800-38A] |
+ +-------+---------+-----------------------------------+
+
+ Table 26: AESSettingsCipherMode Values
+
+ +===========+=================================================+
+ | attribute | note |
+ +===========+=================================================+
+ | maxOccurs | AESSettingsCipherMode MUST NOT be set |
+ | | (maxOccurs=0) if ContentEncAlgo is not AES (5). |
+ +-----------+-------------------------------------------------+
+
+ Table 27: AESSettingsCipherMode Implementation Notes
+
+5.1.5. Cues Element
+
+ id / type: 0x1C53BB6B / master
+ path: \Segment\Cues
+ minOccurs / maxOccurs: See Table 28 / 1
+ definition: A Top-Level Element to speed seeking access. All
+ entries are local to the Segment.
+ notes: See Table 28.
+
+ +===========+====================================================+
+ | attribute | note |
+ +===========+====================================================+
+ | minOccurs | This element SHOULD be set when the Segment is not |
+ | | transmitted as a live stream; see Section 23.2. |
+ +-----------+----------------------------------------------------+
+
+ Table 28: Cues Implementation Notes
+
+5.1.5.1. CuePoint Element
+
+ id / type: 0xBB / master
+ path: \Segment\Cues\CuePoint
+ minOccurs: 1
+ definition: Contains all information relative to a seek point in the
+ Segment.
+
+5.1.5.1.1. CueTime Element
+
+ id / type: 0xB3 / uinteger
+ path: \Segment\Cues\CuePoint\CueTime
+ minOccurs / maxOccurs: 1 / 1
+ definition: Absolute timestamp of the seek point, expressed in
+ Segment Ticks, which are based on TimestampScale; see
+ Section 11.1.
+
+5.1.5.1.2. CueTrackPositions Element
+
+ id / type: 0xB7 / master
+ path: \Segment\Cues\CuePoint\CueTrackPositions
+ minOccurs: 1
+ definition: Contains positions for different tracks corresponding to
+ the timestamp.
+
+5.1.5.1.2.1. CueTrack Element
+
+ id / type: 0xF7 / uinteger
+ range: not 0 (1-18446744073709551615)
+ path: \Segment\Cues\CuePoint\CueTrackPositions\CueTrack
+ minOccurs / maxOccurs: 1 / 1
+ definition: The track for which a position is given.
+
+5.1.5.1.2.2. CueClusterPosition Element
+
+ id / type: 0xF1 / uinteger
+ path: \Segment\Cues\CuePoint\CueTrackPositions\CueClusterPosition
+ minOccurs / maxOccurs: 1 / 1
+ definition: The Segment Position (Section 16) of the Cluster
+ containing the associated Block.
+
+5.1.5.1.2.3. CueRelativePosition Element
+
+ id / type: 0xF0 / uinteger
+ path: \Segment\Cues\CuePoint\CueTrackPositions\CueRelativePosition
+ maxOccurs: 1
+ minver: 4
+ definition: The relative position inside the Cluster of the
+ referenced SimpleBlock or BlockGroup with 0 being the first
+ possible position for an element inside that Cluster.
+
+5.1.5.1.2.4. CueDuration Element
+
+ id / type: 0xB2 / uinteger
+ path: \Segment\Cues\CuePoint\CueTrackPositions\CueDuration
+ maxOccurs: 1
+ minver: 4
+ definition: The duration of the block, expressed in Segment Ticks,
+ which are based on TimestampScale; see Section 11.1. If missing,
+ the track's DefaultDuration does not apply and no duration
+ information is available in terms of the cues.
+
+5.1.5.1.2.5. CueBlockNumber Element
+
+ id / type: 0x5378 / uinteger
+ range: not 0 (1-18446744073709551615)
+ path: \Segment\Cues\CuePoint\CueTrackPositions\CueBlockNumber
+ maxOccurs: 1
+ definition: Number of the Block in the specified Cluster.
+
+5.1.5.1.2.6. CueCodecState Element
+
+ id / type / default: 0xEA / uinteger / 0
+ path: \Segment\Cues\CuePoint\CueTrackPositions\CueCodecState
+ minOccurs / maxOccurs: 1 / 1
+ minver: 2
+ definition: The Segment Position (Section 16) of the Codec State
+ corresponding to this Cues element. 0 means that the data is taken
+ from the initial TrackEntry.
+
+5.1.5.1.2.7. CueReference Element
+
+ id / type: 0xDB / master
+ path: \Segment\Cues\CuePoint\CueTrackPositions\CueReference
+ minver: 2
+ definition: The Clusters containing the referenced Blocks.
+
+5.1.5.1.2.8. CueRefTime Element
+
+ id / type: 0x96 / uinteger
+ path: \Segment\Cues\CuePoint\CueTrackPositions\CueReference\CueRefTi
+ me
+ minOccurs / maxOccurs: 1 / 1
+ minver: 2
+ definition: Timestamp of the referenced Block, expressed in Segment
+ Ticks which is based on TimestampScale; see Section 11.1.
+
+5.1.6. Attachments Element
+
+ id / type: 0x1941A469 / master
+ path: \Segment\Attachments
+ maxOccurs: 1
+ definition: Contains attached files.
+
+5.1.6.1. AttachedFile Element
+
+ id / type: 0x61A7 / master
+ path: \Segment\Attachments\AttachedFile
+ minOccurs: 1
+ definition: An attached file.
+
+5.1.6.1.1. FileDescription Element
+
+ id / type: 0x467E / utf-8
+ path: \Segment\Attachments\AttachedFile\FileDescription
+ maxOccurs: 1
+ definition: A human-friendly name for the attached file.
+
+5.1.6.1.2. FileName Element
+
+ id / type: 0x466E / utf-8
+ path: \Segment\Attachments\AttachedFile\FileName
+ minOccurs / maxOccurs: 1 / 1
+ definition: Filename of the attached file.
+
+5.1.6.1.3. FileMediaType Element
+
+ id / type: 0x4660 / string
+ path: \Segment\Attachments\AttachedFile\FileMediaType
+ minOccurs / maxOccurs: 1 / 1
+ definition: Media type of the file following the format described in
+ [RFC6838].
+ stream copy: True (Section 8)
+
+5.1.6.1.4. FileData Element
+
+ id / type: 0x465C / binary
+ path: \Segment\Attachments\AttachedFile\FileData
+ minOccurs / maxOccurs: 1 / 1
+ definition: The data of the file.
+ stream copy: True (Section 8)
+
+5.1.6.1.5. FileUID Element
+
+ id / type: 0x46AE / uinteger
+ range: not 0 (1-18446744073709551615)
+ path: \Segment\Attachments\AttachedFile\FileUID
+ minOccurs / maxOccurs: 1 / 1
+ definition: UID representing the file, as random as possible.
+ stream copy: True (Section 8)
+
+5.1.7. Chapters Element
+
+ id / type: 0x1043A770 / master
+ path: \Segment\Chapters
+ maxOccurs: 1
+ recurring: True
+ definition: A system to define basic menus and partition data. For
+ more detailed information, see Section 20.
+
+5.1.7.1. EditionEntry Element
+
+ id / type: 0x45B9 / master
+ path: \Segment\Chapters\EditionEntry
+ minOccurs: 1
+ definition: Contains all information about a Segment edition.
+
+5.1.7.1.1. EditionUID Element
+
+ id / type: 0x45BC / uinteger
+ range: not 0 (1-18446744073709551615)
+ path: \Segment\Chapters\EditionEntry\EditionUID
+ maxOccurs: 1
+ definition: A UID that identifies the edition. It's useful for
+ tagging an edition.
+ stream copy: True (Section 8)
+
+5.1.7.1.2. EditionFlagDefault Element
+
+ id / type / default: 0x45DB / uinteger / 0
+ range: 0-1
+ path: \Segment\Chapters\EditionEntry\EditionFlagDefault
+ minOccurs / maxOccurs: 1 / 1
+ definition: Set to 1 if the edition SHOULD be used as the default
+ one.
+
+5.1.7.1.3. EditionFlagOrdered Element
+
+ id / type / default: 0x45DD / uinteger / 0
+ range: 0-1
+ path: \Segment\Chapters\EditionEntry\EditionFlagOrdered
+ minOccurs / maxOccurs: 1 / 1
+ definition: Set to 1 if the chapters can be defined multiple times
+ and the order to play them is enforced; see Section 20.1.3.
+
+5.1.7.1.4. ChapterAtom Element
+
+ id / type: 0xB6 / master
+ path: \Segment\Chapters\EditionEntry\+ChapterAtom
+ minOccurs: 1
+ recursive: True
+ definition: Contains the atom information to use as the chapter atom
+ (applies to all tracks).
+
+5.1.7.1.4.1. ChapterUID Element
+
+ id / type: 0x73C4 / uinteger
+ range: not 0 (1-18446744073709551615)
+ path: \Segment\Chapters\EditionEntry\+ChapterAtom\ChapterUID
+ minOccurs / maxOccurs: 1 / 1
+ definition: A UID that identifies the Chapter.
+ stream copy: True (Section 8)
+
+5.1.7.1.4.2. ChapterStringUID Element
+
+ id / type: 0x5654 / utf-8
+ path: \Segment\Chapters\EditionEntry\+ChapterAtom\ChapterStringUID
+ maxOccurs: 1
+ minver: 3
+ definition: A unique string ID that identifies the Chapter. For
+ example, it is used as the storage for cue identifier values
+ [WebVTT].
+
+5.1.7.1.4.3. ChapterTimeStart Element
+
+ id / type: 0x91 / uinteger
+ path: \Segment\Chapters\EditionEntry\+ChapterAtom\ChapterTimeStart
+ minOccurs / maxOccurs: 1 / 1
+ definition: Timestamp of the start of Chapter, expressed in Matroska
+ Ticks -- i.e., in nanoseconds; see Section 11.1.
+
+5.1.7.1.4.4. ChapterTimeEnd Element
+
+ id / type: 0x92 / uinteger
+ path: \Segment\Chapters\EditionEntry\+ChapterAtom\ChapterTimeEnd
+ minOccurs / maxOccurs: See Table 29 / 1
+ definition: Timestamp of the end of Chapter (timestamp excluded),
+ expressed in Matroska Ticks -- i.e., in nanoseconds; see
+ Section 11.1. The value MUST be greater than or equal to the
+ ChapterTimeStart of the same ChapterAtom.
+ usage notes: With the ChapterTimeEnd timestamp value being excluded,
+ it MUST take into account the duration of the last frame it
+ includes, especially for the ChapterAtom using the last frames of
+ the Segment.
+ notes: See Table 29.
+
+ +===========+====================================================+
+ | attribute | note |
+ +===========+====================================================+
+ | minOccurs | ChapterTimeEnd MUST be set (minOccurs=1) if the |
+ | | Edition is an ordered edition; see Section 20.1.3. |
+ | | If it's a Parent Chapter, see Section 20.2.3. |
+ +-----------+----------------------------------------------------+
+
+ Table 29: ChapterTimeEnd Implementation Notes
+
+5.1.7.1.4.5. ChapterFlagHidden Element
+
+ id / type / default: 0x98 / uinteger / 0
+ range: 0-1
+ path: \Segment\Chapters\EditionEntry\+ChapterAtom\ChapterFlagHidden
+ minOccurs / maxOccurs: 1 / 1
+ definition: Set to 1 if a chapter is hidden. Hidden chapters SHOULD
+ NOT be available to the user interface (but still be available to
+ Control Tracks; see Section 20.2.5 on Chapter flags).
+
+5.1.7.1.4.6. ChapterSegmentUUID Element
+
+ id / type: 0x6E67 / binary
+ length: 16
+ path: \Segment\Chapters\EditionEntry\+ChapterAtom\ChapterSegmentUUID
+ minOccurs / maxOccurs: See Table 30 / 1
+ definition: The SegmentUUID of another Segment to play during this
+ chapter.
+ usage notes: The value MUST NOT be the SegmentUUID value of the
+ Segment it belongs to.
+ notes: See Table 30.
+
+ +===========+==============================================+
+ | attribute | note |
+ +===========+==============================================+
+ | minOccurs | ChapterSegmentUUID MUST be set (minOccurs=1) |
+ | | if ChapterSegmentEditionUID is used; see |
+ | | Section 17.2 on Medium-Linking Segments. |
+ +-----------+----------------------------------------------+
+
+ Table 30: ChapterSegmentUUID Implementation Notes
+
+5.1.7.1.4.7. ChapterSegmentEditionUID Element
+
+ id / type: 0x6EBC / uinteger
+ range: not 0 (1-18446744073709551615)
+ path: \Segment\Chapters\EditionEntry\+ChapterAtom\ChapterSegmentEdit
+ ionUID
+ maxOccurs: 1
+ definition: The EditionUID to play from the Segment linked in
+ ChapterSegmentUUID. If ChapterSegmentEditionUID is undeclared,
+ then no Edition of the Linked Segment is used; see Section 17.2 on
+ Medium-Linking Segments.
+
+5.1.7.1.4.8. ChapterPhysicalEquiv Element
+
+ id / type: 0x63C3 / uinteger
+ path: \Segment\Chapters\EditionEntry\+ChapterAtom\ChapterPhysicalEqu
+ iv
+ maxOccurs: 1
+ definition: Specifies the physical equivalent of this ChapterAtom,
+ e.g., "DVD" (60) or "SIDE" (50); see Section 20.4 for a complete
+ list of values.
+
+5.1.7.1.4.9. ChapterDisplay Element
+
+ id / type: 0x80 / master
+ path: \Segment\Chapters\EditionEntry\+ChapterAtom\ChapterDisplay
+ definition: Contains all possible strings to use for the chapter
+ display.
+
+5.1.7.1.4.10. ChapString Element
+
+ id / type: 0x85 / utf-8
+ path: \Segment\Chapters\EditionEntry\+ChapterAtom\ChapterDisplay\Cha
+ pString
+ minOccurs / maxOccurs: 1 / 1
+ definition: Contains the string to use as the chapter atom.
+
+5.1.7.1.4.11. ChapLanguage Element
+
+ id / type / default: 0x437C / string / eng
+ path: \Segment\Chapters\EditionEntry\+ChapterAtom\ChapterDisplay\Cha
+ pLanguage
+ minOccurs: 1
+ definition: A language corresponding to the string, in the Matroska
+ languages form; see Section 12 on language codes. This element
+ MUST be ignored if a ChapLanguageBCP47 element is used within the
+ same ChapterDisplay element.
+
+5.1.7.1.4.12. ChapLanguageBCP47 Element
+
+ id / type: 0x437D / string
+ path: \Segment\Chapters\EditionEntry\+ChapterAtom\ChapterDisplay\Cha
+ pLanguageBCP47
+ minver: 4
+ definition: A language corresponding to the ChapString, in the form
+ defined in [RFC5646]; see Section 12 on language codes. If a
+ ChapLanguageBCP47 element is used, then any ChapLanguage and
+ ChapCountry elements used in the same ChapterDisplay MUST be
+ ignored.
+
+5.1.7.1.4.13. ChapCountry Element
+
+ id / type: 0x437E / string
+ path: \Segment\Chapters\EditionEntry\+ChapterAtom\ChapterDisplay\Cha
+ pCountry
+ definition: A country corresponding to the string, in the Matroska
+ countries form; see Section 13 on country codes. This element
+ MUST be ignored if a ChapLanguageBCP47 element is used within the
+ same ChapterDisplay element.
+
+5.1.7.1.4.14. ChapProcess Element
+
+ id / type: 0x6944 / master
+ path: \Segment\Chapters\EditionEntry\+ChapterAtom\ChapProcess
+ definition: Contains all the commands associated with the Atom.
+
+5.1.7.1.4.15. ChapProcessCodecID Element
+
+ id / type / default: 0x6955 / uinteger / 0
+ path: \Segment\Chapters\EditionEntry\+ChapterAtom\ChapProcess\ChapPr
+ ocessCodecID
+ minOccurs / maxOccurs: 1 / 1
+ definition: Contains the type of the codec used for processing.
+ defined values: See Table 31. Additional values can be registered
+ in the "Matroska Chapter Codec IDs" registry defined in
+ Section 27.14.
+
+ +=======+=================+============================+
+ | value | label | definition |
+ +=======+=================+============================+
+ | 0 | Matroska Script | Chapter commands using the |
+ | | | Matroska Script codec. |
+ +-------+-----------------+----------------------------+
+ | 1 | DVD-menu | Chapter commands using the |
+ | | | DVD-like codec. |
+ +-------+-----------------+----------------------------+
+
+ Table 31: ChapProcessCodecID Values
+
+5.1.7.1.4.16. ChapProcessPrivate Element
+
+ id / type: 0x450D / binary
+ path: \Segment\Chapters\EditionEntry\+ChapterAtom\ChapProcess\ChapPr
+ ocessPrivate
+ maxOccurs: 1
+ definition: Optional data attached to the ChapProcessCodecID
+ information. For ChapProcessCodecID = 1, it is the "DVD level"
+ equivalent; see Section 20.3 on DVD menus.
+
+5.1.7.1.4.17. ChapProcessCommand Element
+
+ id / type: 0x6911 / master
+ path: \Segment\Chapters\EditionEntry\+ChapterAtom\ChapProcess\ChapPr
+ ocessCommand
+ definition: Contains all the commands associated with the Atom.
+
+5.1.7.1.4.18. ChapProcessTime Element
+
+ id / type: 0x6922 / uinteger
+ path: \Segment\Chapters\EditionEntry\+ChapterAtom\ChapProcess\ChapPr
+ ocessCommand\ChapProcessTime
+ minOccurs / maxOccurs: 1 / 1
+ definition: Defines when the process command SHOULD be handled.
+ restrictions: See Table 32.
+
+ +=======+===============================+
+ | value | label |
+ +=======+===============================+
+ | 0 | during the whole chapter |
+ +-------+-------------------------------+
+ | 1 | before starting playback |
+ +-------+-------------------------------+
+ | 2 | after playback of the chapter |
+ +-------+-------------------------------+
+
+ Table 32: ChapProcessTime Values
+
+5.1.7.1.4.19. ChapProcessData Element
+
+ id / type: 0x6933 / binary
+ path: \Segment\Chapters\EditionEntry\+ChapterAtom\ChapProcess\ChapPr
+ ocessCommand\ChapProcessData
+ minOccurs / maxOccurs: 1 / 1
+ definition: Contains the command information. The data SHOULD be
+ interpreted depending on the ChapProcessCodecID value. For
+ ChapProcessCodecID = 1, the data correspond to the binary DVD cell
+ pre/post commands; see Section 20.3 on DVD menus.
+
+5.1.8. Tags Element
+
+ id / type: 0x1254C367 / master
+ path: \Segment\Tags
+ definition: Element containing metadata describing Tracks, Editions,
+ Chapters, Attachments, or the Segment as a whole. A list of valid
+ tags can be found in [MatroskaTags].
+
+5.1.8.1. Tag Element
+
+ id / type: 0x7373 / master
+ path: \Segment\Tags\Tag
+ minOccurs: 1
+ definition: A single metadata descriptor.
+
+5.1.8.1.1. Targets Element
+
+ id / type: 0x63C0 / master
+ path: \Segment\Tags\Tag\Targets
+ minOccurs / maxOccurs: 1 / 1
+ definition: Specifies which other elements the metadata represented
+ by the tag value applies to. If empty or omitted, then the tag
+ value describes everything in the Segment.
+
+5.1.8.1.1.1. TargetTypeValue Element
+
+ id / type / default: 0x68CA / uinteger / 50
+ range: not 0 (1-18446744073709551615)
+ path: \Segment\Tags\Tag\Targets\TargetTypeValue
+ minOccurs / maxOccurs: 1 / 1
+ definition: A number to indicate the logical level of the target.
+ defined values: See Table 33. Additional values can be registered
+ in the "Matroska Tags Target Types" registry defined in
+ Section 27.13.
+ usage notes: The TargetTypeValue values are meant to be compared.
+ Higher values MUST correspond to a logical level that contains the
+ lower logical level TargetTypeValue values.
+
+ +=======+==========================+================================+
+ | value | label | definition |
+ +=======+==========================+================================+
+ | 70 | COLLECTION | The highest hierarchical level |
+ | | | that tags can describe. |
+ +-------+--------------------------+--------------------------------+
+ | 60 | EDITION / ISSUE / | A list of lower levels grouped |
+ | | VOLUME / OPUS / | together. |
+ | | SEASON / SEQUEL | |
+ +-------+--------------------------+--------------------------------+
+ | 50 | ALBUM / OPERA / | The most common grouping level |
+ | | CONCERT / MOVIE / | of music and video (e.g., an |
+ | | EPISODE | episode for TV series). |
+ +-------+--------------------------+--------------------------------+
+ | 40 | PART / SESSION | When an album or episode has |
+ | | | different logical parts. |
+ +-------+--------------------------+--------------------------------+
+ | 30 | TRACK / SONG / | The common parts of an album |
+ | | CHAPTER | or movie. |
+ +-------+--------------------------+--------------------------------+
+ | 20 | SUBTRACK / | Corresponds to parts of a |
+ | | MOVEMENT / SCENE | track for audio, such as a |
+ | | | movement or scene in a movie. |
+ +-------+--------------------------+--------------------------------+
+ | 10 | SHOT | The lowest hierarchy found in |
+ | | | music or movies. |
+ +-------+--------------------------+--------------------------------+
+
+ Table 33: TargetTypeValue Values
+
+5.1.8.1.1.2. TargetType Element
+
+ id / type: 0x63CA / string
+ path: \Segment\Tags\Tag\Targets\TargetType
+ maxOccurs: 1
+ definition: An informational string that can be used to display the
+ logical level of the target, such as "ALBUM", "TRACK", "MOVIE",
+ "CHAPTER", etc.
+ restrictions: See Table 34.
+
+ +============+====================+
+ | value | label |
+ +============+====================+
+ | COLLECTION | TargetTypeValue 70 |
+ +------------+--------------------+
+ | EDITION | TargetTypeValue 60 |
+ +------------+--------------------+
+ | ISSUE | TargetTypeValue 60 |
+ +------------+--------------------+
+ | VOLUME | TargetTypeValue 60 |
+ +------------+--------------------+
+ | OPUS | TargetTypeValue 60 |
+ +------------+--------------------+
+ | SEASON | TargetTypeValue 60 |
+ +------------+--------------------+
+ | SEQUEL | TargetTypeValue 60 |
+ +------------+--------------------+
+ | ALBUM | TargetTypeValue 50 |
+ +------------+--------------------+
+ | OPERA | TargetTypeValue 50 |
+ +------------+--------------------+
+ | CONCERT | TargetTypeValue 50 |
+ +------------+--------------------+
+ | MOVIE | TargetTypeValue 50 |
+ +------------+--------------------+
+ | EPISODE | TargetTypeValue 50 |
+ +------------+--------------------+
+ | PART | TargetTypeValue 40 |
+ +------------+--------------------+
+ | SESSION | TargetTypeValue 40 |
+ +------------+--------------------+
+ | TRACK | TargetTypeValue 30 |
+ +------------+--------------------+
+ | SONG | TargetTypeValue 30 |
+ +------------+--------------------+
+ | CHAPTER | TargetTypeValue 30 |
+ +------------+--------------------+
+ | SUBTRACK | TargetTypeValue 20 |
+ +------------+--------------------+
+ | MOVEMENT | TargetTypeValue 20 |
+ +------------+--------------------+
+ | SCENE | TargetTypeValue 20 |
+ +------------+--------------------+
+ | SHOT | TargetTypeValue 10 |
+ +------------+--------------------+
+
+ Table 34: TargetType Values
+
+5.1.8.1.1.3. TagTrackUID Element
+
+ id / type / default: 0x63C5 / uinteger / 0
+ path: \Segment\Tags\Tag\Targets\TagTrackUID
+ definition: A UID that identifies the Track(s) that the tags belong
+ to.
+ usage notes: If the value is 0 at this level, the tags apply to all
+ tracks in the Segment. If set to any other value, it MUST match
+ the TrackUID value of a track found in this Segment.
+
+5.1.8.1.1.4. TagEditionUID Element
+
+ id / type / default: 0x63C9 / uinteger / 0
+ path: \Segment\Tags\Tag\Targets\TagEditionUID
+ definition: A UID that identifies the EditionEntry(s) that the tags
+ belong to.
+ usage notes: If the value is 0 at this level, the tags apply to all
+ editions in the Segment. If set to any other value, it MUST match
+ the EditionUID value of an edition found in this Segment.
+
+5.1.8.1.1.5. TagChapterUID Element
+
+ id / type / default: 0x63C4 / uinteger / 0
+ path: \Segment\Tags\Tag\Targets\TagChapterUID
+ definition: A UID that identifies the Chapter(s) that the tags
+ belong to.
+ usage notes: If the value is 0 at this level, the tags apply to all
+ chapters in the Segment. If set to any other value, it MUST match
+ the ChapterUID value of a chapter found in this Segment.
+
+5.1.8.1.1.6. TagAttachmentUID Element
+
+ id / type / default: 0x63C6 / uinteger / 0
+ path: \Segment\Tags\Tag\Targets\TagAttachmentUID
+ definition: A UID that identifies the Attachment(s) that the tags
+ belong to.
+ usage notes: If the value is 0 at this level, the tags apply to all
+ the attachments in the Segment. If set to any other value, it
+ MUST match the FileUID value of an attachment found in this
+ Segment.
+
+5.1.8.1.2. SimpleTag Element
+
+ id / type: 0x67C8 / master
+ path: \Segment\Tags\Tag\+SimpleTag
+ minOccurs: 1
+ recursive: True
+ definition: Contains general information about the target.
+
+5.1.8.1.2.1. TagName Element
+
+ id / type: 0x45A3 / utf-8
+ path: \Segment\Tags\Tag\+SimpleTag\TagName
+ minOccurs / maxOccurs: 1 / 1
+ definition: The name of the tag value that is going to be stored.
+
+5.1.8.1.2.2. TagLanguage Element
+
+ id / type / default: 0x447A / string / und
+ path: \Segment\Tags\Tag\+SimpleTag\TagLanguage
+ minOccurs / maxOccurs: 1 / 1
+ definition: Specifies the language of the specified tag in the
+ Matroska languages form; see Section 12 on language codes. This
+ element MUST be ignored if the TagLanguageBCP47 element is used
+ within the same SimpleTag element.
+
+5.1.8.1.2.3. TagLanguageBCP47 Element
+
+ id / type: 0x447B / string
+ path: \Segment\Tags\Tag\+SimpleTag\TagLanguageBCP47
+ maxOccurs: 1
+ minver: 4
+ definition: The language used in the TagString, in the form defined
+ in [RFC5646]; see Section 12 on language codes. If this element
+ is used, then any TagLanguage elements used in the same SimpleTag
+ MUST be ignored.
+
+5.1.8.1.2.4. TagDefault Element
+
+ id / type / default: 0x4484 / uinteger / 1
+ range: 0-1
+ path: \Segment\Tags\Tag\+SimpleTag\TagDefault
+ minOccurs / maxOccurs: 1 / 1
+ definition: A boolean value to indicate if this is the default/
+ original language to use for the given tag.
+
+5.1.8.1.2.5. TagString Element
+
+ id / type: 0x4487 / utf-8
+ path: \Segment\Tags\Tag\+SimpleTag\TagString
+ maxOccurs: 1
+ definition: The tag value.
+
+5.1.8.1.2.6. TagBinary Element
+
+ id / type: 0x4485 / binary
+ path: \Segment\Tags\Tag\+SimpleTag\TagBinary
+ maxOccurs: 1
+ definition: The tag value if it is binary. Note that this cannot be
+ used in the same SimpleTag as TagString.
+
+6. Matroska Element Ordering
+
+ With the exceptions of the EBML Header and the CRC-32 element, the
+ EBML specification [RFC8794] does not require any particular storage
+ order for elements. However, this specification defines mandates and
+ recommendations for ordering certain elements to facilitate better
+ playback, seeking, and editing efficiency. This section describes
+ and offers rationale for ordering requirements and recommendations
+ for Matroska.
+
+6.1. Top-Level Elements
+
+ The Info element is the only REQUIRED Top-Level Element in a Matroska
+ file. To be playable, Matroska MUST also contain at least one Tracks
+ element and Cluster element. The first Info element and the first
+ Tracks element either MUST be stored before the first Cluster element
+ or SHALL both be referenced by a SeekHead element occurring before
+ the first Cluster element.
+
+ All Top-Level Elements MUST use a 4-octet EBML Element ID.
+
+ When using Medium Linking, chapters are used to reference other
+ Segments to play in a given order (see Section 17.2). A Segment
+ containing these Linked Chapters does not require a Tracks element or
+ a Cluster element.
+
+ It is possible to edit a Matroska file after it has been created.
+ For example, chapters, tags, or attachments can be added. When new
+ Top-Level Elements are added to a Matroska file, the SeekHead
+ element(s) MUST be updated so that the SeekHead element(s) itemizes
+ the identity and position of all Top-Level Elements.
+
+ Editing, removing, or adding elements to a Matroska file often
+ requires that some existing elements be voided or extended.
+ Transforming the existing elements into Void elements as padding can
+ be used as a method to avoid moving large amounts of data around.
+
+6.2. CRC-32
+
+ As noted by the EBML specification [RFC8794], if a CRC-32 element is
+ used, then the CRC-32 element MUST be the first ordered element
+ within its Parent Element.
+
+ In Matroska, all Top-Level Elements of an EBML Document SHOULD
+ include a CRC-32 element as their first Child Element. The Segment
+ element, which is the Root Element, SHOULD NOT have a CRC-32 element.
+
+6.3. SeekHead
+
+ If used, the first SeekHead element MUST be the first non-CRC-32
+ Child element of the Segment element. If a second SeekHead element
+ is used, then the first SeekHead element MUST reference the identity
+ and position of the second SeekHead element.
+
+ Additionally, the second SeekHead element MUST only reference Cluster
+ elements and not any other Top-Level Element already contained within
+ the first SeekHead element.
+
+ The second SeekHead element MAY be stored in any order relative to
+ the other Top-Level Elements. Whether one or two SeekHead elements
+ are used, the SeekHead element(s) MUST collectively reference the
+ identity and position of all Top-Level Elements except for the first
+ SeekHead element.
+
+6.4. Cues (Index)
+
+ The Cues element is RECOMMENDED to optimize seeking access in
+ Matroska. It is programmatically simpler to add the Cues element
+ after all Cluster elements have been written because this does not
+ require a prediction of how much space to reserve before writing the
+ Cluster elements. However, storing the Cues element before the
+ Cluster elements can provide some seeking advantages. If the Cues
+ element is present, then it SHOULD either be stored before the first
+ Cluster element or be referenced by a SeekHead element.
+
+6.5. Info
+
+ The first Info element SHOULD occur before the first Tracks element
+ and first Cluster element except when referenced by a SeekHead
+ element.
+
+6.6. Chapters Element
+
+ The Chapters element SHOULD be placed before the Cluster element(s).
+ The Chapters element can be used during playback even if the user
+ does not need to seek. It immediately gives the user information
+ about what section is being read and what other sections are
+ available.
+
+ In the case of Ordered Chapters, it is RECOMMENDED to evaluate the
+ logical linking before playing. The Chapters element SHOULD be
+ placed before the first Tracks element and after the first Info
+ element.
+
+6.7. Attachments
+
+ The Attachments element is not intended to be used by default when
+ playing the file but could contain information relevant to the
+ content, such as cover art or fonts. Cover art is useful even before
+ the file is played, and fonts could be needed before playback starts
+ for the initialization of subtitles. The Attachments element MAY be
+ placed before the first Cluster element; however, if the Attachments
+ element is likely to be edited, then it SHOULD be placed after the
+ last Cluster element.
+
+6.8. Tags
+
+ The Tags element is most subject to changes after the file was
+ originally created. For easier editing, the Tags element can be
+ placed at the end of the Segment element, even after the Attachments
+ element. On the other hand, it is inconvenient to have to seek in
+ the Segment for tags, especially for network streams; thus, it's
+ better if the Tags element is found early in the stream. When
+ editing the Tags element, the original Tags element at the beginning
+ can be overwritten with a Void element and a new Tags element written
+ at the end of the Segment element. The file and Segment sizes will
+ only marginally change.
+
+7. Matroska Versioning
+
+ Matroska is based on the principle that a reading application does
+ not have to support 100% of the specifications in order to be able to
+ play the file. Therefore, a Matroska file contains version
+ indicators that tell a reading application what to expect.
+
+ It is possible and valid to have the version fields indicate that the
+ file contains Matroska elements from a higher specification version
+ number while signaling that a reading application MUST only support a
+ lower version number properly in order to play it back (possibly with
+ a reduced feature set).
+
+ The EBML Header of each Matroska document informs the reading
+ application on what version of Matroska to expect. The elements
+ within the EBML Header with jurisdiction over this information are
+ DocTypeVersion and DocTypeReadVersion.
+
+ DocTypeVersion MUST be equal to or greater than the highest Matroska
+ version number of any element present in the Matroska file. For
+ example, a file using the SimpleBlock element (Section 5.1.3.4) MUST
+ have a DocTypeVersion equal to or greater than 2. A file containing
+ CueRelativePosition elements (Section 5.1.5.1.2.3) MUST have a
+ DocTypeVersion equal to or greater than 4.
+
+ The DocTypeReadVersion MUST contain the minimum version number that a
+ reading application can minimally support in order to play the file
+ back -- optionally with a reduced feature set. For example, if a
+ file contains only elements of version 2 or lower except for
+ CueRelativePosition (which is a version 4 Matroska element), then
+ DocTypeReadVersion SHOULD still be set to 2 and not 4 because
+ evaluating CueRelativePosition is not necessary for standard playback
+ -- it makes seeking more precise if used.
+
+ A reading application supporting Matroska version V MUST NOT refuse
+ to read a file with DocReadTypeVersion equal to or lower than V, even
+ if DocTypeVersion is greater than V.
+
+ A reading application supporting at least Matroska version V and
+ reading a file whose DocTypeReadVersion field is equal to or lower
+ than V MUST skip Matroska/EBML elements it encounters but does not
+ know about if that unknown element fits into the size constraints set
+ by the current Parent Element.
+
+8. Stream Copy
+
+ It is sometimes necessary to create a Matroska file from another
+ Matroska file, for example, to add subtitles in a language or to edit
+ out a portion of the content. Some values from the original Matroska
+ file need to be kept the same in the destination file. For example,
+ the SamplingFrequency of an audio track wouldn't change between the
+ two files. Some other values may change between the two files, for
+ example, the TrackNumber of an audio track when another track has
+ been added.
+
+ An element is marked with a property "stream copy: True" when the
+ values of that element need to be kept identical between the source
+ and destination files. If that property is not set, elements may or
+ may not keep the same value between the source and destination files.
+
+9. DefaultDecodedFieldDuration
+
+ The DefaultDecodedFieldDuration element can signal to the displaying
+ application how often fields of a video sequence will be available
+ for displaying. It can be used for both interlaced and progressive
+ content.
+
+ If the video sequence is signaled as interlaced
+ (Section 5.1.4.1.28.1), then DefaultDecodedFieldDuration equals the
+ period between two successive fields at the output of the decoding
+ process. For video sequences signaled as progressive,
+ DefaultDecodedFieldDuration is half of the period between two
+ successive frames at the output of the decoding process.
+
+ These values are valid at the end of the decoding process before
+ post-processing (such as deinterlacing or inverse telecine) is
+ applied.
+
+ Examples:
+
+ * Blu-ray movie: 1000000000 ns/(48/1.001) = 20854167 ns
+
+ * PAL broadcast/DVD: 1000000000 ns/(50/1.000) = 20000000 ns
+
+ * N/ATSC broadcast: 1000000000 ns/(60/1.001) = 16683333 ns
+
+ * Hard-telecined DVD: 1000000000 ns/(60/1.001) = 16683333 ns (60
+ encoded interlaced fields per second)
+
+ * Soft-telecined DVD: 1000000000 ns/(60/1.001) = 16683333 ns (48
+ encoded interlaced fields per second, with "repeat_first_field =
+ 1")
+
+10. Cluster Blocks
+
+ Frames using references SHOULD be stored in "coding order" (i.e., the
+ references first and then the frames referencing them). A
+ consequence is that timestamps might not be consecutive. However, a
+ frame with a past timestamp MUST reference a frame already known;
+ otherwise, it is considered bad/void.
+
+ Matroska has two similar ways to store frames in a block:
+
+ * in a Block that is contained inside a BlockGroup
+
+ * in a SimpleBlock that is directly in the Cluster
+
+ The SimpleBlock is usually preferred unless some extra elements of
+ the BlockGroup need to be used. A Matroska Reader MUST support both
+ types of blocks.
+
+ Each block contains the same parts in the following order:
+
+ * a variable-length header
+
+ * the lacing information (optional)
+
+ * the consecutive frame(s)
+
+ The block header starts with the number of the Track it corresponds
+ to. The value MUST correspond to the TrackNumber (Section 5.1.4.1.1)
+ of a TrackEntry of the Segment.
+
+ The TrackNumber is coded using the Variable-Size Integer (VINT)
+ mechanism described in Section 4 of [RFC8794]. To save space, the
+ shortest VINT form SHOULD be used. The value can be coded using up
+ to 8 octets. This is the only element with a variable size in the
+ block header.
+
+ The timestamp is expressed in Track Ticks; see Section 11.1. The
+ value is stored as a signed value on 16 bits.
+
+10.1. Block Structure
+
+ This section describes the binary data contained in the Block element
+ (Section 5.1.3.5.1). Bit 0 is the most significant bit.
+
+ As the TrackNumber size can vary between 1 and 8 octets, there are 8
+ different sizes for the Block header. The definitions for
+ TrackNumber sizes of 1 and 2 are provided; the other variants can be
+ deduced by extending the size of the TrackNumber by multiples of 8
+ bits.
+
+ 0 1 2 3
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | | | |I|LAC|U|
+ | Track Number | Timestamp | Rsvrd |N|ING|N|
+ | | | |V| |U|
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Figure 11: Block Header with 1-Octet TrackNumber
+
+ 0 1 2 3
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Track Number | Timestamp |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | |I|LAC|U|
+ | Rsvrd |N|ING|N| ...
+ | |V| |U|
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Figure 12: Block Header with 2-Octet TrackNumber
+
+ where:
+
+ Track Number: 8, 16, 24, 32, 40, 48, or 56 bits. An EBML VINT-coded
+ track number.
+
+ Timestamp: 16 bits. Signed timestamp in Track Ticks.
+
+ Rsvrd: 4 bits. Reserved bits MUST be set to 0.
+
+ INV: 1 bit. Invisible; The codec SHOULD decode this frame but not
+ display it.
+
+ LACING: 2 bits. Uses lacing mode.
+
+ 00b: no lacing (Section 10.3.1)
+ 01b: Xiph lacing (Section 10.3.2)
+ 11b: EBML lacing (Section 10.3.3)
+ 10b: fixed-size lacing (Section 10.3.4)
+
+ UNU: 1 bit. Unused bit.
+
+ The remaining data in the Block corresponds to the lacing data and
+ frames usage as described in each respective lacing mode (see
+ Section 10.3).
+
+10.2. SimpleBlock Structure
+
+ This section describes the binary data contained in the SimpleBlock
+ element (Section 5.1.3.4). Bit 0 is the most significant bit.
+
+ The SimpleBlock structure is inspired by the Block structure; see
+ Section 10.1. The main differences are the added Keyframe flag and
+ Discardable flag. Otherwise, everything is the same.
+
+ As the TrackNumber size can vary between 1 and 8 octets, there are 8
+ different sizes for the SimpleBlock header. The definitions for
+ TrackNumber sizes of 1 and 2 are provided; the other variants can be
+ deduced by extending the size of the TrackNumber by multiples of 8
+ bits.
+
+ 0 1 2 3
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | | |K| |I|LAC|D|
+ | Track Number | Timestamp |E|Rsvrd|N|ING|I|
+ | | |Y| |V| |S|
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Figure 13: SimpleBlock Header with 1-Octet TrackNumber
+
+ 0 1 2 3
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Track Number | Timestamp |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ |K| |I|LAC|D|
+ |E|Rsvrd|N|ING|I| ...
+ |Y| |V| |S|
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Figure 14: SimpleBlock Header with 2-Octet TrackNumber
+
+ where:
+
+ Track Number: 8, 16, 24, 32, 40, 48, or 56 bits. An EBML VINT-coded
+ track number.
+
+ Timestamp: 16 bits. Signed timestamp in Track Ticks.
+
+ KEY: 1 bit. Keyframe; Set when the Block contains only keyframes.
+
+ Rsvrd: 3 bits. Reserved bits MUST be set to 0.
+
+ INV: 1 bit. Invisible; the codec SHOULD decode this frame but not
+ display it.
+
+ LACING: 2 bits. Uses lacing mode.
+
+ 00b: no lacing (Section 10.3.1)
+ 01b: Xiph lacing (Section 10.3.2)
+ 11b: EBML lacing (Section 10.3.3)
+ 10b: fixed-size lacing (Section 10.3.4)
+
+ DIS: 1 bit. Discardable; The frames of the Block can be discarded
+ during playing if needed.
+
+ The remaining data in the SimpleBlock corresponds to the lacing data
+ and frames usage as described in each respective lacing mode (see
+ Section 10.3).
+
+10.3. Block Lacing
+
+ Lacing is a mechanism to save space when storing data. It is
+ typically used for small blocks of data (referred to as frames in
+ Matroska). It packs multiple frames into a single Block or
+ SimpleBlock.
+
+ Lacing MUST NOT be used to store a single frame in a Block or
+ SimpleBlock.
+
+ There are three types of lacing:
+
+ * Xiph, which is inspired by what is found in the Ogg container
+ [RFC3533]
+
+ * EBML, which is the same with sizes coded differently
+
+ * Fixed-size, where the size is not coded
+
+ When lacing is not used, i.e., to store a single frame, the lacing
+ bits (bits 5 and 6) of the Block or SimpleBlock MUST be set to zero.
+
+ For example, a user wants to store three frames of the same track.
+ The first frame is 800 octets long, the second is 500 octets long,
+ and the third is 1000 octets long. Because these frames are small,
+ they can be stored in a lace to save space.
+
+ It is possible to not use lacing at all and just store a single frame
+ without any extra data. When the FlagLacing (Section 5.1.4.1.12) is
+ set to 0, all blocks of that track MUST NOT use lacing.
+
+10.3.1. No Lacing
+
+ When no lacing is used, the number of frames in the lace is omitted,
+ and only one frame can be stored in the Block. The LACING bits of
+ the Block Header flags are set to 00b.
+
+ The Block for an 800-octet frame is as follows:
+
+ +=============+=========+===================+
+ | Block Octet | Value | Description |
+ +=============+=========+===================+
+ | 4-803 | <frame> | Single frame data |
+ +-------------+---------+-------------------+
+
+ Table 35: No Lacing
+
+ When a Block contains a single frame, it MUST use this "no lacing"
+ mode.
+
+10.3.2. Xiph Lacing
+
+ The Xiph lacing uses the same coding of size as found in the Ogg
+ container [RFC3533]. The LACING bits of the Block Header flags are
+ set to 01b.
+
+ The Block data with laced frames is stored as follows:
+
+ * Lacing Head on 1 Octet: Number of frames in the lace minus 1.
+
+ * Lacing size of each frame except the last one.
+
+ * Binary data of each frame consecutively.
+
+ The lacing size is split into 255 values, stored as unsigned octets
+ -- for example, 500 is coded 255;245 or [0xFF 0xF5]. A frame with a
+ size multiple of 255 is coded with a 0 at the end of the size -- for
+ example, 765 is coded 255;255;255;0 or [0xFF 0xFF 0xFF 0x00].
+
+ The size of the last frame is deduced from the size remaining in the
+ Block after the other frames.
+
+ Because large sizes result in large coding of the sizes, it is
+ RECOMMENDED to use Xiph lacing only with small frames.
+
+ In our example, the 800-, 500-, and 1000-octet frames are stored with
+ Xiph lacing in a Block as follows:
+
+ +==============+=====================+==========================+
+ | Block Octets | Value | Description |
+ +==============+=====================+==========================+
+ | 4 | 0x02 | Number of frames minus 1 |
+ +--------------+---------------------+--------------------------+
+ | 5-8 | 0xFF 0xFF 0xFF 0x23 | Size of the first frame |
+ | | | (255;255;255;35) |
+ +--------------+---------------------+--------------------------+
+ | 9-10 | 0xFF 0xF5 | Size of the second frame |
+ | | | (255;245) |
+ +--------------+---------------------+--------------------------+
+ | 11-810 | | First frame data |
+ +--------------+---------------------+--------------------------+
+ | 811-1310 | | Second frame data |
+ +--------------+---------------------+--------------------------+
+ | 1311-2310 | | Third frame data |
+ +--------------+---------------------+--------------------------+
+
+ Table 36: Xiph Lacing Example
+
+ The Block is 2311 octets, and the last frame starts at 1311, so we
+ can deduce that the size of the last frame is 2311 - 1311 = 1000.
+
+10.3.3. EBML Lacing
+
+ The EBML lacing encodes the frame size with an EBML-like encoding
+ [RFC8794]. The LACING bits of the Block Header flags are set to 11b.
+
+ The Block data with laced frames is stored as follows:
+
+ * Lacing Head on 1 Octet: Number of frames in the lace minus 1.
+
+ * Lacing size of each frame except the last one.
+
+ * Binary data of each frame consecutively.
+
+ The first frame size is encoded as an EBML VINT value. The remaining
+ frame sizes are encoded as signed values using the difference between
+ the frame size and the previous frame size. These signed values are
+ encoded as VINT, with a mapping from signed to unsigned numbers.
+ Decoding the unsigned number stored in the VINT to a signed number is
+ done by subtracting 2^((7*n)-1)-1, where n is the octet size of the
+ VINT.
+
+ +===================================+======================+
+ | Bit Representation of Signed VINT | Possible Value Range |
+ +===================================+======================+
+ | 1xxx xxxx | 2^7 values from |
+ | | -(2^6-1) to 2^6 |
+ +-----------------------------------+----------------------+
+ | 01xx xxxx xxxx xxxx | 2^14 values from |
+ | | -(2^13-1) to 2^13 |
+ +-----------------------------------+----------------------+
+ | 001x xxxx xxxx xxxx xxxx xxxx | 2^21 values from |
+ | | -(2^20-1) to 2^20 |
+ +-----------------------------------+----------------------+
+ | 0001 xxxx xxxx xxxx xxxx xxxx | 2^28 values from |
+ | xxxx xxxx | -(2^27-1) to 2^27 |
+ +-----------------------------------+----------------------+
+ | 0000 1xxx xxxx xxxx xxxx xxxx | 2^35 values from |
+ | xxxx xxxx xxxx xxxx | -(2^34-1) to 2^34 |
+ +-----------------------------------+----------------------+
+
+ Table 37: EBML Lacing Signed VINT Bits Usage
+
+ In our example, the 800-, 500-, and 1000-octet frames are stored with
+ EBML lacing in a Block as follows:
+
+ +==============+===========+=====================================+
+ | Block Octets | Value | Description |
+ +==============+===========+=====================================+
+ | 4 | 0x02 | Number of frames minus 1 |
+ +--------------+-----------+-------------------------------------+
+ | 5-6 | 0x43 0x20 | Size of the first frame (800 = |
+ | | | 0x320 + 0x4000) |
+ +--------------+-----------+-------------------------------------+
+ | 7-8 | 0x5E 0xD3 | Size of the second frame (500 - 800 |
+ | | | = -300 = - 0x12C + 0x1FFF + 0x4000) |
+ +--------------+-----------+-------------------------------------+
+ | 8-807 | <frame1> | First frame data |
+ +--------------+-----------+-------------------------------------+
+ | 808-1307 | <frame2> | Second frame data |
+ +--------------+-----------+-------------------------------------+
+ | 1308-2307 | <frame3> | Third frame data |
+ +--------------+-----------+-------------------------------------+
+
+ Table 38: EBML Lacing Example
+
+ The Block is 2308 octets, and the last frame starts at 1308, so we
+ can deduce that the size of the last frame is 2308 - 1308 = 1000.
+
+10.3.4. Fixed-size Lacing
+
+ Fixed-size lacing doesn't store the frame size; rather, it only
+ stores the number of frames in the lace. Each frame MUST have the
+ same size. The frame size of each frame is deduced from the total
+ size of the Block. The LACING bits of the Block Header flags are set
+ to 10b.
+
+ The Block data with laced frames is stored as follows:
+
+ * Lacing Head on 1 Octet: Number of frames in the lace minus 1.
+
+ * Binary data of each frame consecutively.
+
+ For example, for three frames that are 800 octets each:
+
+ +==============+==========+==========================+
+ | Block Octets | Value | Description |
+ +==============+==========+==========================+
+ | 4 | 0x02 | Number of frames minus 1 |
+ +--------------+----------+--------------------------+
+ | 5-804 | <frame1> | First frame data |
+ +--------------+----------+--------------------------+
+ | 805-1604 | <frame2> | Second frame data |
+ +--------------+----------+--------------------------+
+ | 1605-2404 | <frame3> | Third frame data |
+ +--------------+----------+--------------------------+
+
+ Table 39: Fixed-Size Lacing Example
+
+ This gives a Block of 2405 octets. When reading the Block, we find
+ that there are three frames (Octet 4). The data start at Octet 5, so
+ the size of each frame is (2405 - 5) / 3 = 800.
+
+10.3.5. Laced Frames Timestamp
+
+ A Block only contains a single timestamp value. But when lacing is
+ used, it contains more than one frame. Each frame originally has its
+ own timestamp, or Presentation Timestamp (PTS). That timestamp
+ applies to the first frame in the lace.
+
+ In the lace, each frame after the first one has an underdetermined
+ timestamp. However, each of these frames MUST be contiguous -- i.e.,
+ the decoded data MUST NOT contain any gap between them. If there is
+ a gap in the stream, the frames around the gap MUST NOT be in the
+ same Block.
+
+ Lacing is only useful for small contiguous data to save space. This
+ is usually the case for audio tracks and not the case for video
+ (which use a lot of data) or subtitle tracks (which have long gaps).
+ For audio, there is usually a fixed output sampling frequency for the
+ whole track, so the decoder should be able to recover the timestamp
+ of each sample, knowing each output sample is contiguous with a fixed
+ frequency. For subtitles, this is usually not the case, so lacing
+ SHOULD NOT be used.
+
+10.4. Random Access Points
+
+ Random Access Points (RAPs) are positions where the parser can seek
+ to and start playback without decoding what was before. In Matroska,
+ BlockGroups and SimpleBlocks can be RAPs. To seek to these elements,
+ it is still necessary to seek to the Cluster containing them, read
+ the Cluster Timestamp, and start playback from the BlockGroup or
+ SimpleBlock that is a RAP.
+
+ Because a Matroska File is usually composed of multiple tracks
+ playing at the same time -- video, audio, and subtitles -- to seek
+ properly to a RAP, each selected track must be taken into account.
+ Usually, all audio and subtitle BlockGroups or SimpleBlocks are RAPs.
+ They are independent of each other and can be played randomly.
+
+ On the other hand, video tracks often use references to previous and
+ future frames for better coding efficiency. Frames with such
+ references MUST either contain one or more ReferenceBlock elements in
+ their BlockGroup or MUST be marked as non-keyframe in a SimpleBlock;
+ see Section 10.2.
+
+ <Cluster>
+ <Timestamp>123456</Timestamp>
+ <BlockGroup>
+ <!-- References a Block 40 Track Ticks before this one -->
+ <ReferenceBlock>-40</ReferenceBlock>
+ <Block/>
+ </BlockGroup>
+ ...
+ </Cluster>
+
+ Figure 15: BlockGroup with a Frame That References Another Frame,
+ with the EBML Tree Shown as XML
+
+ <Cluster>
+ <Timestamp>123456</Timestamp>
+ <SimpleBlock/> (octet 3 bit 0 not set)
+ ...
+ </Cluster>
+
+ Figure 16: SimpleBlock with a Frame That References Another
+ Frame, with the EBML Tree Shown as XML
+
+ Frames that are RAPs (i.e., frames that don't depend on other frames)
+ MUST set the keyframe flag if they are in a SimpleBlock or their
+ parent BlockGroup MUST NOT contain a ReferenceBlock.
+
+ <Cluster>
+ <Timestamp>123456</Timestamp>
+ <BlockGroup>
+ <!-- No ReferenceBlock allowed in this BlockGroup -->
+ <Block/>
+ </BlockGroup>
+ ...
+ </Cluster>
+
+ Figure 17: BlockGroup with a Frame That References No Other
+ Frame, with the EBML Tree Shown as XML
+
+ <Cluster>
+ <Timestamp>123456</Timestamp>
+ <SimpleBlock/> (octet 3 bit 0 set)
+ ...
+ </Cluster>
+
+ Figure 18: SimpleBlock with a Frame That References No Other
+ Frame, with the EBML Tree Shown as XML
+
+ There may be cases where the use of BlockGroup is necessary, as the
+ frame may need a BlockDuration, BlockAdditions, CodecState, or
+ DiscardPadding element. For those cases, a SimpleBlock MUST NOT be
+ used; the reference information SHOULD be recovered for non-RAP
+ frames.
+
+ <Cluster>
+ <Timestamp>123456</Timestamp>
+ <SimpleBlock/> (octet 3 bit 0 not set)
+ ...
+ </Cluster>
+
+ Figure 19: SimpleBlock with a Frame That References Another
+ Frame, with the EBML Tree Shown as XML
+
+ <Cluster>
+ <Timestamp>123456</Timestamp>
+ <BlockGroup>
+ <!-- ReferenceBlock value recovered based on the codec -->
+ <ReferenceBlock>-40</ReferenceBlock>
+ <BlockDuration>20</BlockDuration>
+ <Block/>
+ </BlockGroup>
+ ...
+ </Cluster>
+
+ Figure 20: Same Frame That References Another Frame Put inside a
+ BlockGroup to Add BlockDuration, with the EBML Tree Shown as XML
+
+ When a frame in a BlockGroup is not a RAP, the BlockGroup MUST
+ contain at least a ReferenceBlock. The ReferenceBlocks MUST be used
+ in one of the following ways:
+
+ * each reference frame listed as a ReferenceBlock,
+
+ * some referenced frames listed as a ReferenceBlock, even if the
+ timestamp value is accurate, or
+
+ * one ReferenceBlock with the timestamp value "0" corresponding to a
+ self or unknown reference.
+
+ The lack of ReferenceBlock would mean such a frame is a RAP, and
+ seeking on that frame that actually depends on other frames may
+ create a bogus output or even crash.
+
+ <Cluster>
+ <Timestamp>123456</Timestamp>
+ <BlockGroup>
+ <!-- ReferenceBlock value not recovered from the codec -->
+ <ReferenceBlock>0</ReferenceBlock>
+ <BlockDuration>20</BlockDuration>
+ <Block/>
+ </BlockGroup>
+ ...
+ </Cluster>
+
+ Figure 21: Same Frame That References Another Frame Put inside a
+ BlockGroup, but the Reference Could Not Be Recovered, with the
+ EBML Tree Shown as XML
+
+ <Cluster>
+ <Timestamp>123456</Timestamp>
+ <BlockGroup>
+ <!-- References a Block 80 Track Ticks before this one -->
+ <ReferenceBlock>-80</ReferenceBlock>
+ <!-- References a Block 40 Track Ticks after this one -->
+ <ReferenceBlock>40</ReferenceBlock>
+ <Block/>
+ </BlockGroup>
+ ...
+ </Cluster>
+
+ Figure 22: BlockGroup with a Frame That References Two Other
+ Frames, with the EBML Tree Shown as XML
+
+ Intra-only video frames, such as the ones found in AV1 or VP9, can be
+ decoded without any other frame, but they don't reset the codec
+ state. Thus, seeking to these frames is not possible, as the next
+ frames may need frames that are not known from this seeking point.
+ Such intra-only frames MUST NOT be considered as keyframes, so the
+ keyframe flag MUST NOT be set in the SimpleBlock or a ReferenceBlock
+ MUST be used to signify the frame is not a RAP. The timestamp value
+ of the ReferenceBlock MUST be "0", meaning it's referencing itself.
+
+ <Cluster>
+ <Timestamp>123456</Timestamp>
+ <BlockGroup>
+ <!-- References itself to mark it should not be used as RAP -->
+ <ReferenceBlock>0</ReferenceBlock>
+ <Block/>
+ </BlockGroup>
+ ...
+ </Cluster>
+
+ Figure 23: Intra-Only Frame (Not a RAP), with the EBML Tree Shown
+ as XML
+
+ Because a video SimpleBlock has less information on references than a
+ video BlockGroup, it is possible to remux a video track using
+ BlockGroup into a SimpleBlock, as long as it doesn't use any other
+ BlockGroup features than ReferenceBlock.
+
+11. Timestamps
+
+ Historically, timestamps in Matroska were mistakenly called
+ timecodes. The Timestamp element was called Timecode, the
+ TimestampScale element was called TimecodeScale, the
+ TrackTimestampScale element was called TrackTimecodeScale, and the
+ ReferenceTimestamp element was called ReferenceTimeCode.
+
+11.1. Timestamp Ticks
+
+ All timestamp values in Matroska are expressed in multiples of a
+ tick. They are usually stored as integers. There are three types of
+ ticks possible: Matroska Ticks, Segment Ticks, and Track Ticks.
+
+11.1.1. Matroska Ticks
+
+ The timestamp value is stored directly in nanoseconds.
+
+ The elements storing values in Matroska Ticks/nanoseconds are:
+
+ * TrackEntry\DefaultDuration; defined in Section 5.1.4.1.13
+
+ * TrackEntry\DefaultDecodedFieldDuration; defined in
+ Section 5.1.4.1.14
+
+ * TrackEntry\SeekPreRoll; defined in Section 5.1.4.1.26
+
+ * TrackEntry\CodecDelay; defined in Section 5.1.4.1.25
+
+ * BlockGroup\DiscardPadding; defined in Section 5.1.3.5.7
+
+ * ChapterAtom\ChapterTimeStart; defined in Section 5.1.7.1.4.3
+
+ * ChapterAtom\ChapterTimeEnd; defined in Section 5.1.7.1.4.4
+
+11.1.2. Segment Ticks
+
+ Elements in Segment Ticks involve the use of the TimestampScale
+ element of the Segment to get the timestamp in nanoseconds of the
+ element, with the following formula:
+
+ timestamp in nanosecond = element value * TimestampScale
+
+ This allows for storage of smaller integer values in the elements.
+
+ When using the default value of "1,000,000" for TimestampScale, one
+ Segment Tick represents one millisecond.
+
+ The elements storing values in Segment Ticks are:
+
+ * Cluster\Timestamp; defined in Section 5.1.3.1
+
+ * Info\Duration is stored as a floating-point, but the same formula
+ applies; defined in Section 5.1.2.10
+
+ * CuePoint\CueTime; defined in Section 5.1.5.1.1
+
+ * CuePoint\CueTrackPositions\CueDuration; defined in
+ Section 5.1.5.1.2.4
+
+ * CueReference\CueRefTime; defined in Section 5.1.5.1.1
+
+11.1.3. Track Ticks
+
+ Elements in Track Ticks involve the use of the TimestampScale element
+ of the Segment and the TrackTimestampScale element of the Track to
+ get the timestamp in nanoseconds of the element, with the following
+ formula:
+
+ timestamp in nanoseconds =
+ element value * TrackTimestampScale * TimestampScale
+
+ This allows for storage of smaller integer values in the elements.
+ The resulting floating-point values of the timestamps are still
+ expressed in nanoseconds.
+
+ When using the default values of "1,000,000" for TimestampScale and
+ "1.0" for TrackTimestampScale, one Track Tick represents one
+ millisecond.
+
+ The elements storing values in Track Ticks are:
+
+ * Cluster\BlockGroup\Block and Cluster\SimpleBlock timestamps;
+ detailed in Section 11.2
+
+ * Cluster\BlockGroup\BlockDuration; defined in Section 5.1.3.5.3
+
+ * Cluster\BlockGroup\ReferenceBlock; defined in Section 5.1.3.5.5
+
+ When the TrackTimestampScale is interpreted as "1.0", Track Ticks are
+ equivalent to Segment Ticks and give an integer value in nanoseconds.
+ This is the most common case as TrackTimestampScale is usually
+ omitted.
+
+ A value of TrackTimestampScale other than "1.0" MAY be used to scale
+ the timestamps more in tune with each Track sampling frequency. For
+ historical reasons, a lot of Matroska Readers don't take the
+ TrackTimestampScale value into account. Thus, using a value other
+ than "1.0" might not work in many places.
+
+11.2. Block Timestamps
+
+ A Block element and SimpleBlock element timestamp is the time when
+ the decoded data of the first frame in the Block/SimpleBlock MUST be
+ presented if the track of that Block/SimpleBlock is selected for
+ playback. This is also known as the Presentation Timestamp (PTS).
+
+ The Block element and SimpleBlock element store their timestamps as
+ signed integers, relative to the Cluster\Timestamp value of the
+ Cluster they are stored in. To get the timestamp of a Block or
+ SimpleBlock in nanoseconds, the following formula is used:
+
+ ( Cluster\Timestamp + ( block timestamp * TrackTimestampScale ) ) *
+ TimestampScale
+
+ The Block element and SimpleBlock element store their timestamps as
+ 16-bit signed integers, allowing a range from "-32768" to "+32767"
+ Track Ticks. Although these values can be negative, when added to
+ the Cluster\Timestamp, the resulting frame timestamp SHOULD NOT be
+ negative.
+
+ When a CodecDelay element is set, its value MUST be subtracted from
+ each Block timestamp of that track. To get the timestamp in
+ nanoseconds of the first frame in a Block or SimpleBlock, the formula
+ becomes:
+
+ ( ( Cluster\Timestamp + ( block timestamp * TrackTimestampScale ) ) *
+ TimestampScale ) - CodecDelay
+
+ The resulting frame timestamp SHOULD NOT be negative.
+
+ During playback, when a frame has a negative timestamp, the content
+ MUST be decoded by the decoder but not played to the user.
+
+11.3. TimestampScale Rounding
+
+ The default Track Tick duration is one millisecond.
+
+ The TimestampScale is a floating-point value that is usually "1.0".
+ But when it's not, the multiplied Block Timestamp is a floating-point
+ value in nanoseconds. The Matroska Reader SHOULD use the nearest
+ rounding value in nanoseconds to get the proper nanosecond timestamp
+ of a Block. This allows some clever TimestampScale values to have a
+ more refined timestamp precision per frame.
+
+12. Language Codes
+
+ Matroska versions 1 through 3 use language codes that can be either
+ the three-letter bibliographic ISO 639-2 form [ISO639-2] (like "fre"
+ for French) or such a language code followed by a dash and a country
+ code for specialities in languages (like "fre-ca" for Canadian
+ French). The ISO 639-2 Language elements are Language element,
+ TagLanguage element, and ChapLanguage element.
+
+ Starting in Matroska version 4, the forms defined in either
+ [ISO639-2] or [RFC5646] MAY be used, although the form in [RFC5646]
+ is RECOMMENDED. The Language elements in the [RFC5646] form are
+ LanguageBCP47 element, TagLanguageBCP47 element, and
+ ChapLanguageBCP47 element. If both an [ISO639-2] Language element
+ and an [RFC5646] Language element are used within the same Parent
+ Element, then the Language element in the [ISO639-2] form MUST be
+ ignored and precedence given to the Language element in the [RFC5646]
+ form.
+
+ In this document, "BCP47" in element names refers specifically to
+ [RFC5646], which is part of BCP 47.
+
+13. Country Codes
+
+ Country codes are the [RFC5646] two-letter region subtags, without
+ the UK exception.
+
+14. Encryption
+
+ This Matroska specification provides no interoperable solution for
+ securing the data container with any assurances of confidentiality,
+ integrity, authenticity, or authorization. The ContentEncryption
+ element (Section 5.1.4.1.31.8) and associated sub-fields
+ (Section 5.1.4.1.31.9 to Section 5.1.4.1.31.12) are defined only for
+ the benefit of implementers to construct their own proprietary
+ solution or as the basis for further standardization activities. How
+ to use these fields to secure a Matroska data container is out of
+ scope, as are any related issues such as key management and
+ distribution.
+
+ A Matroska Reader who encounters containers that use the fields
+ defined in this section MUST rely on out-of-scope guidance to decode
+ the associated content.
+
+ Because encryption occurs within the Block element, it is possible to
+ manipulate encrypted streams without decrypting them. The streams
+ could potentially be copied, deleted, cut, appended, or any number of
+ other possible editing techniques without decryption. The data can
+ be used without having to expose it or go through the decrypting
+ process.
+
+ Encryption can also be layered within Matroska. This means that two
+ completely different types of encryption can be used, requiring two
+ separate keys to be able to decrypt a stream.
+
+ Encryption information is stored in the ContentEncodings element
+ under the ContentEncryption element.
+
+ For encryption systems sharing public/private keys, the creation of
+ the keys and the exchange of keys are not covered by this document.
+ They have to be handled by the system using Matroska.
+
+ The algorithms described in Table 24 support different modes of
+ operations and key sizes. The specification of these parameters is
+ required for a complete solution but is out of scope of this document
+ and left to the proprietary implementations using them or subsequent
+ profiles of this document.
+
+ The ContentEncodingScope element gives an idea of which part of the
+ track is encrypted, but each ContentEncAlgo element and its sub-
+ elements (like AESSettingsCipherMode) define exactly how the
+ encrypted track should be interpreted.
+
+ An example of an extension that builds upon these security-related
+ fields in this specification is [WebM-Enc]. It uses AES-CTR,
+ ContentEncAlgo = 5 (Section 5.1.4.1.31.9), and AESSettingsCipherMode
+ = 1 (Section 5.1.4.1.31.12).
+
+ A Matroska Writer MUST NOT use insecure cryptographic algorithms to
+ create new archives or streams, but a Matroska Reader MAY support
+ these algorithms to read previously made archives or streams.
+
+15. Image Presentation
+
+15.1. Cropping
+
+ The PixelCrop elements (PixelCropTop, PixelCropBottom,
+ PixelCropRight, and PixelCropLeft) indicate when, and by how much,
+ encoded video frames SHOULD be cropped for display. These elements
+ allow edges of the frame that are not intended for display (such as
+ the sprockets of a full-frame film scan or the Video ANCillary (VANC)
+ area of a digitized analog videotape) to be stored but hidden.
+ PixelCropTop and PixelCropBottom store an integer of how many rows of
+ pixels SHOULD be cropped from the top and bottom of the image,
+ respectively. PixelCropLeft and PixelCropRight store an integer of
+ how many columns of pixels SHOULD be cropped from the left and right
+ of the image, respectively.
+
+ For example, a pillar-boxed video that stores a 1440x1080 visual
+ image within the center of a padded 1920x1080 encoded image may set
+ both PixelCropLeft and PixelCropRight to "240", so a Matroska Player
+ should crop off 240 columns of pixels from the left and right of the
+ encoded image to present the image with the pillar-boxes hidden.
+
+ Cropping has to be performed before resizing and the display
+ dimensions given by DisplayWidth, DisplayHeight, and DisplayUnit
+ apply to the already-cropped image.
+
+15.2. Rotation
+
+ The ProjectionPoseRoll element (Section 5.1.4.1.28.46) can be used to
+ indicate that the image from the associated video track SHOULD be
+ rotated for presentation. For instance, the following example of the
+ Projection element (Section 5.1.4.1.28.41) and the ProjectionPoseRoll
+ element represents a video track where the image SHOULD be presented
+ with a 90-degree counter-clockwise rotation, with the EBML tree shown
+ as XML:
+
+ <Projection>
+ <ProjectionPoseRoll>90</ProjectionPoseRoll>
+ </Projection>
+
+ Figure 24: Rotation Example
+
+16. Segment Position
+
+ The Segment Position of an element refers to the position of the
+ first octet of the Element ID of that element, measured in octets,
+ from the beginning of the Element Data section of the containing
+ Segment element. In other words, the Segment Position of an element
+ is the distance in octets from the beginning of its containing
+ Segment element minus the size of the Element ID and Element Data
+ Size of that Segment element. The Segment Position of the first
+ Child Element of the Segment element is 0. An element that is not
+ stored within a Segment element, such as the elements of the EBML
+ Header, do not have a Segment Position.
+
+16.1. Segment Position Exception
+
+ Elements that are defined to store a Segment Position MAY define
+ reserved values to indicate a special meaning.
+
+16.2. Example of Segment Position
+
+ This table presents an example of Segment Position by showing a
+ hexadecimal representation of a very small Matroska file with labels
+ to show the offsets in octets. The file contains a Segment element
+ with an Element ID of "0x18538067" and a MuxingApp element with an
+ Element ID of "0x4D80".
+
+ 0 1 2
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
+ +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ 0 |1A|45|DF|A3|8B|42|82|88|6D|61|74|72|6F|73|6B|61|
+ ^ EBML Header
+ 0 | |18|53|80|67|
+ ^ Segment ID
+ 20 |93|
+ ^ Segment Data Size
+ 20 | |15|49|A9|66|8E|4D|80|84|69|65|74|66|57|41|84|69|65|74|66|
+ ^ Start of Segment data
+ 20 | |4D|80|84|69|65|74|66|57|41|84|69|65|74|66|
+ ^ MuxingApp start
+
+ In the above example, the Element ID of the Segment element is stored
+ at offset 16, the Element Data Size of the Segment element is stored
+ at offset 20, and the Element Data of the Segment element is stored
+ at offset 21.
+
+ The MuxingApp element is stored at offset 26. Since the Segment
+ Position of an element is calculated by subtracting the position of
+ the Element Data of the containing Segment element from the position
+ of that element, the Segment Position of the MuxingApp element in the
+ above example is "26 - 21" or "5".
+
+17. Linked Segments
+
+ Matroska provides several methods to link two or more Segment
+ elements together to create a Linked Segment. A Linked Segment is a
+ set of multiple Segments linked together into a single presentation
+ by using Hard Linking or Medium Linking.
+
+ All Segments within a Linked Segment MUST have a SegmentUUID.
+
+ All Segments within a Linked Segment SHOULD be stored within the same
+ directory or be quickly accessible based on their SegmentUUID in
+ order to have a seamless transition between segments.
+
+ All Segments within a Linked Segment MAY set a SegmentFamily with a
+ common value to make it easier for a Matroska Player to know which
+ Segments are meant to be played together.
+
+ The SegmentFilename, PrevFilename, and NextFilename elements MAY also
+ give hints on the original filenames that were used when the Segment
+ links were created, in case some SegmentUUIDs are damaged.
+
+17.1. Hard Linking
+
+ Hard Linking, also called "splitting", is the process of creating a
+ Linked Segment by linking multiple Segment elements using the
+ NextUUID and PrevUUID elements.
+
+ All Segments within a Hard Linked Segment MUST use the same Tracks
+ list and TimestampScale.
+
+ Within a Linked Segment, the timestamps of Block and SimpleBlock MUST
+ consecutively follow the timestamps of Block and SimpleBlock from the
+ previous Segment in linking order.
+
+ With Hard Linking, the chapters of any Segment within the Linked
+ Segment MUST only reference the current Segment. The NextUUID and
+ PrevUUID reference the respective SegmentUUID values of the next and
+ previous Segments.
+
+ The first Segment of a Linked Segment MUST NOT have a PrevUUID
+ element. The last Segment of a Linked Segment MUST NOT have a
+ NextUUID element.
+
+ For each node of the chain of Segments of a Linked Segment, at least
+ one Segment MUST reference the other Segment within the chain.
+
+ In a chain of Segments of a Linked Segment, the NextUUID always takes
+ precedence over the PrevUUID. Thus, if SegmentA has a NextUUID to
+ SegmentB and SegmentB has a PrevUUID to SegmentC, the link to use is
+ NextUUID between SegmentA and SegmentB, and SegmentC is not part of
+ the Linked Segment.
+
+ If SegmentB has a PrevUUID to SegmentA, but SegmentA has no NextUUID,
+ then the Matroska Player MAY consider these two Segments linked as
+ SegmentA followed by SegmentB.
+
+ As an example, three Segments can be Hard Linked as a Linked Segment
+ through cross-referencing each other with SegmentUUID, PrevUUID, and
+ NextUUID as shown in this table:
+
+ +==========+================+==================+==================+
+ |file name |SegmentUUID | PrevUUID | NextUUID |
+ +==========+================+==================+==================+
+ |start.mkv |71000c23cd310998| Invalid | a77b3598941cb803 |
+ | |53fbc94dd984a5dd| | eac0fcdafe44fac9 |
+ +----------+----------------+------------------+------------------+
+ |middle.mkv|a77b3598941cb803| 71000c23cd310998 | 6c92285fa6d3e827 |
+ | |eac0fcdafe44fac9| 53fbc94dd984a5dd | b198d120ea3ac674 |
+ +----------+----------------+------------------+------------------+
+ |end.mkv |6c92285fa6d3e827| a77b3598941cb803 | Invalid |
+ | |b198d120ea3ac674| eac0fcdafe44fac9 | |
+ +----------+----------------+------------------+------------------+
+
+ Table 40: Usual Hard Linking UIDs
+
+ An example where only the NextUUID element is used:
+
+ +============+==================+==========+==================+
+ | file name | SegmentUUID | PrevUUID | NextUUID |
+ +============+==================+==========+==================+
+ | start.mkv | 71000c23cd310998 | Invalid | a77b3598941cb803 |
+ | | 53fbc94dd984a5dd | | eac0fcdafe44fac9 |
+ +------------+------------------+----------+------------------+
+ | middle.mkv | a77b3598941cb803 | n/a | 6c92285fa6d3e827 |
+ | | eac0fcdafe44fac9 | | b198d120ea3ac674 |
+ +------------+------------------+----------+------------------+
+ | end.mkv | 6c92285fa6d3e827 | n/a | Invalid |
+ | | b198d120ea3ac674 | | |
+ +------------+------------------+----------+------------------+
+
+ Table 41: Hard Linking without PrevUUID
+
+ An example where only the PrevUUID element is used:
+
+ +============+==================+==================+==========+
+ | file name | SegmentUUID | PrevUUID | NextUUID |
+ +============+==================+==================+==========+
+ | start.mkv | 71000c23cd310998 | Invalid | n/a |
+ | | 53fbc94dd984a5dd | | |
+ +------------+------------------+------------------+----------+
+ | middle.mkv | a77b3598941cb803 | 71000c23cd310998 | n/a |
+ | | eac0fcdafe44fac9 | 53fbc94dd984a5dd | |
+ +------------+------------------+------------------+----------+
+ | end.mkv | 6c92285fa6d3e827 | a77b3598941cb803 | Invalid |
+ | | b198d120ea3ac674 | eac0fcdafe44fac9 | |
+ +------------+------------------+------------------+----------+
+
+ Table 42: Hard Linking without NextUUID
+
+ An example where only the middle.mkv is using the PrevUUID and
+ NextUUID elements:
+
+ +==========+================+==================+==================+
+ |file name |SegmentUUID | PrevUUID | NextUUID |
+ +==========+================+==================+==================+
+ |start.mkv |71000c23cd310998| Invalid | n/a |
+ | |53fbc94dd984a5dd| | |
+ +----------+----------------+------------------+------------------+
+ |middle.mkv|a77b3598941cb803| 71000c23cd310998 | 6c92285fa6d3e827 |
+ | |eac0fcdafe44fac9| 53fbc94dd984a5dd | b198d120ea3ac674 |
+ +----------+----------------+------------------+------------------+
+ |end.mkv |6c92285fa6d3e827| n/a | Invalid |
+ | |b198d120ea3ac674| | |
+ +----------+----------------+------------------+------------------+
+
+ Table 43: Hard Linking with Mixed UID Links
+
+17.2. Medium Linking
+
+ Medium Linking creates relationships between Segments using Ordered
+ Chapters (Section 20.1.3) and the ChapterSegmentUUID element. A
+ Chapter Edition with Ordered Chapters MAY contain Chapters elements
+ that reference timestamp ranges from other Segments. The Segment
+ referenced by the Ordered Chapter via the ChapterSegmentUUID element
+ SHOULD be played as part of a Linked Segment.
+
+ The timestamps of Segment content referenced by Ordered Chapters MUST
+ be adjusted according to the cumulative duration of the previous
+ Ordered Chapters.
+
+ As an example, a file named intro.mkv could have a SegmentUUID of
+ "0xb16a58609fc7e60653a60c984fc11ead". Another file called
+ program.mkv could use a Chapter Edition that contains two Ordered
+ Chapters. The first chapter references the Segment of intro.mkv with
+ the use of a ChapterSegmentUUID, ChapterSegmentEditionUID,
+ ChapterTimeStart, and an optional ChapterTimeEnd element. The second
+ chapter references content within the Segment of program.mkv. A
+ Matroska Player SHOULD recognize the Linked Segment created by the
+ use of ChapterSegmentUUID in an enabled Edition and present the
+ reference content of the two Segments as a single presentation.
+
+ The ChapterSegmentUUID represents the Segment that holds the content
+ to play in place of the Linked Chapter. The ChapterSegmentUUID MUST
+ NOT be the SegmentUUID of its own Segment.
+
+ There are two ways to use a chapter link:
+
+ * Linked-Duration linking
+
+ * Linked-Edition linking
+
+17.2.1. Linked-Duration
+
+ A Matroska Player MUST play the content of the Linked Segment from
+ the ChapterTimeStart until the ChapterTimeEnd timestamp in place of
+ the Linked Chapter.
+
+ ChapterTimeStart and ChapterTimeEnd represent timestamps in the
+ Linked Segment matching the value of ChapterSegmentUUID. Their
+ values MUST be in the range of the Linked Segment duration.
+
+ The ChapterTimeEnd value MUST be set when using Linked-Duration
+ chapter linking. ChapterSegmentEditionUID MUST NOT be set.
+
+17.2.2. Linked-Edition
+
+ A Matroska Player MUST play the whole Linked Edition of the Linked
+ Segment in place of the Linked Chapter.
+
+ ChapterSegmentEditionUID represents a valid Edition from the Linked
+ Segment matching the value of ChapterSegmentUUID.
+
+ When using Linked-Edition chapter linking, ChapterTimeEnd is
+ OPTIONAL.
+
+18. Track Flags
+
+18.1. Default Flag
+
+ The Default flag is a hint for a Matroska Player indicating that a
+ given track SHOULD be eligible to be automatically selected as the
+ default track for a given language. If no tracks in a given language
+ have the Default flag set, then all tracks in that language are
+ eligible for automatic selection. This can be used to indicate that
+ a track provides "regular service" that is suitable for users with
+ default settings, as opposed to specialized services, such as
+ commentary, captions for users with hearing impairments, or
+ descriptive audio.
+
+ The Matroska Player MAY override the Default flag for any reason,
+ including user preferences to prefer tracks providing accessibility
+ services.
+
+18.2. Forced Flag
+
+ The Forced flag tells the Matroska Player that it SHOULD display this
+ subtitle track, even if user preferences usually would not call for
+ any subtitles to be displayed alongside the audio track that is
+ currently selected. This can be used to indicate that a track
+ contains translations of on-screen text or dialogue spoken in a
+ different language than the track's primary language.
+
+18.3. Hearing-Impaired Flag
+
+ The Hearing-Impaired flag tells the Matroska Player that it SHOULD
+ prefer this track when selecting a default track for a user with a
+ hearing impairment and that it MAY prefer to select a different track
+ when selecting a default track for a user that is not hearing
+ impaired.
+
+18.4. Visual-Impaired Flag
+
+ The Visual-Impaired flag tells the Matroska Player that it SHOULD
+ prefer this track when selecting a default track for a user with a
+ visual impairment and that it MAY prefer to select a different track
+ when selecting a default track for a user that is not visually
+ impaired.
+
+18.5. Descriptions Flag
+
+ The Descriptions flag tells the Matroska Player that this track is
+ suitable to play via a text-to-speech system for a user with a visual
+ impairment and that it SHOULD NOT automatically select this track
+ when selecting a default track for a user that is not visually
+ impaired.
+
+18.6. Original Flag
+
+ The Original flag tells the Matroska Player that this track is in the
+ original language and that it SHOULD prefer this track if configured
+ to prefer original-language tracks of this track's type.
+
+18.7. Commentary Flag
+
+ The Commentary flag tells the Matroska Player that this track
+ contains commentary on the content.
+
+18.8. Track Operation
+
+ TrackOperation allows for the combination of multiple tracks to make
+ a virtual one. It uses two separate system to combine tracks. One
+ to create a 3D "composition" (left/right/background planes) and one
+ to simplify join two tracks together to make a single track.
+
+ A track created with TrackOperation is a proper track with a UID and
+ all its flags. However, the codec ID is meaningless because each
+ "sub" track needs to be decoded by its own decoder before the
+ "operation" is applied. The Cues elements corresponding to such a
+ virtual track SHOULD be the union of the Cues elements for each of
+ the tracks it's composed of (when the Cues are defined per track).
+
+ In the case of TrackJoinBlocks, the Block elements (from BlockGroup
+ and SimpleBlock) of all the tracks SHOULD be used as if they were
+ defined for this new virtual Track. When two Block elements have
+ overlapping start or end timestamps, it's up to the underlying system
+ to either drop some of these frames or render them the way they
+ overlap. This situation SHOULD be avoided when creating such tracks,
+ as you can never be sure of the end result on different platforms.
+
+18.9. Overlay Track
+
+ An overlay track SHOULD be rendered in the same channel as the track
+ it's linked to. When content is found in such a track, it SHOULD be
+ played on the rendering channel instead of the original track.
+
+18.10. Multi-planar and 3D Videos
+
+ There are two different ways to compress 3D videos: have each eye
+ track in a separate track and have one track have both eyes combined
+ inside (which is more efficient compression-wise). Matroska supports
+ both ways.
+
+ For the single-track variant, there is the StereoMode element, which
+ defines how planes are assembled in the track (mono or left-right
+ combined). Odd values of StereoMode means the left plane comes first
+ for more convenient reading. The pixel count of the track
+ (PixelWidth/PixelHeight) is the raw number of pixels (for example,
+ 3840x1080 for full HD side by side), and the DisplayWidth/
+ DisplayHeight in pixels is the number of pixels for one plane
+ (1920x1080 for that full HD stream). Old stereo 3D movies were
+ displayed using anaglyph (cyan and red colors separated). For
+ compatibility with such movies, there is a value of the StereoMode
+ that corresponds to anaglyph.
+
+ There is also a "packed" mode (values 13 and 14) that consists of
+ packing two frames together in a Block that uses lacing. The first
+ frame is the left eye and the other frame is the right eye (or vice
+ versa). The frames SHOULD be decoded in that order and are possibly
+ dependent on each other (P and B frames).
+
+ For separate tracks, Matroska needs to define exactly which track
+ does what. TrackOperation with TrackCombinePlanes does that. For
+ more details, see Section 18.8 on how TrackOperation works.
+
+ The 3D support is still in infancy and may evolve to support more
+ features.
+
+ The StereoMode used to be part of Matroska v2, but it didn't meet the
+ requirement for multiple tracks. There was also a bug in
+ [libmatroska] prior to 0.9.0 that would save/read it as 0x53B9
+ instead of 0x53B8; see OldStereoMode (Section 5.1.4.1.28.5).
+ Matroska Readers MAY support these legacy files by checking Matroska
+ v2 or 0x53B9. The older values of StereoMode were 0 (mono), 1 (right
+ eye), 2 (left eye), and 3 (both eyes); these are the only values that
+ can be found in OldStereoMode. They are not compatible with the
+ StereoMode values found in Matroska v3 and above.
+
+19. Default Track Selection
+
+ This section provides some example sets of Tracks and hypothetical
+ user settings, along with indications of which ones a similarly
+ configured Matroska Player SHOULD automatically select for playback
+ by default in such a situation. A player MAY provide additional
+ settings with more detailed controls for more nuanced scenarios.
+ These examples are provided as guidelines to illustrate the intended
+ usages of the various supported Track flags and their expected
+ behaviors.
+
+ Track names are shown in English for illustrative purposes; actual
+ files may have titles in the language of each track or provide titles
+ in multiple languages.
+
+19.1. Audio Selection
+
+ Example track set:
+
+ +===+=====+====+======+========+=======+===============+===========+
+ |No.|Type |Lang|Layout|Original|Default|Other Flags |Name |
+ +===+=====+====+======+========+=======+===============+===========+
+ |1 |Video|und |N/A |N/A |N/A |None | |
+ +---+-----+----+------+--------+-------+---------------+-----------+
+ |2 |Audio|eng |5.1 |1 |1 |None | |
+ +---+-----+----+------+--------+-------+---------------+-----------+
+ |3 |Audio|eng |2.0 |1 |1 |None | |
+ +---+-----+----+------+--------+-------+---------------+-----------+
+ |4 |Audio|eng |2.0 |1 |0 |Visual-Impaired|Descriptive|
+ | | | | | | | |audio |
+ +---+-----+----+------+--------+-------+---------------+-----------+
+ |5 |Audio|esp |5.1 |0 |1 |None | |
+ +---+-----+----+------+--------+-------+---------------+-----------+
+ |6 |Audio|esp |2.0 |0 |0 |Visual-Impaired|Descriptive|
+ | | | | | | | |audio |
+ +---+-----+----+------+--------+-------+---------------+-----------+
+ |7 |Audio|eng |2.0 |1 |0 |Commentary |Director's |
+ | | | | | | | |Commentary |
+ +---+-----+----+------+--------+-------+---------------+-----------+
+ |8 |Audio|eng |2.0 |1 |0 |None |Karaoke |
+ +---+-----+----+------+--------+-------+---------------+-----------+
+
+ Table 44: Audio Tracks for Default Selection
+
+ The table above shows a file with seven audio tracks -- five in
+ English and two in Spanish.
+
+ The English tracks all have the Original flag, indicating that
+ English is the original content language.
+
+ Generally, the player will first consider the track languages. If
+ the player has an option to prefer original-language audio and the
+ user has enabled it, then it should prefer one of the tracks with the
+ Original flag. If the user has configured to specifically prefer
+ audio tracks in English or Spanish, the player should select one of
+ the tracks in the corresponding language. The player may also wish
+ to prefer a track with the Original flag if no tracks matching any of
+ the user's explicitly preferred languages are available.
+
+ Two of the tracks have the Visual-Impaired flag. If the player has
+ been configured to prefer such tracks, it should select one;
+ otherwise, it should avoid them if possible.
+
+ If selecting an English track, when other settings have left multiple
+ possible options, it may be useful to exclude the tracks that lack
+ the Default flag. Here, one provides descriptive service for
+ individuals with visual impairments (which has its own flag and may
+ be automatically selected by user configuration but is unsuitable for
+ users with default-configured players), one is a commentary track
+ (which has its own flag and the player may or may not have
+ specialized handling for), and the last contains karaoke versions of
+ the music that plays during the film (which is an unusual specialized
+ audio service that Matroska has no built-in support for indicating,
+ so it's indicated in the track name instead). By not setting the
+ Default flag on these specialized tracks, the file's author hints
+ that they should not be automatically selected by a default-
+ configured player.
+
+ Having narrowed its choices down, the example player now may have to
+ select between tracks 2 and 3. The only difference between these
+ tracks is their channel layouts: 2 is 5.1 surround, while 3 is
+ stereo. If the player is aware that the output device is a pair of
+ headphones or stereo speakers, it may wish to prefer the stereo mix
+ automatically. On the other hand, if it knows that the device is a
+ surround system, it may wish to prefer the surround mix.
+
+ If the player finishes analyzing all of the available audio tracks
+ and finds that more than one seem equally and maximally preferable,
+ it SHOULD default to the first of the group.
+
+19.2. Subtitle Selection
+
+ Example track set:
+
+ +===+=========+====+========+=======+======+========+==============+
+ |No.|Type |Lang|Original|Default|Forced|Other | Name |
+ | | | | | | |Flags | |
+ +===+=========+====+========+=======+======+========+==============+
+ |1 |Video |und |N/A |N/A |N/A |None | |
+ +---+---------+----+--------+-------+------+--------+--------------+
+ |2 |Audio |fra |1 |1 |N/A |None | |
+ +---+---------+----+--------+-------+------+--------+--------------+
+ |3 |Audio |por |0 |1 |N/A |None | |
+ +---+---------+----+--------+-------+------+--------+--------------+
+ |4 |Subtitles|fra |1 |1 |0 |None | |
+ +---+---------+----+--------+-------+------+--------+--------------+
+ |5 |Subtitles|fra |1 |0 |0 |Hearing-| Captions for |
+ | | | | | | |Impaired| users with |
+ | | | | | | | | hearing |
+ | | | | | | | | impairments |
+ +---+---------+----+--------+-------+------+--------+--------------+
+ |6 |Subtitles|por |0 |1 |0 |None | |
+ +---+---------+----+--------+-------+------+--------+--------------+
+ |7 |Subtitles|por |0 |0 |1 |None | Signs |
+ +---+---------+----+--------+-------+------+--------+--------------+
+ |8 |Subtitles|por |0 |0 |0 |Hearing-| SDH |
+ | | | | | | |Impaired| |
+ +---+---------+----+--------+-------+------+--------+--------------+
+
+ Table 45: Subtitle Tracks for Default Selection
+
+ The table above shows two audio tracks and five subtitle tracks. As
+ we can see, French is the original language.
+
+ We'll start by discussing the case where the user prefers French (or
+ original-language) audio (or has explicitly selected the French audio
+ track) and also prefers French subtitles.
+
+ In this case, if the player isn't configured to display captions when
+ the audio matches their preferred subtitle languages, the player
+ doesn't need to select a subtitle track at all.
+
+ If the user _has_ indicated that they want captions to be displayed,
+ the selection simply comes down to whether hearing-impaired subtitles
+ are preferred.
+
+ The situation for a user who prefers Portuguese subtitles starts out
+ somewhat analogous. If they select the original French audio (either
+ by explicit audio language preference, preference for original-
+ language tracks, or explicitly selecting that track), then the
+ selection once again comes down to the hearing-impaired preference.
+
+ However, the case where the Portuguese audio track is selected has an
+ important catch: a Forced track in Portuguese is present. This may
+ contain translations of on-screen text from the video track or of
+ portions of the audio that are not translated (music, for instance).
+ This means that even if the user's preferences wouldn't normally call
+ for captions here, the Forced track should be selected nonetheless,
+ rather than selecting no track at all. On the other hand, if the
+ user's preferences _do_ call for captions, the non-Forced tracks
+ should be preferred, as the Forced track will not contain captioning
+ for the dialogue.
+
+20. Chapters
+
+ The Matroska Chapters system can have multiple Editions, and each
+ Edition can consist of Simple Chapters where a chapter start time is
+ used as a marker in the timeline only. An Edition can be more
+ complex with Ordered Chapters where a chapter end timestamp is
+ additionally used or much more complex with Linked Chapters. The
+ Matroska Chapters system can also have a menu structure borrowed from
+ the DVD-menu system [DVD-Video] or have its own built-in Matroska
+ menu structure.
+
+20.1. EditionEntry
+
+ The EditionEntry is also called an Edition. An Edition contains a
+ set of Edition flags and MUST contain at least one ChapterAtom
+ element. Chapters are always inside an Edition (or a Chapter itself
+ is part of an Edition). Multiple Editions are allowed. Some of
+ these Editions MAY be ordered and others not.
+
+20.1.1. EditionFlagDefault
+
+ Only one Edition SHOULD have an EditionFlagDefault flag set to true.
+
+20.1.2. Default Edition
+
+ The Default Edition is the Edition that a Matroska Player SHOULD use
+ for playback by default.
+
+ The first Edition with the EditionFlagDefault flag set to true is the
+ Default Edition.
+
+ When all EditionFlagDefault flags are set to false, then the first
+ Edition is the Default Edition.
+
+ +===========+=============+=================+
+ | Edition | FlagDefault | Default Edition |
+ +===========+=============+=================+
+ | Edition 1 | true | X |
+ +-----------+-------------+-----------------+
+ | Edition 2 | true | |
+ +-----------+-------------+-----------------+
+ | Edition 3 | true | |
+ +-----------+-------------+-----------------+
+
+ Table 46: Default Edition, All Default
+
+ +===========+=============+=================+
+ | Edition | FlagDefault | Default Edition |
+ +===========+=============+=================+
+ | Edition 1 | false | X |
+ +-----------+-------------+-----------------+
+ | Edition 2 | false | |
+ +-----------+-------------+-----------------+
+ | Edition 3 | false | |
+ +-----------+-------------+-----------------+
+
+ Table 47: Default Edition, No Default
+
+ +===========+=============+=================+
+ | Edition | FlagDefault | Default Edition |
+ +===========+=============+=================+
+ | Edition 1 | false | |
+ +-----------+-------------+-----------------+
+ | Edition 2 | true | X |
+ +-----------+-------------+-----------------+
+ | Edition 3 | false | |
+ +-----------+-------------+-----------------+
+
+ Table 48: Default Edition, With Default
+
+20.1.3. EditionFlagOrdered
+
+ The EditionFlagOrdered flag is a significant feature, as it enables
+ an Edition of Ordered Chapters that defines and arranges a virtual
+ timeline rather than simply labeling points within the timeline. For
+ example, with Editions of Ordered Chapters, a single Matroska file
+ can present multiple edits of a film without duplicating content.
+ Alternatively, if a videotape is digitized in full, one Ordered
+ Edition could present the full content (including colorbars,
+ countdown, slate, a feature presentation, and black frames), while
+ another Edition of Ordered Chapters can use Chapters that only mark
+ the intended presentation with the colorbars and other ancillary
+ visual information excluded. If an Edition of Ordered Chapters is
+ enabled, then the Matroska Player MUST play those Chapters in their
+ stored order from the timestamp marked in the ChapterTimeStart
+ element to the timestamp marked in to ChapterTimeEnd element.
+
+ If the EditionFlagOrdered flag evaluates to "0", Simple Chapters are
+ used and only the ChapterTimeStart of a Chapter is used as a chapter
+ mark to jump to the predefined point in the timeline. With Simple
+ Chapters, a Matroska Player MUST ignore certain elements inside a
+ Chapters element. In that case, these elements are informational
+ only.
+
+ The following list shows the different Chapters elements only found
+ in Ordered Chapters.
+
+ * ChapterAtom\ChapterSegmentUUID
+
+ * ChapterAtom\ChapterSegmentEditionUID
+
+ * ChapterAtom\ChapProcess
+
+ * Info\ChapterTranslate
+
+ * TrackEntry\TrackTranslate
+
+ Furthermore, there are other EBML elements that could be used if the
+ EditionFlagOrdered evaluates to "1".
+
+20.1.3.1. Ordered-Edition and Matroska Segment Linking
+
+ Hard Linking: Ordered Chapters supersede the Hard Linking.
+
+ Medium Linking: Ordered Chapters are used in a normal way and can be
+ combined with the ChapterSegmentUUID element, which establishes a
+ link to another Segment.
+
+ See Section 17 on Linked Segments for more information about Hard
+ Linking and Medium Linking.
+
+20.2. ChapterAtom
+
+ The ChapterAtom is also called a Chapter.
+
+20.2.1. ChapterTimeStart
+
+ ChapterTimeStart is the timestamp of the start of Chapter with
+ nanosecond accuracy and is not scaled by TimestampScale. For Simple
+ Chapters, this is the position of the chapter markers in the
+ timeline.
+
+20.2.2. ChapterTimeEnd
+
+ ChapterTimeEnd is the timestamp of the end of Chapter with nanosecond
+ accuracy and is not scaled by TimestampScale. The timestamp defined
+ by the ChapterTimeEnd is not part of the Chapter. A Matroska Player
+ calculates the duration of this Chapter using the difference between
+ the ChapterTimeEnd and ChapterTimeStart. The end timestamp MUST be
+ greater than or equal to the start timestamp.
+
+ When the ChapterTimeEnd timestamp is equal to the ChapterTimeStart
+ timestamp, the timestamp is included in the Chapter. It can be
+ useful to put markers in a file or add chapter commands with ordered
+ chapter commands without having to play anything; see
+ Section 5.1.7.1.4.14.
+
+ +===========+=================+===============+===============+
+ | Chapter | Start timestamp | End timestamp | Duration |
+ +===========+=================+===============+===============+
+ | Chapter 1 | 0 | 1000000000 | 1000000000 |
+ +-----------+-----------------+---------------+---------------+
+ | Chapter 2 | 1000000000 | 5000000000 | 4000000000 |
+ +-----------+-----------------+---------------+---------------+
+ | Chapter 3 | 6000000000 | 6000000000 | 0 |
+ +-----------+-----------------+---------------+---------------+
+ | Chapter 4 | 9000000000 | 8000000000 | Invalid |
+ | | | | (-1000000000) |
+ +-----------+-----------------+---------------+---------------+
+
+ Table 49: ChapterTimeEnd Usage Possibilities
+
+20.2.3. Nested Chapters
+
+ A ChapterAtom element can contain other ChapterAtom elements. That
+ element is a Parent Chapter, and the ChapterAtom elements it contains
+ are Nested Chapters.
+
+ Nested Chapters can be useful to tag small parts of a Segment that
+ already have tags or add Chapter Codec commands on smaller parts of a
+ Segment that already have Chapter Codec commands.
+
+ The ChapterTimeStart of a Nested Chapter MUST be greater than or
+ equal to the ChapterTimeStart of its Parent Chapter.
+
+ If the Parent Chapter of a Nested Chapter has a ChapterTimeEnd, the
+ ChapterTimeStart of that Nested Chapter MUST be smaller than or equal
+ to the ChapterTimeEnd of the Parent Chapter.
+
+20.2.4. Nested Chapters in Ordered Chapters
+
+ The ChapterTimeEnd of the lowest level of Nested Chapters MUST be set
+ for Ordered Chapters.
+
+ When used with Ordered Chapters, the ChapterTimeEnd value of a Parent
+ Chapter is useless for playback, as the proper playback sections are
+ described in its Nested Chapters. The ChapterTimeEnd SHOULD NOT be
+ set in Parent Chapters and MUST be ignored for playback.
+
+20.2.5. ChapterFlagHidden
+
+ Each Chapter's ChapterFlagHidden flag works independently of Parent
+ Chapters. A Nested Chapter with a ChapterFlagHidden flag that
+ evaluates to "0" remains visible in the user interface even if the
+ Parent Chapter's ChapterFlagHidden flag is set to "1".
+
+ +==========================+===================+=========+
+ | Chapter + Nested Chapter | ChapterFlagHidden | visible |
+ +==========================+===================+=========+
+ | Chapter 1 | 0 | yes |
+ +--------------------------+-------------------+---------+
+ | Nested Chapter 1.1 | 0 | yes |
+ +--------------------------+-------------------+---------+
+ | Nested Chapter 1.2 | 1 | no |
+ +--------------------------+-------------------+---------+
+ | Chapter 2 | 1 | no |
+ +--------------------------+-------------------+---------+
+ | Nested Chapter 2.1 | 0 | yes |
+ +--------------------------+-------------------+---------+
+ | Nested Chapter 2.2 | 1 | no |
+ +--------------------------+-------------------+---------+
+
+ Table 50: ChapterFlagHidden Nested Visibility
+
+20.3. Menu Features
+
+ The menu features are handled like a chapter codec. That means each
+ codec has a type, some private data, and some data in the chapters.
+
+ The type of the menu system is defined by the ChapProcessCodecID
+ parameter. For now, only two values are supported: 0 (Matroska
+ Script) and 1 (menu borrowed from the DVD [DVD-Video]). The private
+ data stored in ChapProcessPrivate and ChapProcessData depends on the
+ ChapProcessCodecID value.
+
+ The menu system, as well as Chapter Codecs in general, can perform
+ actions on the Matroska Player, such as jumping to another Chapter or
+ Edition, selecting different tracks, and possibly more. The scope of
+ all the possibilities of Chapter Codecs is not covered in this
+ document, as it depends on the Chapter Codec features and its
+ integration in a Matroska Player.
+
+20.4. Physical Types
+
+ Each level can have different meanings for audio and video. The
+ ORIGINAL_MEDIA_TYPE tag [MatroskaTags] can be used to specify a
+ string for ChapterPhysicalEquiv = 60. Here is the list of possible
+ levels for both audio and video:
+
+ +=======+=======================+=============+=====================+
+ | Value | Audio | Video | Comment |
+ +=======+=======================+=============+=====================+
+ | 70 | SET / PACKAGE | SET / | the collection of |
+ | | | PACKAGE | different media |
+ +-------+-----------------------+-------------+---------------------+
+ | 60 | CD / 12" / 10" / 7" / | DVD / VHS | the physical medium |
+ | | TAPE / MINIDISC / DAT | / | like a CD or a DVD |
+ | | | LASERDISC | |
+ +-------+-----------------------+-------------+---------------------+
+ | 50 | SIDE | SIDE | when the original |
+ | | | | medium (LP/DVD) has |
+ | | | | different sides |
+ +-------+-----------------------+-------------+---------------------+
+ | 40 | - | LAYER | another physical |
+ | | | | level on DVDs |
+ +-------+-----------------------+-------------+---------------------+
+ | 30 | SESSION | SESSION | as found on CDs and |
+ | | | | DVDs |
+ +-------+-----------------------+-------------+---------------------+
+ | 20 | TRACK | - | as found on audio |
+ | | | | CDs |
+ +-------+-----------------------+-------------+---------------------+
+ | 10 | INDEX | - | the first logical |
+ | | | | level of the side/ |
+ | | | | medium |
+ +-------+-----------------------+-------------+---------------------+
+
+ Table 51: ChapterPhysicalEquiv Meaning per Track Type
+
+20.5. Chapter Examples
+
+20.5.1. Example 1: Basic Chaptering
+
+ In this example, a movie is split in different chapters. It could
+ also just be an audio file (album) in which each track corresponds to
+ a chapter.
+
+ * 00000 ms - 05000 ms: Intro
+ * 05000 ms - 25000 ms: Before the crime
+ * 25000 ms - 27500 ms: The crime
+ * 27500 ms - 38000 ms: After the crime
+ * 38000 ms - 43000 ms: Credits
+
+ This translates to Matroska form, with the EBML tree shown as follows
+ in XML:
+
+ <Chapters>
+ <EditionEntry>
+ <EditionUID>16603393396715046047</EditionUID>
+ <ChapterAtom>
+ <ChapterUID>1193046</ChapterUID>
+ <ChapterTimeStart>0</ChapterTimeStart>
+ <ChapterTimeEnd>5000000000</ChapterTimeEnd>
+ <ChapterDisplay>
+ <ChapString>Intro</ChapString>
+ </ChapterDisplay>
+ </ChapterAtom>
+ <ChapterAtom>
+ <ChapterUID>2311527</ChapterUID>
+ <ChapterTimeStart>5000000000</ChapterTimeStart>
+ <ChapterTimeEnd>25000000000</ChapterTimeEnd>
+ <ChapterDisplay>
+ <ChapString>Before the crime</ChapString>
+ </ChapterDisplay>
+ <ChapterDisplay>
+ <ChapString>Avant le crime</ChapString>
+ <ChapLanguage>fra</ChapLanguage>
+ </ChapterDisplay>
+ </ChapterAtom>
+ <ChapterAtom>
+ <ChapterUID>3430008</ChapterUID>
+ <ChapterTimeStart>25000000000</ChapterTimeStart>
+ <ChapterTimeEnd>27500000000</ChapterTimeEnd>
+ <ChapterDisplay>
+ <ChapString>The crime</ChapString>
+ </ChapterDisplay>
+ <ChapterDisplay>
+ <ChapString>Le crime</ChapString>
+ <ChapLanguage>fra</ChapLanguage>
+ </ChapterDisplay>
+ </ChapterAtom>
+ <ChapterAtom>
+ <ChapterUID>4548489</ChapterUID>
+ <ChapterTimeStart>27500000000</ChapterTimeStart>
+ <ChapterTimeEnd>38000000000</ChapterTimeEnd>
+ <ChapterDisplay>
+ <ChapString>After the crime</ChapString>
+ </ChapterDisplay>
+ <ChapterDisplay>
+ <ChapString>Apres le crime</ChapString>
+ <ChapLanguage>fra</ChapLanguage>
+ </ChapterDisplay>
+ </ChapterAtom>
+ <ChapterAtom>
+ <ChapterUID>5666960</ChapterUID>
+ <ChapterTimeStart>38000000000</ChapterTimeStart>
+ <ChapterTimeEnd>43000000000</ChapterTimeEnd>
+ <ChapterDisplay>
+ <ChapString>Credits</ChapString>
+ </ChapterDisplay>
+ <ChapterDisplay>
+ <ChapString>Generique</ChapString>
+ <ChapLanguage>fra</ChapLanguage>
+ </ChapterDisplay>
+ </ChapterAtom>
+ </EditionEntry>
+ </Chapters>
+
+ Figure 25: Basic Chapters Example
+
+20.5.2. Example 2: Nested Chapters
+
+ In this example, an (existing) album is split into different
+ chapters, and one of them contains another splitting.
+
+20.5.2.1. The Micronauts "Bleep To Bleep"
+
+ * 00:00 - 12:28: Baby wants to Bleep/Rock
+ - 00:00 - 04:38: Baby wants to bleep (pt.1)
+ - 04:38 - 07:12: Baby wants to rock
+ - 07:12 - 10:33: Baby wants to bleep (pt.2)
+ - 10:33 - 12:28: Baby wants to bleep (pt.3)
+ * 12:30 - 19:38: Bleeper_O+2
+ * 19:40 - 22:20: Baby wants to bleep (pt.4)
+ * 22:22 - 25:18: Bleep to bleep
+ * 25:20 - 33:35: Baby wants to bleep (k)
+ * 33:37 - 44:28: Bleeper
+
+ This translates to Matroska form, with the EBML tree shown as follows
+ in XML:
+
+ <Chapters>
+ <EditionEntry>
+ <EditionUID>1281690858003401414</EditionUID>
+ <ChapterAtom>
+ <ChapterUID>1</ChapterUID>
+ <ChapterTimeStart>0</ChapterTimeStart>
+ <ChapterTimeEnd>748000000</ChapterTimeEnd>
+ <ChapterDisplay>
+ <ChapString>Baby wants to Bleep/Rock</ChapString>
+ </ChapterDisplay>
+ <ChapterAtom>
+ <ChapterUID>2</ChapterUID>
+ <ChapterTimeStart>0</ChapterTimeStart>
+ <ChapterTimeEnd>278000000</ChapterTimeEnd>
+ <ChapterDisplay>
+ <ChapString>Baby wants to bleep (pt.1)</ChapString>
+ </ChapterDisplay>
+ </ChapterAtom>
+ <ChapterAtom>
+ <ChapterUID>3</ChapterUID>
+ <ChapterTimeStart>278000000</ChapterTimeStart>
+ <ChapterTimeEnd>432000000</ChapterTimeEnd>
+ <ChapterDisplay>
+ <ChapString>Baby wants to rock</ChapString>
+ </ChapterDisplay>
+ </ChapterAtom>
+ <ChapterAtom>
+ <ChapterUID>4</ChapterUID>
+ <ChapterTimeStart>432000000</ChapterTimeStart>
+ <ChapterTimeEnd>633000000</ChapterTimeEnd>
+ <ChapterDisplay>
+ <ChapString>Baby wants to bleep (pt.2)</ChapString>
+ </ChapterDisplay>
+ </ChapterAtom>
+ <ChapterAtom>
+ <ChapterUID>5</ChapterUID>
+ <ChapterTimeStart>633000000</ChapterTimeStart>
+ <ChapterTimeEnd>748000000</ChapterTimeEnd>
+ <ChapterDisplay>
+ <ChapString>Baby wants to bleep (pt.3)</ChapString>
+ </ChapterDisplay>
+ </ChapterAtom>
+ </ChapterAtom>
+ <ChapterAtom>
+ <ChapterUID>6</ChapterUID>
+ <ChapterTimeStart>750000000</ChapterTimeStart>
+ <ChapterTimeEnd>1178500000</ChapterTimeEnd>
+ <ChapterDisplay>
+ <ChapString>Bleeper_O+2</ChapString>
+ </ChapterDisplay>
+ </ChapterAtom>
+ <ChapterAtom>
+ <ChapterUID>7</ChapterUID>
+ <ChapterTimeStart>1180500000</ChapterTimeStart>
+ <ChapterTimeEnd>1340000000</ChapterTimeEnd>
+ <ChapterDisplay>
+ <ChapString>Baby wants to bleep (pt.4)</ChapString>
+ </ChapterDisplay>
+ </ChapterAtom>
+ <ChapterAtom>
+ <ChapterUID>8</ChapterUID>
+ <ChapterTimeStart>1342000000</ChapterTimeStart>
+ <ChapterTimeEnd>1518000000</ChapterTimeEnd>
+ <ChapterDisplay>
+ <ChapString>Bleep to bleep</ChapString>
+ </ChapterDisplay>
+ </ChapterAtom>
+ <ChapterAtom>
+ <ChapterUID>9</ChapterUID>
+ <ChapterTimeStart>1520000000</ChapterTimeStart>
+ <ChapterTimeEnd>2015000000</ChapterTimeEnd>
+ <ChapterDisplay>
+ <ChapString>Baby wants to bleep (k)</ChapString>
+ </ChapterDisplay>
+ </ChapterAtom>
+ <ChapterAtom>
+ <ChapterUID>10</ChapterUID>
+ <ChapterTimeStart>2017000000</ChapterTimeStart>
+ <ChapterTimeEnd>2668000000</ChapterTimeEnd>
+ <ChapterDisplay>
+ <ChapString>Bleeper</ChapString>
+ </ChapterDisplay>
+ </ChapterAtom>
+ </EditionEntry>
+ </Chapters>
+
+ Figure 26: Nested Chapters Example
+
+21. Attachments
+
+ Matroska supports storage of related files and data in the
+ Attachments element (a Top-Level Element). Attachments elements can
+ be used to store related cover art, font files, transcripts, reports,
+ error recovery files, pictures, text-based annotations, copies of
+ specifications, or other ancillary files related to the Segment.
+
+ Matroska Readers MUST NOT execute files stored as Attachments
+ elements.
+
+21.1. Cover Art
+
+ This section defines a set of guidelines for the storage of cover art
+ in Matroska files. A Matroska Reader MAY use embedded cover art to
+ display a representational still-image depiction of the multimedia
+ contents of the Matroska file.
+
+ Only [JPEG] and PNG [RFC2083] image formats SHOULD be used for cover
+ art pictures.
+
+ There can be two different covers for a movie/album: a portrait style
+ (e.g., a DVD case) and a landscape style (e.g., a wide banner ad).
+
+ There can be two versions of the same cover: the normal cover and the
+ small cover. The dimension of the normal cover SHOULD be 600 pixels
+ on the smallest side (e.g., 960x600 for landscape, 600x800 for
+ portrait, or 600x600 for square). The dimension of the small cover
+ SHOULD be 120 pixels on the smallest side (e.g., 192x120 or 120x160).
+
+ Versions of cover art can be differentiated by the filename, which is
+ stored in the FileName element. The default filename of the normal
+ cover in square or portrait mode is cover.(jpg|png). When stored,
+ the normal cover SHOULD be the first Attachments element in storage
+ order. The small cover SHOULD be prefixed with "small_", such as
+ small_cover.(jpg|png). The landscape variant SHOULD be suffixed with
+ "_land", such as cover_land.(jpg|png). The filenames are case-
+ sensitive.
+
+ The following table provides examples of file names for cover art in
+ Attachments.
+
+ +======================+===================+=================+
+ | File Name | Image Orientation | Pixel Length of |
+ | | | Smallest Side |
+ +======================+===================+=================+
+ | cover.jpg | Portrait or | 600 |
+ | | square | |
+ +----------------------+-------------------+-----------------+
+ | small_cover.png | Portrait or | 120 |
+ | | square | |
+ +----------------------+-------------------+-----------------+
+ | cover_land.png | Landscape | 600 |
+ +----------------------+-------------------+-----------------+
+ | small_cover_land.jpg | Landscape | 120 |
+ +----------------------+-------------------+-----------------+
+
+ Table 52: Cover Art Filenames
+
+21.2. Font Files
+
+ Font files MAY be added to a Matroska file as Attachments so that the
+ font file may be used to display an associated subtitle track. This
+ allows the presentation of a Matroska file to be consistent in
+ various environments where the needed fonts might not be available on
+ the local system.
+
+ Depending on the font format in question, each font file can contain
+ multiple font variants. Each font variant has a name that will be
+ referred to as Font Name from now on. This Font Name can be
+ different from the Attachment's FileName, even when disregarding the
+ extension. In order to select a font for display, a Matroska Player
+ SHOULD consider both the Font Name and the base name of the
+ Attachment's FileName, preferring the former when there are multiple
+ matches.
+
+ Subtitle codecs, such as SubStation Alpha (SSA) and Advanced
+ SubStation Alpha (ASS), usually refer to a font by its Font Name, not
+ by its filename. If none of the Attachments are a match for the Font
+ Name, the Matroska Player SHOULD attempt to find a system font whose
+ Font Name matches the one used in the subtitle track.
+
+ Since loading fonts temporarily can take a while, a Matroska Player
+ usually loads or installs all the fonts found in attachments so they
+ are ready to be used during playback. Failure to use the font
+ attachment might result in incorrect rendering of the subtitles.
+
+ If a selected subtitle track has some AttachmentLink elements, the
+ player MAY restrict its font rendering to use only these fonts.
+
+ A Matroska Player SHOULD handle the official font media types from
+ [RFC8081] when the system can handle the type:
+
+ * font/sfnt: Generic SFNT Font Type
+
+ * font/ttf: TrueType Font (TTF) Font Type
+
+ * font/otf: OpenType Layout (OTF) Font Type
+
+ * font/collection: Collection Font Type
+
+ * font/woff: WOFF 1.0
+
+ * font/woff2: WOFF 2.0
+
+ Fonts in Matroska existed long before [RFC8081]. A few unofficial
+ media types for fonts were used in existing files. Therefore, it is
+ RECOMMENDED for a Matroska Player to support the following legacy
+ media types for font attachments:
+
+ * application/x-truetype-font: TrueType fonts, equivalent to font/
+ ttf and sometimes font/otf
+
+ * application/x-font-ttf: TrueType fonts, equivalent to font/ttf
+
+ * application/vnd.ms-opentype: OpenType Layout fonts, equivalent to
+ font/otf
+
+ * application/font-sfnt: Generic SFNT Font Type, equivalent to font/
+ sfnt
+
+ * application/font-woff: WOFF 1.0, equivalent to font/woff
+
+ There may also be some font attachments with the application/octet-
+ stream media type. In that case, the Matroska Player MAY try to
+ guess the font type by checking the file extension of the
+ AttachedFile\FileName string. Common file extensions for fonts are:
+
+ * .ttf for TrueType fonts, equivalent to font/ttf
+
+ * .otf for OpenType Layout fonts, equivalent to font/otf
+
+ * .ttc for Collection fonts, equivalent to font/collection
+
+ The file extension check MUST be case-insensitive.
+
+ Matroska Writers SHOULD use a valid font media type from [RFC8081] in
+ the AttachedFile\FileMediaType of the font attachment. They MAY use
+ the media types found in older files when compatibility with older
+ players is necessary.
+
+22. Cues
+
+ The Cues element provides an index of certain Cluster elements to
+ allow for optimized seeking to absolute timestamps within the
+ Segment. The Cues element contains one or many CuePoint elements,
+ each of which MUST reference an absolute timestamp (via the CueTime
+ element), a Track (via the CueTrack element), and a Segment Position
+ (via the CueClusterPosition element). Additional non-mandated
+ elements are part of the CuePoint element, such as CueDuration,
+ CueRelativePosition, CueCodecState, and others that provide any
+ Matroska Reader with additional information to use in the
+ optimization of seeking performance.
+
+22.1. Recommendations
+
+ The following recommendations are provided to optimize Matroska
+ performance.
+
+ * Unless Matroska is used as a live stream, it SHOULD contain a Cues
+ element.
+
+ * For each video track, each keyframe SHOULD be referenced by a
+ CuePoint element.
+
+ * It is RECOMMENDED to not reference non-keyframes of video tracks
+ in Cues unless it references a Cluster element that contains a
+ CodecState element but no keyframes.
+
+ * For each subtitle track present, each subtitle frame SHOULD be
+ referenced by a CuePoint element with a CueDuration element.
+
+ * References to audio tracks MAY be skipped in CuePoint elements if
+ a video track is present. When included, the CuePoint elements
+ SHOULD reference audio keyframes once every 500 milliseconds at
+ most.
+
+ * If the referenced frame is not stored within the first SimpleBlock
+ or first BlockGroup within its Cluster element, then the
+ CueRelativePosition element SHOULD be written to reference where
+ in the Cluster the reference frame is stored.
+
+ * If a CuePoint element references a Cluster element that includes a
+ CodecState element, then that CuePoint element MUST use a
+ CueCodecState element.
+
+ * CuePoint elements SHOULD be numerically sorted in storage order by
+ the value of the CueTime element.
+
+23. Matroska Streaming
+
+ In Matroska, there are two kinds of streaming: file access and
+ livestreaming.
+
+23.1. File Access
+
+ File access can simply be reading a file located on your computer,
+ but it also includes accessing a file from an HTTP (web) server or
+ Common Internet File System (CIFS) (Windows share) server. These
+ protocols are usually safe from reading errors, and seeking in the
+ stream is possible. However, when a file is stored far away or on a
+ slow server, seeking can be an expensive operation and should be
+ avoided. When followed, the guidelines in Section 25 help reduce the
+ number of seeking operations for regular playback and also have the
+ playback start quickly without needing to read lot of data first
+ (like a Cues element, Attachments element, or SeekHead element).
+
+ Matroska, having a small overhead, is well suited for storing music/
+ videos on file servers without a big impact on the bandwidth used.
+ Matroska does not require the index to be loaded before playing,
+ which allows playback to start very quickly. The index can be loaded
+ only when seeking is requested the first time.
+
+23.2. Livestreaming
+
+ Livestreaming is the equivalent of television broadcasting on the
+ Internet. There are two families of servers for livestreaming: RTP /
+ Real-Time Streaming Protocol (RTSP) and HTTP. Matroska is not meant
+ to be used over RTP. RTP already has timing and channel mechanisms
+ that would be wasted if doubled in Matroska. Additionally, having
+ the same information at the RTP and Matroska level would be a source
+ of confusion if they do not match. Livestreaming of Matroska over
+ file-like protocols like HTTP, QUIC, etc., is possible.
+
+ A live Matroska stream is different from a file because it usually
+ has no known end (only ending when the client disconnects). For
+ this, all bits of the "size" portion of the Segment element MUST be
+ set to 1. Another option is to concatenate Segment elements with
+ known sizes, one after the other. This solution allows a change of
+ codec/resolution between each segment. For example, this allows for
+ a switch between 4:3 and 16:9 in a television program.
+
+ When Segment elements are continuous, certain elements (like
+ SeekHead, Cues, Chapters, and Attachments) MUST NOT be used.
+
+ It is possible for a Matroska Player to detect that a stream is not
+ seekable. If the stream has neither a SeekHead list nor a Cues list
+ at the beginning of the stream, it SHOULD be considered non-seekable.
+ Even though it is possible to seek forward in the stream, it is NOT
+ RECOMMENDED.
+
+ In the context of live radio or web TV, it is possible to "tag" the
+ content while it is playing. The Tags element can be placed between
+ Clusters each time it is necessary. In that case, the new Tags
+ element MUST reset the previously encountered Tags elements and use
+ the new values instead.
+
+24. Tags
+
+24.1. Tags Precedence
+
+ Tags allow tagging all kinds of Matroska parts with very detailed
+ metadata in multiple languages.
+
+ Some Matroska elements also contain their own string value, like the
+ track Name element (Section 5.1.4.1.18) or the ChapString element
+ (Section 5.1.7.1.4.10).
+
+ The following Matroska elements can also be defined with tags:
+
+ * The track Name element (Section 5.1.4.1.18) corresponds to a tag
+ with the TagTrackUID (Section 5.1.8.1.1.3) set to the given track,
+ a TagName of TITLE (Section 5.1.8.1.2.1), and a TagLanguage
+ (Section 5.1.8.1.2.2) or TagLanguageBCP47 (Section 5.1.8.1.2.3) of
+ "und".
+
+ * The ChapString element (Section 5.1.7.1.4.10) corresponds to a tag
+ with the TagChapterUID (Section 5.1.8.1.1.5) set to the same
+ chapter UID, a TagName of TITLE (Section 5.1.8.1.2.1), and a
+ TagLanguage (Section 5.1.8.1.2.2) or TagLanguageBCP47
+ (Section 5.1.8.1.2.3) matching the ChapLanguage
+ (Section 5.1.7.1.4.11) or ChapLanguageBCP47
+ (Section 5.1.7.1.4.12), respectively.
+
+ * The FileDescription element (Section 5.1.6.1.1) of an attachment
+ corresponds to a tag with the TagAttachmentUID
+ (Section 5.1.8.1.1.6) set to the given attachment, a TagName of
+ TITLE (Section 5.1.8.1.2.1), and a TagLanguage
+ (Section 5.1.8.1.2.2) or TagLanguageBCP47 (Section 5.1.8.1.2.3) of
+ "und".
+
+ When both values exist in the file, the value found in Tags takes
+ precedence over the value found in the original location of the
+ element. For example, if you have a TrackEntry\Name element and a
+ tag value TITLE for that track in a Matroska Segment, the tag value
+ string SHOULD be used instead of the TrackEntry\Name string to
+ identify the track.
+
+ As the Tag element is optional, a lot of Matroska Readers do not
+ handle it and will not use the tags value when it's found. Thus, for
+ maximum compatibility, it's usually better to put the strings in the
+ TrackEntry, ChapterAtom, and Attachments elements and keep the tags
+ matching these values if tags are also used.
+
+24.2. Tag Levels
+
+ Tag elements allow tagging information on multiple levels, with each
+ level having a TargetTypeValue (Section 5.1.8.1.1.1). An element for
+ a given TargetTypeValue also applies to the lower levels denoted by
+ smaller TargetTypeValue values. If an upper value doesn't apply to a
+ level but the actual value to use is not known, an empty TagString
+ (Section 5.1.8.1.2.5) or an empty TagBinary (Section 5.1.8.1.2.6)
+ MUST be used as the tag value for this level.
+
+ See [MatroskaTags] for more details on common tag names, types, and
+ descriptions.
+
+25. Implementation Recommendations
+
+25.1. Cluster
+
+ It is RECOMMENDED that each individual Cluster element contain no
+ more than five seconds or five megabytes of content.
+
+25.2. SeekHead
+
+ It is RECOMMENDED that the first SeekHead element be followed by a
+ Void element to allow for the SeekHead element to be expanded to
+ cover new Top-Level Elements that could be added to the Matroska
+ file, such as Tags, Chapters, and Attachments elements.
+
+ The size of this Void element should be adjusted depending on the
+ Tags, Chapters, and Attachments elements in the Matroska file.
+
+25.3. Optimum Layouts
+
+ While there can be Top-Level Elements in any order, some orderings of
+ elements are better than others. The following subsections detail
+ optimum layouts for different use cases.
+
+25.3.1. Optimum Layout for a Muxer
+
+ This is the basic layout muxers should be using for an efficient
+ playback experience:
+
+ * SeekHead
+ * Info
+ * Tracks
+ * Chapters
+ * Attachments
+ * Tags
+ * Clusters
+ * Cues
+
+25.3.2. Optimum Layout after Editing Tags
+
+ When tags from the previous layout need to be extended, they are
+ moved to the end with the extra information. The location where the
+ old tags were located is voided.
+
+ * SeekHead
+ * Info
+ * Tracks
+ * Chapters
+ * Attachments
+ * Void
+ * Clusters
+ * Cues
+ * Tags
+
+25.3.3. Optimum Layout with Cues at the Front
+
+ Cues are usually a big chunk of data referencing a lot of locations
+ in the file. Players that want to seek in the file need to seek to
+ the end of the file to access these locations. It is often better if
+ they are placed early in the file. On the other hand, that means
+ players that don't intend to seek will have to read/skip these data
+ no matter what.
+
+ Because the Cues reference locations further in the file, it's often
+ complicated to allocate the proper space for that element before all
+ the locations are known. Therefore, this layout is rarely used:
+
+ * SeekHead
+ * Info
+ * Tracks
+ * Chapters
+ * Attachments
+ * Tags
+ * Cues
+ * Clusters
+
+25.3.4. Optimum Layout for Livestreaming
+
+ In livestreaming (Section 23.2), only a few elements make sense. For
+ example, SeekHead and Cues are useless. All elements other than the
+ Clusters MUST be placed before the Clusters.
+
+ * Info
+ * Tracks
+ * Attachments (rare)
+ * Tags
+ * Clusters
+
+26. Security Considerations
+
+ Matroska inherits security considerations from EBML [RFC8794].
+
+ Attacks on a Matroska Reader could include:
+
+ * Storage of an arbitrary and potentially executable data within an
+ Attachments element. Matroska Readers that extract or use data
+ from Matroska Attachments SHOULD check that the data adheres to
+ expectations or not use the attachment.
+
+ * A Matroska Attachment with an inaccurate media type.
+
+ * Damage to the Encryption and Compression fields (Section 14) that
+ would result in bogus binary data interpreted by the decoder.
+
+ * Chapter Codecs running unwanted commands on the host system.
+
+ The same error handling done for EBML applies to Matroska files.
+ Particular error handling is not covered in this specification, as
+ this is depends on the goal of the Matroska Readers. Matroska
+ Readers decide how to handle the errors whether or not they are
+ recoverable in their code. For example, if the checksum of the
+ \Segment\Tracks is invalid, some could decide to try to read the data
+ anyway, some will just reject the file, and most will not even check
+ it.
+
+ Matroska Reader implementations need to be robust against malicious
+ payloads. Those related to denial of service are outlined in
+ Section 2.1 of [RFC4732].
+
+ Although rarer, the same may apply to a Matroska Writer. Malicious
+ stream data must not cause the Matroska Writer to misbehave, as this
+ might allow an attacker access to transcoding gateways.
+
+ As an audio/video container format, a Matroska file or stream will
+ potentially encapsulate numerous byte streams created with a variety
+ of codecs. Implementers will need to consider the security
+ considerations of these encapsulated formats.
+
+27. IANA Considerations
+
+27.1. Matroska Element IDs Registry
+
+ IANA has created a new registry called the "Matroska Element IDs"
+ registry.
+
+ To register a new Element ID in this registry, one needs an Element
+ ID, an Element Name, a Change Controller, and an optional Reference
+ to a document describing the Element ID.
+
+ Element IDs are encoded using the VINT mechanism described in
+ Section 4 of [RFC8794] and can be between one and five octets long.
+ Five-octet Element IDs are possible only if declared in the EBML
+ Header.
+
+ Element IDs are described in Section 5 of [RFC8794], with the changes
+ in [Err7189] and [Err7191].
+
+ One-octet Matroska Element IDs (range 0x80-0xFE) are to be allocated
+ according to the "RFC Required" policy [RFC8126].
+
+ Two-octet Matroska Element IDs (range 0x407F-0x7FFE) are to be
+ allocated according to the "Specification Required" policy [RFC8126].
+
+ Two-octet Matroska Element IDs between 0x0100 and 0x407E are not
+ valid for use as an Element ID.
+
+ Three-octet (range 0x203FFF-0x3FFFFE) and four-octet Matroska Element
+ IDs (range 0x101FFFFF-0x1FFFFFFE) are to be allocated according to
+ the "First Come First Served" policy [RFC8126].
+
+ Three-octet Matroska Element IDs between 0x010000 and 0x203FFE are
+ not valid for use as an Element ID.
+
+ Four-octet Matroska Element IDs between 0x01000000 and 0x101FFFFE are
+ not valid for use as an Element ID.
+
+ The allowed values in the "Matroska Element IDs" registry are similar
+ to the ones found in the "EBML Element IDs" registry defined in
+ Section 17.1 of [RFC8794].
+
+ EBML Element IDs defined for the EBML Header -- as defined in
+ Section 17.1 of [RFC8794] -- MUST NOT be used as Matroska Element
+ IDs.
+
+ Given the scarcity of one-octet Element IDs, they should only be
+ created to save space for elements found many times in a file (for
+ example, BlockGroup or Chapters). The four-octet Element IDs are
+ mostly for synchronization of large elements. They should only be
+ used for such high-level elements. Elements that are not expected to
+ be used often should use three-octet Element IDs.
+
+ Elements found in Appendix A have an assigned Matroska Element ID for
+ historical reasons. These elements are not in use and SHOULD NOT be
+ reused unless there are no other IDs available with the desired size.
+ Such IDs are marked as "Reclaimed" in the "Matroska Element IDs"
+ registry, as they could be used for other things in the future.
+
+ Table 53 shows the initial contents of the "Matroska Element IDs"
+ registry. The Change Controller for the initial entries is the IETF.
+
+ +=====================+=============================+==============+
+ | Element ID| Element Name |Reference |
+ +=====================+=============================+==============+
+ | 0x80| ChapterDisplay |RFC 9559, |
+ | | |Section |
+ | | |5.1.7.1.4.9 |
+ +---------------------+-----------------------------+--------------+
+ | 0x83| TrackType |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.3 |
+ +---------------------+-----------------------------+--------------+
+ | 0x85| ChapString |RFC 9559, |
+ | | |Section |
+ | | |5.1.7.1.4.10 |
+ +---------------------+-----------------------------+--------------+
+ | 0x86| CodecID |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.21 |
+ +---------------------+-----------------------------+--------------+
+ | 0x88| FlagDefault |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.5 |
+ +---------------------+-----------------------------+--------------+
+ | 0x8E| Slices |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.5) |
+ +---------------------+-----------------------------+--------------+
+ | 0x91| ChapterTimeStart |RFC 9559, |
+ | | |Section |
+ | | |5.1.7.1.4.3 |
+ +---------------------+-----------------------------+--------------+
+ | 0x92| ChapterTimeEnd |RFC 9559, |
+ | | |Section |
+ | | |5.1.7.1.4.4 |
+ +---------------------+-----------------------------+--------------+
+ | 0x96| CueRefTime |RFC 9559, |
+ | | |Section |
+ | | |5.1.5.1.2.8 |
+ +---------------------+-----------------------------+--------------+
+ | 0x97| CueRefCluster |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.37)|
+ +---------------------+-----------------------------+--------------+
+ | 0x98| ChapterFlagHidden |RFC 9559, |
+ | | |Section |
+ | | |5.1.7.1.4.5 |
+ +---------------------+-----------------------------+--------------+
+ | 0x9A| FlagInterlaced |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0x9B| BlockDuration |RFC 9559, |
+ | | |Section |
+ | | |5.1.3.5.3 |
+ +---------------------+-----------------------------+--------------+
+ | 0x9C| FlagLacing |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.12 |
+ +---------------------+-----------------------------+--------------+
+ | 0x9D| FieldOrder |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.2 |
+ +---------------------+-----------------------------+--------------+
+ | 0x9F| Channels |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.29.3 |
+ +---------------------+-----------------------------+--------------+
+ | 0xA0| BlockGroup |RFC 9559, |
+ | | |Section |
+ | | |5.1.3.5 |
+ +---------------------+-----------------------------+--------------+
+ | 0xA1| Block |RFC 9559, |
+ | | |Section |
+ | | |5.1.3.5.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0xA2| BlockVirtual |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.3) |
+ +---------------------+-----------------------------+--------------+
+ | 0xA3| SimpleBlock |RFC 9559, |
+ | | |Section |
+ | | |5.1.3.4 |
+ +---------------------+-----------------------------+--------------+
+ | 0xA4| CodecState |RFC 9559, |
+ | | |Section |
+ | | |5.1.3.5.6 |
+ +---------------------+-----------------------------+--------------+
+ | 0xA5| BlockAdditional |RFC 9559, |
+ | | |Section |
+ | | |5.1.3.5.2.2 |
+ +---------------------+-----------------------------+--------------+
+ | 0xA6| BlockMore |RFC 9559, |
+ | | |Section |
+ | | |5.1.3.5.2.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0xA7| Position |RFC 9559, |
+ | | |Section |
+ | | |5.1.3.2 |
+ +---------------------+-----------------------------+--------------+
+ | 0xAA| CodecDecodeAll |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.22)|
+ +---------------------+-----------------------------+--------------+
+ | 0xAB| PrevSize |RFC 9559, |
+ | | |Section |
+ | | |5.1.3.3 |
+ +---------------------+-----------------------------+--------------+
+ | 0xAE| TrackEntry |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0xAF| EncryptedBlock |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.15)|
+ +---------------------+-----------------------------+--------------+
+ | 0xB0| PixelWidth |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.6 |
+ +---------------------+-----------------------------+--------------+
+ | 0xB2| CueDuration |RFC 9559, |
+ | | |Section |
+ | | |5.1.5.1.2.4 |
+ +---------------------+-----------------------------+--------------+
+ | 0xB3| CueTime |RFC 9559, |
+ | | |Section |
+ | | |5.1.5.1.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0xB5| SamplingFrequency |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.29.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0xB6| ChapterAtom |RFC 9559, |
+ | | |Section |
+ | | |5.1.7.1.4 |
+ +---------------------+-----------------------------+--------------+
+ | 0xB7| CueTrackPositions |RFC 9559, |
+ | | |Section |
+ | | |5.1.5.1.2 |
+ +---------------------+-----------------------------+--------------+
+ | 0xB9| FlagEnabled |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.4 |
+ +---------------------+-----------------------------+--------------+
+ | 0xBA| PixelHeight |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.7 |
+ +---------------------+-----------------------------+--------------+
+ | 0xBB| CuePoint |RFC 9559, |
+ | | |Section |
+ | | |5.1.5.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0xC0| TrickTrackUID |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.28)|
+ +---------------------+-----------------------------+--------------+
+ | 0xC1| TrickTrackSegmentUID |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.29)|
+ +---------------------+-----------------------------+--------------+
+ | 0xC4| TrickMasterTrackSegmentUID |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.32)|
+ +---------------------+-----------------------------+--------------+
+ | 0xC6| TrickTrackFlag |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.30)|
+ +---------------------+-----------------------------+--------------+
+ | 0xC7| TrickMasterTrackUID |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.31)|
+ +---------------------+-----------------------------+--------------+
+ | 0xC8| ReferenceFrame |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.12)|
+ +---------------------+-----------------------------+--------------+
+ | 0xC9| ReferenceOffset |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.13)|
+ +---------------------+-----------------------------+--------------+
+ | 0xCA| ReferenceTimestamp |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.14)|
+ +---------------------+-----------------------------+--------------+
+ | 0xCB| BlockAdditionID |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.9) |
+ +---------------------+-----------------------------+--------------+
+ | 0xCC| LaceNumber |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.7) |
+ +---------------------+-----------------------------+--------------+
+ | 0xCD| FrameNumber |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.8) |
+ +---------------------+-----------------------------+--------------+
+ | 0xCE| Delay |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.10)|
+ +---------------------+-----------------------------+--------------+
+ | 0xCF| SliceDuration |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.11)|
+ +---------------------+-----------------------------+--------------+
+ | 0xD7| TrackNumber |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0xDB| CueReference |RFC 9559, |
+ | | |Section |
+ | | |5.1.5.1.2.7 |
+ +---------------------+-----------------------------+--------------+
+ | 0xE0| Video |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28 |
+ +---------------------+-----------------------------+--------------+
+ | 0xE1| Audio |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.29 |
+ +---------------------+-----------------------------+--------------+
+ | 0xE2| TrackOperation |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.30 |
+ +---------------------+-----------------------------+--------------+
+ | 0xE3| TrackCombinePlanes |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.30.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0xE4| TrackPlane |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.30.2 |
+ +---------------------+-----------------------------+--------------+
+ | 0xE5| TrackPlaneUID |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.30.3 |
+ +---------------------+-----------------------------+--------------+
+ | 0xE6| TrackPlaneType |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.30.4 |
+ +---------------------+-----------------------------+--------------+
+ | 0xE7| Timestamp |RFC 9559, |
+ | | |Section |
+ | | |5.1.3.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0xE8| TimeSlice |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.6) |
+ +---------------------+-----------------------------+--------------+
+ | 0xE9| TrackJoinBlocks |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.30.5 |
+ +---------------------+-----------------------------+--------------+
+ | 0xEA| CueCodecState |RFC 9559, |
+ | | |Section |
+ | | |5.1.5.1.2.6 |
+ +---------------------+-----------------------------+--------------+
+ | 0xEB| CueRefCodecState |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.39)|
+ +---------------------+-----------------------------+--------------+
+ | 0xED| TrackJoinUID |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.30.6 |
+ +---------------------+-----------------------------+--------------+
+ | 0xEE| BlockAddID |RFC 9559, |
+ | | |Section |
+ | | |5.1.3.5.2.3 |
+ +---------------------+-----------------------------+--------------+
+ | 0xF0| CueRelativePosition |RFC 9559, |
+ | | |Section |
+ | | |5.1.5.1.2.3 |
+ +---------------------+-----------------------------+--------------+
+ | 0xF1| CueClusterPosition |RFC 9559, |
+ | | |Section |
+ | | |5.1.5.1.2.2 |
+ +---------------------+-----------------------------+--------------+
+ | 0xF7| CueTrack |RFC 9559, |
+ | | |Section |
+ | | |5.1.5.1.2.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0xFA| ReferencePriority |RFC 9559, |
+ | | |Section |
+ | | |5.1.3.5.4 |
+ +---------------------+-----------------------------+--------------+
+ | 0xFB| ReferenceBlock |RFC 9559, |
+ | | |Section |
+ | | |5.1.3.5.5 |
+ +---------------------+-----------------------------+--------------+
+ | 0xFD| ReferenceVirtual |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.4) |
+ +---------------------+-----------------------------+--------------+
+ | 0xFF| Reserved |RFC 9559 |
+ +---------------------+-----------------------------+--------------+
+ | 0x0100-0x407E| Not valid for use as an |RFC 9559, |
+ | | Element ID |Section 27.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0x41A4| BlockAddIDName |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.17.2 |
+ +---------------------+-----------------------------+--------------+
+ | 0x41E4| BlockAdditionMapping |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.17 |
+ +---------------------+-----------------------------+--------------+
+ | 0x41E7| BlockAddIDType |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.17.3 |
+ +---------------------+-----------------------------+--------------+
+ | 0x41ED| BlockAddIDExtraData |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.17.4 |
+ +---------------------+-----------------------------+--------------+
+ | 0x41F0| BlockAddIDValue |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.17.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0x4254| ContentCompAlgo |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.31.6 |
+ +---------------------+-----------------------------+--------------+
+ | 0x4255| ContentCompSettings |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.31.7 |
+ +---------------------+-----------------------------+--------------+
+ | 0x437C| ChapLanguage |RFC 9559, |
+ | | |Section |
+ | | |5.1.7.1.4.11 |
+ +---------------------+-----------------------------+--------------+
+ | 0x437D| ChapLanguageBCP47 |RFC 9559, |
+ | | |Section |
+ | | |5.1.7.1.4.12 |
+ +---------------------+-----------------------------+--------------+
+ | 0x437E| ChapCountry |RFC 9559, |
+ | | |Section |
+ | | |5.1.7.1.4.13 |
+ +---------------------+-----------------------------+--------------+
+ | 0x4444| SegmentFamily |RFC 9559, |
+ | | |Section |
+ | | |5.1.2.7 |
+ +---------------------+-----------------------------+--------------+
+ | 0x4461| DateUTC |RFC 9559, |
+ | | |Section |
+ | | |5.1.2.11 |
+ +---------------------+-----------------------------+--------------+
+ | 0x447A| TagLanguage |RFC 9559, |
+ | | |Section |
+ | | |5.1.8.1.2.2 |
+ +---------------------+-----------------------------+--------------+
+ | 0x447B| TagLanguageBCP47 |RFC 9559, |
+ | | |Section |
+ | | |5.1.8.1.2.3 |
+ +---------------------+-----------------------------+--------------+
+ | 0x4484| TagDefault |RFC 9559, |
+ | | |Section |
+ | | |5.1.8.1.2.4 |
+ +---------------------+-----------------------------+--------------+
+ | 0x4485| TagBinary |RFC 9559, |
+ | | |Section |
+ | | |5.1.8.1.2.6 |
+ +---------------------+-----------------------------+--------------+
+ | 0x4487| TagString |RFC 9559, |
+ | | |Section |
+ | | |5.1.8.1.2.5 |
+ +---------------------+-----------------------------+--------------+
+ | 0x4489| Duration |RFC 9559, |
+ | | |Section |
+ | | |5.1.2.10 |
+ +---------------------+-----------------------------+--------------+
+ | 0x44B4| TagDefaultBogus |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.43)|
+ +---------------------+-----------------------------+--------------+
+ | 0x450D| ChapProcessPrivate |RFC 9559, |
+ | | |Section |
+ | | |5.1.7.1.4.16 |
+ +---------------------+-----------------------------+--------------+
+ | 0x45A3| TagName |RFC 9559, |
+ | | |Section |
+ | | |5.1.8.1.2.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0x45B9| EditionEntry |RFC 9559, |
+ | | |Section |
+ | | |5.1.7.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0x45BC| EditionUID |RFC 9559, |
+ | | |Section |
+ | | |5.1.7.1.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0x45DB| EditionFlagDefault |RFC 9559, |
+ | | |Section |
+ | | |5.1.7.1.2 |
+ +---------------------+-----------------------------+--------------+
+ | 0x45DD| EditionFlagOrdered |RFC 9559, |
+ | | |Section |
+ | | |5.1.7.1.3 |
+ +---------------------+-----------------------------+--------------+
+ | 0x465C| FileData |RFC 9559, |
+ | | |Section |
+ | | |5.1.6.1.4 |
+ +---------------------+-----------------------------+--------------+
+ | 0x4660| FileMediaType |RFC 9559, |
+ | | |Section |
+ | | |5.1.6.1.3 |
+ +---------------------+-----------------------------+--------------+
+ | 0x4661| FileUsedStartTime |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.41)|
+ +---------------------+-----------------------------+--------------+
+ | 0x4662| FileUsedEndTime |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.42)|
+ +---------------------+-----------------------------+--------------+
+ | 0x466E| FileName |RFC 9559, |
+ | | |Section |
+ | | |5.1.6.1.2 |
+ +---------------------+-----------------------------+--------------+
+ | 0x4675| FileReferral |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.40)|
+ +---------------------+-----------------------------+--------------+
+ | 0x467E| FileDescription |RFC 9559, |
+ | | |Section |
+ | | |5.1.6.1.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0x46AE| FileUID |RFC 9559, |
+ | | |Section |
+ | | |5.1.6.1.5 |
+ +---------------------+-----------------------------+--------------+
+ | 0x47E1| ContentEncAlgo |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.31.9 |
+ +---------------------+-----------------------------+--------------+
+ | 0x47E2| ContentEncKeyID |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.31.10 |
+ +---------------------+-----------------------------+--------------+
+ | 0x47E3| ContentSignature |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.33)|
+ +---------------------+-----------------------------+--------------+
+ | 0x47E4| ContentSigKeyID |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.34)|
+ +---------------------+-----------------------------+--------------+
+ | 0x47E5| ContentSigAlgo |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.35)|
+ +---------------------+-----------------------------+--------------+
+ | 0x47E6| ContentSigHashAlgo |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.36)|
+ +---------------------+-----------------------------+--------------+
+ | 0x47E7| ContentEncAESSettings |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.31.11 |
+ +---------------------+-----------------------------+--------------+
+ | 0x47E8| AESSettingsCipherMode |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.31.12 |
+ +---------------------+-----------------------------+--------------+
+ | 0x4D80| MuxingApp |RFC 9559, |
+ | | |Section |
+ | | |5.1.2.13 |
+ +---------------------+-----------------------------+--------------+
+ | 0x4DBB| Seek |RFC 9559, |
+ | | |Section |
+ | | |5.1.1.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0x5031| ContentEncodingOrder |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.31.2 |
+ +---------------------+-----------------------------+--------------+
+ | 0x5032| ContentEncodingScope |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.31.3 |
+ +---------------------+-----------------------------+--------------+
+ | 0x5033| ContentEncodingType |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.31.4 |
+ +---------------------+-----------------------------+--------------+
+ | 0x5034| ContentCompression |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.31.5 |
+ +---------------------+-----------------------------+--------------+
+ | 0x5035| ContentEncryption |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.31.8 |
+ +---------------------+-----------------------------+--------------+
+ | 0x535F| CueRefNumber |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.38)|
+ +---------------------+-----------------------------+--------------+
+ | 0x536E| Name |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.18 |
+ +---------------------+-----------------------------+--------------+
+ | 0x5378| CueBlockNumber |RFC 9559, |
+ | | |Section |
+ | | |5.1.5.1.2.5 |
+ +---------------------+-----------------------------+--------------+
+ | 0x537F| TrackOffset |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.18)|
+ +---------------------+-----------------------------+--------------+
+ | 0x53AB| SeekID |RFC 9559, |
+ | | |Section |
+ | | |5.1.1.1.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0x53AC| SeekPosition |RFC 9559, |
+ | | |Section |
+ | | |5.1.1.1.2 |
+ +---------------------+-----------------------------+--------------+
+ | 0x53B8| StereoMode |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.3 |
+ +---------------------+-----------------------------+--------------+
+ | 0x53B9| OldStereoMode |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.5 |
+ +---------------------+-----------------------------+--------------+
+ | 0x53C0| AlphaMode |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.4 |
+ +---------------------+-----------------------------+--------------+
+ | 0x54AA| PixelCropBottom |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.8 |
+ +---------------------+-----------------------------+--------------+
+ | 0x54B0| DisplayWidth |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.12 |
+ +---------------------+-----------------------------+--------------+
+ | 0x54B2| DisplayUnit |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.14 |
+ +---------------------+-----------------------------+--------------+
+ | 0x54B3| AspectRatioType |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.24)|
+ +---------------------+-----------------------------+--------------+
+ | 0x54BA| DisplayHeight |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.13 |
+ +---------------------+-----------------------------+--------------+
+ | 0x54BB| PixelCropTop |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.9 |
+ +---------------------+-----------------------------+--------------+
+ | 0x54CC| PixelCropLeft |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.10 |
+ +---------------------+-----------------------------+--------------+
+ | 0x54DD| PixelCropRight |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.11 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55AA| FlagForced |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.6 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55AB| FlagHearingImpaired |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.7 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55AC| FlagVisualImpaired |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.8 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55AD| FlagTextDescriptions |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.9 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55AE| FlagOriginal |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.10 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55AF| FlagCommentary |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.11 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55B0| Colour |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.16 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55B1| MatrixCoefficients |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.17 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55B2| BitsPerChannel |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.18 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55B3| ChromaSubsamplingHorz |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.19 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55B4| ChromaSubsamplingVert |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.20 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55B5| CbSubsamplingHorz |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.21 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55B6| CbSubsamplingVert |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.22 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55B7| ChromaSitingHorz |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.23 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55B8| ChromaSitingVert |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.24 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55B9| Range |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.25 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55BA| TransferCharacteristics |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.26 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55BB| Primaries |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.27 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55BC| MaxCLL |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.28 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55BD| MaxFALL |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.29 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55D0| MasteringMetadata |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.30 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55D1| PrimaryRChromaticityX |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.31 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55D2| PrimaryRChromaticityY |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.32 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55D3| PrimaryGChromaticityX |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.33 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55D4| PrimaryGChromaticityY |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.34 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55D5| PrimaryBChromaticityX |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.35 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55D6| PrimaryBChromaticityY |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.36 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55D7| WhitePointChromaticityX |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.37 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55D8| WhitePointChromaticityY |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.38 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55D9| LuminanceMax |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.39 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55DA| LuminanceMin |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.40 |
+ +---------------------+-----------------------------+--------------+
+ | 0x55EE| MaxBlockAdditionID |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.16 |
+ +---------------------+-----------------------------+--------------+
+ | 0x5654| ChapterStringUID |RFC 9559, |
+ | | |Section |
+ | | |5.1.7.1.4.2 |
+ +---------------------+-----------------------------+--------------+
+ | 0x56AA| CodecDelay |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.25 |
+ +---------------------+-----------------------------+--------------+
+ | 0x56BB| SeekPreRoll |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.26 |
+ +---------------------+-----------------------------+--------------+
+ | 0x5741| WritingApp |RFC 9559, |
+ | | |Section |
+ | | |5.1.2.14 |
+ +---------------------+-----------------------------+--------------+
+ | 0x5854| SilentTracks |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.1) |
+ +---------------------+-----------------------------+--------------+
+ | 0x58D7| SilentTrackNumber |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.2) |
+ +---------------------+-----------------------------+--------------+
+ | 0x61A7| AttachedFile |RFC 9559, |
+ | | |Section |
+ | | |5.1.6.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0x6240| ContentEncoding |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.31.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0x6264| BitDepth |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.29.4 |
+ +---------------------+-----------------------------+--------------+
+ | 0x63A2| CodecPrivate |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.22 |
+ +---------------------+-----------------------------+--------------+
+ | 0x63C0| Targets |RFC 9559, |
+ | | |Section |
+ | | |5.1.8.1.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0x63C3| ChapterPhysicalEquiv |RFC 9559, |
+ | | |Section |
+ | | |5.1.7.1.4.8 |
+ +---------------------+-----------------------------+--------------+
+ | 0x63C4| TagChapterUID |RFC 9559, |
+ | | |Section |
+ | | |5.1.8.1.1.5 |
+ +---------------------+-----------------------------+--------------+
+ | 0x63C5| TagTrackUID |RFC 9559, |
+ | | |Section |
+ | | |5.1.8.1.1.3 |
+ +---------------------+-----------------------------+--------------+
+ | 0x63C6| TagAttachmentUID |RFC 9559, |
+ | | |Section |
+ | | |5.1.8.1.1.6 |
+ +---------------------+-----------------------------+--------------+
+ | 0x63C9| TagEditionUID |RFC 9559, |
+ | | |Section |
+ | | |5.1.8.1.1.4 |
+ +---------------------+-----------------------------+--------------+
+ | 0x63CA| TargetType |RFC 9559, |
+ | | |Section |
+ | | |5.1.8.1.1.2 |
+ +---------------------+-----------------------------+--------------+
+ | 0x6624| TrackTranslate |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.27 |
+ +---------------------+-----------------------------+--------------+
+ | 0x66A5| TrackTranslateTrackID |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.27.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0x66BF| TrackTranslateCodec |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.27.2 |
+ +---------------------+-----------------------------+--------------+
+ | 0x66FC| TrackTranslateEditionUID |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.27.3 |
+ +---------------------+-----------------------------+--------------+
+ | 0x67C8| SimpleTag |RFC 9559, |
+ | | |Section |
+ | | |5.1.8.1.2 |
+ +---------------------+-----------------------------+--------------+
+ | 0x68CA| TargetTypeValue |RFC 9559, |
+ | | |Section |
+ | | |5.1.8.1.1.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0x6911| ChapProcessCommand |RFC 9559, |
+ | | |Section |
+ | | |5.1.7.1.4.17 |
+ +---------------------+-----------------------------+--------------+
+ | 0x6922| ChapProcessTime |RFC 9559, |
+ | | |Section |
+ | | |5.1.7.1.4.18 |
+ +---------------------+-----------------------------+--------------+
+ | 0x6924| ChapterTranslate |RFC 9559, |
+ | | |Section |
+ | | |5.1.2.8 |
+ +---------------------+-----------------------------+--------------+
+ | 0x6933| ChapProcessData |RFC 9559, |
+ | | |Section |
+ | | |5.1.7.1.4.19 |
+ +---------------------+-----------------------------+--------------+
+ | 0x6944| ChapProcess |RFC 9559, |
+ | | |Section |
+ | | |5.1.7.1.4.14 |
+ +---------------------+-----------------------------+--------------+
+ | 0x6955| ChapProcessCodecID |RFC 9559, |
+ | | |Section |
+ | | |5.1.7.1.4.15 |
+ +---------------------+-----------------------------+--------------+
+ | 0x69A5| ChapterTranslateID |RFC 9559, |
+ | | |Section |
+ | | |5.1.2.8.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0x69BF| ChapterTranslateCodec |RFC 9559, |
+ | | |Section |
+ | | |5.1.2.8.2 |
+ +---------------------+-----------------------------+--------------+
+ | 0x69FC| ChapterTranslateEditionUID |RFC 9559, |
+ | | |Section |
+ | | |5.1.2.8.3 |
+ +---------------------+-----------------------------+--------------+
+ | 0x6D80| ContentEncodings |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.31 |
+ +---------------------+-----------------------------+--------------+
+ | 0x6DE7| MinCache |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.16)|
+ +---------------------+-----------------------------+--------------+
+ | 0x6DF8| MaxCache |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.17)|
+ +---------------------+-----------------------------+--------------+
+ | 0x6E67| ChapterSegmentUUID |RFC 9559, |
+ | | |Section |
+ | | |5.1.7.1.4.6 |
+ +---------------------+-----------------------------+--------------+
+ | 0x6EBC| ChapterSegmentEditionUID |RFC 9559, |
+ | | |Section |
+ | | |5.1.7.1.4.7 |
+ +---------------------+-----------------------------+--------------+
+ | 0x6FAB| TrackOverlay |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.23)|
+ +---------------------+-----------------------------+--------------+
+ | 0x7373| Tag |RFC 9559, |
+ | | |Section |
+ | | |5.1.8.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0x7384| SegmentFilename |RFC 9559, |
+ | | |Section |
+ | | |5.1.2.2 |
+ +---------------------+-----------------------------+--------------+
+ | 0x73A4| SegmentUUID |RFC 9559, |
+ | | |Section |
+ | | |5.1.2.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0x73C4| ChapterUID |RFC 9559, |
+ | | |Section |
+ | | |5.1.7.1.4.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0x73C5| TrackUID |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.2 |
+ +---------------------+-----------------------------+--------------+
+ | 0x7446| AttachmentLink |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.24 |
+ +---------------------+-----------------------------+--------------+
+ | 0x75A1| BlockAdditions |RFC 9559, |
+ | | |Section |
+ | | |5.1.3.5.2 |
+ +---------------------+-----------------------------+--------------+
+ | 0x75A2| DiscardPadding |RFC 9559, |
+ | | |Section |
+ | | |5.1.3.5.7 |
+ +---------------------+-----------------------------+--------------+
+ | 0x7670| Projection |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.41 |
+ +---------------------+-----------------------------+--------------+
+ | 0x7671| ProjectionType |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.42 |
+ +---------------------+-----------------------------+--------------+
+ | 0x7672| ProjectionPrivate |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.43 |
+ +---------------------+-----------------------------+--------------+
+ | 0x7673| ProjectionPoseYaw |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.44 |
+ +---------------------+-----------------------------+--------------+
+ | 0x7674| ProjectionPosePitch |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.45 |
+ +---------------------+-----------------------------+--------------+
+ | 0x7675| ProjectionPoseRoll |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.46 |
+ +---------------------+-----------------------------+--------------+
+ | 0x78B5| OutputSamplingFrequency |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.29.2 |
+ +---------------------+-----------------------------+--------------+
+ | 0x7BA9| Title |RFC 9559, |
+ | | |Section |
+ | | |5.1.2.12 |
+ +---------------------+-----------------------------+--------------+
+ | 0x7D7B| ChannelPositions |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.27)|
+ +---------------------+-----------------------------+--------------+
+ | 0x7FFF| Reserved |RFC 9559 |
+ +---------------------+-----------------------------+--------------+
+ | 0x010000-0x203FFE| Not valid for use as an |RFC 9559, |
+ | | Element ID |Section 27.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0x22B59C| Language |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.19 |
+ +---------------------+-----------------------------+--------------+
+ | 0x22B59D| LanguageBCP47 |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.20 |
+ +---------------------+-----------------------------+--------------+
+ | 0x23314F| TrackTimestampScale |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.15 |
+ +---------------------+-----------------------------+--------------+
+ | 0x234E7A| DefaultDecodedFieldDuration |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.14 |
+ +---------------------+-----------------------------+--------------+
+ | 0x2383E3| FrameRate |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.26)|
+ +---------------------+-----------------------------+--------------+
+ | 0x23E383| DefaultDuration |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.13 |
+ +---------------------+-----------------------------+--------------+
+ | 0x258688| CodecName |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.23 |
+ +---------------------+-----------------------------+--------------+
+ | 0x26B240| CodecDownloadURL |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.21)|
+ +---------------------+-----------------------------+--------------+
+ | 0x2AD7B1| TimestampScale |RFC 9559, |
+ | | |Section |
+ | | |5.1.2.9 |
+ +---------------------+-----------------------------+--------------+
+ | 0x2EB524| UncompressedFourCC |RFC 9559, |
+ | | |Section |
+ | | |5.1.4.1.28.15 |
+ +---------------------+-----------------------------+--------------+
+ | 0x2FB523| GammaValue |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.25)|
+ +---------------------+-----------------------------+--------------+
+ | 0x3A9697| CodecSettings |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.19)|
+ +---------------------+-----------------------------+--------------+
+ | 0x3B4040| CodecInfoURL |Reclaimed (RFC|
+ | | |9559, |
+ | | |Appendix A.20)|
+ +---------------------+-----------------------------+--------------+
+ | 0x3C83AB| PrevFilename |RFC 9559, |
+ | | |Section |
+ | | |5.1.2.4 |
+ +---------------------+-----------------------------+--------------+
+ | 0x3CB923| PrevUUID |RFC 9559, |
+ | | |Section |
+ | | |5.1.2.3 |
+ +---------------------+-----------------------------+--------------+
+ | 0x3E83BB| NextFilename |RFC 9559, |
+ | | |Section |
+ | | |5.1.2.6 |
+ +---------------------+-----------------------------+--------------+
+ | 0x3EB923| NextUUID |RFC 9559, |
+ | | |Section |
+ | | |5.1.2.5 |
+ +---------------------+-----------------------------+--------------+
+ | 0x3FFFFF| Reserved |RFC 9559 |
+ +---------------------+-----------------------------+--------------+
+ |0x01000000-0x101FFFFE| Not valid for use as an |RFC 9559, |
+ | | Element ID |Section 27.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0x1043A770| Chapters |RFC 9559, |
+ | | |Section 5.1.7 |
+ +---------------------+-----------------------------+--------------+
+ | 0x114D9B74| SeekHead |RFC 9559, |
+ | | |Section 5.1.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0x1254C367| Tags |RFC 9559, |
+ | | |Section 5.1.8 |
+ +---------------------+-----------------------------+--------------+
+ | 0x1549A966| Info |RFC 9559, |
+ | | |Section 5.1.2 |
+ +---------------------+-----------------------------+--------------+
+ | 0x1654AE6B| Tracks |RFC 9559, |
+ | | |Section 5.1.4 |
+ +---------------------+-----------------------------+--------------+
+ | 0x18538067| Segment |RFC 9559, |
+ | | |Section 5.1 |
+ +---------------------+-----------------------------+--------------+
+ | 0x1941A469| Attachments |RFC 9559, |
+ | | |Section 5.1.6 |
+ +---------------------+-----------------------------+--------------+
+ | 0x1C53BB6B| Cues |RFC 9559, |
+ | | |Section 5.1.5 |
+ +---------------------+-----------------------------+--------------+
+ | 0x1F43B675| Cluster |RFC 9559, |
+ | | |Section 5.1.3 |
+ +---------------------+-----------------------------+--------------+
+ | 0x1FFFFFFF| Reserved |RFC 9559 |
+ +---------------------+-----------------------------+--------------+
+
+ Table 53: Initial Contents of "Matroska Element IDs" Registry
+
+27.2. Matroska Compression Algorithms Registry
+
+ IANA has created a new registry called the "Matroska Compression
+ Algorithms" registry. The values correspond to the unsigned integer
+ ContentCompAlgo value described in Section 5.1.4.1.31.6.
+
+ To register a new Compression Algorithm in this registry, one needs a
+ Compression Algorithm value, a description, a Change Controller, and
+ a Reference to a document describing the Compression Algorithm.
+
+ The Compression Algorithms are to be allocated according to the
+ "Specification Required" policy [RFC8126]. Available values range
+ from 4-18446744073709551615.
+
+ Table 54 shows the initial contents of the "Matroska Compression
+ Algorithms" registry. The Change Controller for the initial entries
+ is the IETF.
+
+ +=======================+=============+===================+
+ | Compression Algorithm | Description | Reference |
+ +=======================+=============+===================+
+ | 0 | zlib | RFC 9559, Section |
+ | | | 5.1.4.1.31.6 |
+ +-----------------------+-------------+-------------------+
+ | 1 | bzlib | RFC 9559, Section |
+ | | | 5.1.4.1.31.6 |
+ +-----------------------+-------------+-------------------+
+ | 2 | lzo1x | RFC 9559, Section |
+ | | | 5.1.4.1.31.6 |
+ +-----------------------+-------------+-------------------+
+ | 3 | Header | RFC 9559, Section |
+ | | Stripping | 5.1.4.1.31.6 |
+ +-----------------------+-------------+-------------------+
+
+ Table 54: Initial Contents of "Matroska Compression
+ Algorithms" Registry
+
+27.3. Matroska Encryption Algorithms Registry
+
+ IANA has created a new registry called the "Matroska Encryption
+ Algorithms" registry. The values correspond to the unsigned integer
+ ContentEncAlgo value described in Section 5.1.4.1.31.9.
+
+ To register a new Encryption Algorithm in this registry, one needs an
+ Encryption Algorithm value, a description, a Change Controller, and
+ an optional Reference to a document describing the Encryption
+ Algorithm.
+
+ The Encryption Algorithms are to be allocated according to the "First
+ Come First Served" policy [RFC8126]. Available values range from
+ 6-18446744073709551615.
+
+ Table 55 shows the initial contents of the "Matroska Encryption
+ Algorithms" registry. The Change Controller for the initial entries
+ is the IETF.
+
+ +======================+===============+===================+
+ | Encryption Algorithm | Description | Reference |
+ +======================+===============+===================+
+ | 0 | Not encrypted | RFC 9559, Section |
+ | | | 5.1.4.1.31.9 |
+ +----------------------+---------------+-------------------+
+ | 1 | DES | RFC 9559, Section |
+ | | | 5.1.4.1.31.9 |
+ +----------------------+---------------+-------------------+
+ | 2 | 3DES | RFC 9559, Section |
+ | | | 5.1.4.1.31.9 |
+ +----------------------+---------------+-------------------+
+ | 3 | Twofish | RFC 9559, Section |
+ | | | 5.1.4.1.31.9 |
+ +----------------------+---------------+-------------------+
+ | 4 | Blowfish | RFC 9559, Section |
+ | | | 5.1.4.1.31.9 |
+ +----------------------+---------------+-------------------+
+ | 5 | AES | RFC 9559, Section |
+ | | | 5.1.4.1.31.9 |
+ +----------------------+---------------+-------------------+
+
+ Table 55: Initial Contents of "Matroska Encryption
+ Algorithms" Registry
+
+27.4. Matroska AES Cipher Modes Registry
+
+ IANA has created a new registry called the "Matroska AES Cipher
+ Modes" registry. The values correspond to the unsigned integer
+ AESSettingsCipherMode value described in Section 5.1.4.1.31.12.
+
+ To register a new AES Cipher Mode in this registry, one needs an AES
+ Cipher Mode value, a description, a Change Controller, and an
+ optional Reference to a document describing the AES Cipher Mode.
+
+ The AES Cipher Modes are to be allocated according to the "First Come
+ First Served" policy [RFC8126]. Available values range from
+ 3-18446744073709551615.
+
+ The value 0 is not valid for use as an AES Cipher Mode.
+
+ Table 56 shows the initial contents of the "Matroska AES Cipher
+ Modes" registry. The Change Controller for the initial entries is
+ the IETF.
+
+ +=================+======================+===================+
+ | AES Cipher Mode | Description | Reference |
+ +=================+======================+===================+
+ | 0 | Not valid for use as | RFC 9559, Section |
+ | | an AES Cipher Mode | 5.1.4.1.31.12 |
+ +-----------------+----------------------+-------------------+
+ | 1 | AES-CTR | RFC 9559, Section |
+ | | | 5.1.4.1.31.12 |
+ +-----------------+----------------------+-------------------+
+ | 2 | AES-CBC | RFC 9559, Section |
+ | | | 5.1.4.1.31.12 |
+ +-----------------+----------------------+-------------------+
+
+ Table 56: Initial Contents of "Matroska AES Cipher Modes"
+ Registry
+
+27.5. Matroska Content Encoding Scopes Registry
+
+ IANA has created a new registry called the "Matroska Content Encoding
+ Scopes" registry. The values correspond to the unsigned integer
+ ContentEncodingScope value described in Section 5.1.4.1.31.3.
+
+ To register a new Content Encoding Scope in this registry, one needs
+ a Content Encoding Scope value, a description, a Change Controller,
+ and a Reference to a document describing the Content Encoding Scope.
+
+ The Content Encoding Scopes are to be allocated according to the
+ "Specification Required" policy [RFC8126]. Available values range
+ from 0x8-0x8000000000000000.
+
+ The Content Encoding Scope is a bit-field value, so only power of 2
+ values can be registered.
+
+ The value 0 is not valid for use as a Content Encoding Scope.
+
+ Table 57 shows the initial contents of the "Matroska Content Encoding
+ Scopes" registry. The Change Controller for the initial entries is
+ the IETF.
+
+ +================+========================+===================+
+ | Content | Description | Reference |
+ | Encoding Scope | | |
+ +================+========================+===================+
+ | 0x0 | Not valid for use as a | RFC 9559, Section |
+ | | Content Encoding Scope | 5.1.4.1.31.3 |
+ +----------------+------------------------+-------------------+
+ | 0x1 | Block | RFC 9559, Section |
+ | | | 5.1.4.1.31.3 |
+ +----------------+------------------------+-------------------+
+ | 0x2 | Private | RFC 9559, Section |
+ | | | 5.1.4.1.31.3 |
+ +----------------+------------------------+-------------------+
+ | 0x4 | Next | RFC 9559, Section |
+ | | | 5.1.4.1.31.3 |
+ +----------------+------------------------+-------------------+
+
+ Table 57: Initial Contents of "Matroska Content Encoding
+ Scopes" Registry
+
+27.6. Matroska Content Encoding Types Registry
+
+ IANA has created a new registry called the "Matroska Content Encoding
+ Types" registry. The values correspond to the unsigned integer
+ ContentEncodingType value described in Section 5.1.4.1.31.4.
+
+ To register a new Content Encoding Type in this registry, one needs a
+ Content Encoding Type value, a description, a Change Controller, and
+ a Reference to a document describing the Content Encoding Type.
+
+ The Content Encoding Types are to be allocated according to the
+ "Specification Required" policy [RFC8126]. Available values range
+ from 2-18446744073709551615.
+
+ Table 58 shows the initial contents of the "Matroska Content Encoding
+ Types" registry. The Change Controller for the initial entries is
+ the IETF.
+
+ +=======================+=============+===================+
+ | Content Encoding Type | Description | Reference |
+ +=======================+=============+===================+
+ | 0 | Compression | RFC 9559, Section |
+ | | | 5.1.4.1.31.4 |
+ +-----------------------+-------------+-------------------+
+ | 1 | Encryption | RFC 9559, Section |
+ | | | 5.1.4.1.31.4 |
+ +-----------------------+-------------+-------------------+
+
+ Table 58: Initial Contents of "Matroska Content
+ Encoding Types" Registry
+
+27.7. Matroska Stereo Modes Registry
+
+ IANA has created a new registry called the "Matroska Stereo Modes"
+ registry. The values correspond to the unsigned integer StereoMode
+ value described in Section 5.1.4.1.28.3.
+
+ To register a new Stereo Mode in this registry, one needs a Stereo
+ Mode value, a description, a Change Controller, and a Reference to a
+ document describing the Stereo Mode.
+
+ The Stereo Modes are to be allocated according to the "Specification
+ Required" policy [RFC8126]. Available values range from
+ 15-18446744073709551615.
+
+ Table 59 shows the initial contents of the "Matroska Stereo Modes"
+ registry. The Change Controller for the initial entries is the IETF.
+
+ +=============+============================+===================+
+ | Stereo Mode | Description | Reference |
+ +=============+============================+===================+
+ | 0 | mono | RFC 9559, Section |
+ | | | 5.1.4.1.28.3 |
+ +-------------+----------------------------+-------------------+
+ | 1 | side by side (left eye | RFC 9559, Section |
+ | | first) | 5.1.4.1.28.3 |
+ +-------------+----------------------------+-------------------+
+ | 2 | top - bottom (right eye is | RFC 9559, Section |
+ | | first) | 5.1.4.1.28.3 |
+ +-------------+----------------------------+-------------------+
+ | 3 | top - bottom (left eye is | RFC 9559, Section |
+ | | first) | 5.1.4.1.28.3 |
+ +-------------+----------------------------+-------------------+
+ | 4 | checkboard (right eye is | RFC 9559, Section |
+ | | first) | 5.1.4.1.28.3 |
+ +-------------+----------------------------+-------------------+
+ | 5 | checkboard (left eye is | RFC 9559, Section |
+ | | first) | 5.1.4.1.28.3 |
+ +-------------+----------------------------+-------------------+
+ | 6 | row interleaved (right eye | RFC 9559, Section |
+ | | is first) | 5.1.4.1.28.3 |
+ +-------------+----------------------------+-------------------+
+ | 7 | row interleaved (left eye | RFC 9559, Section |
+ | | is first) | 5.1.4.1.28.3 |
+ +-------------+----------------------------+-------------------+
+ | 8 | column interleaved (right | RFC 9559, Section |
+ | | eye is first) | 5.1.4.1.28.3 |
+ +-------------+----------------------------+-------------------+
+ | 9 | column interleaved (left | RFC 9559, Section |
+ | | eye is first) | 5.1.4.1.28.3 |
+ +-------------+----------------------------+-------------------+
+ | 10 | anaglyph (cyan/red) | RFC 9559, Section |
+ | | | 5.1.4.1.28.3 |
+ +-------------+----------------------------+-------------------+
+ | 11 | side by side (right eye | RFC 9559, Section |
+ | | first) | 5.1.4.1.28.3 |
+ +-------------+----------------------------+-------------------+
+ | 12 | anaglyph (green/magenta) | RFC 9559, Section |
+ | | | 5.1.4.1.28.3 |
+ +-------------+----------------------------+-------------------+
+ | 13 | both eyes laced in one | RFC 9559, Section |
+ | | Block (left eye is first) | 5.1.4.1.28.3 |
+ +-------------+----------------------------+-------------------+
+ | 14 | both eyes laced in one | RFC 9559, Section |
+ | | Block (right eye is first) | 5.1.4.1.28.3 |
+ +-------------+----------------------------+-------------------+
+
+ Table 59: Initial Contents of "Matroska Stereo Modes" Registry
+
+27.8. Matroska Alpha Modes Registry
+
+ IANA has created a new registry called the "Matroska Alpha Modes"
+ registry. The values correspond to the unsigned integer AlphaMode
+ value described in Section 5.1.4.1.28.4.
+
+ To register a new Alpha Mode in this registry, one needs an Alpha
+ Mode value, a description, a Change Controller, and an optional
+ Reference to a document describing the Alpha Mode.
+
+ The Alpha Modes are to be allocated according to the "First Come
+ First Served" policy [RFC8126]. Available values range from
+ 2-18446744073709551615.
+
+ Table 60 shows the initial contents of the "Matroska Alpha Modes"
+ registry. The Change Controller for the initial entries is the IETF.
+
+ +============+=============+================================+
+ | Alpha Mode | Description | Reference |
+ +============+=============+================================+
+ | 0 | none | RFC 9559, Section 5.1.4.1.28.4 |
+ +------------+-------------+--------------------------------+
+ | 1 | present | RFC 9559, Section 5.1.4.1.28.4 |
+ +------------+-------------+--------------------------------+
+
+ Table 60: Initial Contents of "Matroska Alpha Modes" Registry
+
+27.9. Matroska Display Units Registry
+
+ IANA has created a new registry called the "Matroska Display Units"
+ registry. The values correspond to the unsigned integer DisplayUnit
+ value described in Section 5.1.4.1.28.14.
+
+ To register a new Display Unit in this registry, one needs a Display
+ Unit value, a description, a Change Controller, and a Reference to a
+ document describing the Display Unit.
+
+ The Display Units are to be allocated according to the "Specification
+ Required" policy [RFC8126]. Available values range from
+ 5-18446744073709551615.
+
+ Table 61 shows the initial contents of the "Matroska Display Units"
+ registry. The Change Controller for the initial entries is the IETF.
+
+ +==============+==============+=================================+
+ | Display Unit | Description | Reference |
+ +==============+==============+=================================+
+ | 0 | pixels | RFC 9559, Section 5.1.4.1.28.14 |
+ +--------------+--------------+---------------------------------+
+ | 1 | centimeters | RFC 9559, Section 5.1.4.1.28.14 |
+ +--------------+--------------+---------------------------------+
+ | 2 | inches | RFC 9559, Section 5.1.4.1.28.14 |
+ +--------------+--------------+---------------------------------+
+ | 3 | display | RFC 9559, Section 5.1.4.1.28.14 |
+ | | aspect ratio | |
+ +--------------+--------------+---------------------------------+
+ | 4 | unknown | RFC 9559, Section 5.1.4.1.28.14 |
+ +--------------+--------------+---------------------------------+
+
+ Table 61: Initial Contents of "Matroska Display Units" Registry
+
+27.10. Matroska Horizontal Chroma Sitings Registry
+
+ IANA has created a new registry called the "Matroska Horizontal
+ Chroma Sitings" registry. The values correspond to the unsigned
+ integer ChromaSitingHorz value described in Section 5.1.4.1.28.23.
+
+ To register a new Horizontal Chroma Siting in this registry, one
+ needs a Horizontal Chroma Siting value, a description, a Change
+ Controller, and an optional Reference to a document describing the
+ Horizontal Chroma Siting.
+
+ The Horizontal Chroma Sitings are to be allocated according to the
+ "First Come First Served" policy [RFC8126]. Available values range
+ from 3-18446744073709551615.
+
+ Table 62 shows the initial contents of the "Matroska Horizontal
+ Chroma Sitings" registry. The Change Controller for the initial
+ entries is the IETF.
+
+ +==========================+=============+===================+
+ | Horizontal Chroma Siting | Description | Reference |
+ +==========================+=============+===================+
+ | 0 | unspecified | RFC 9559, Section |
+ | | | 5.1.4.1.28.23 |
+ +--------------------------+-------------+-------------------+
+ | 1 | left | RFC 9559, Section |
+ | | collocated | 5.1.4.1.28.23 |
+ +--------------------------+-------------+-------------------+
+ | 2 | half | RFC 9559, Section |
+ | | | 5.1.4.1.28.23 |
+ +--------------------------+-------------+-------------------+
+
+ Table 62: Initial Contents of "Matroska Horizontal Chroma
+ Sitings" Registry
+
+27.11. Matroska Vertical Chroma Sitings Registry
+
+ IANA has created a new registry called the "Matroska Vertical Chroma
+ Sitings" registry. The values correspond to the unsigned integer
+ ChromaSitingVert value described in Section 5.1.4.1.28.24.
+
+ To register a new Vertical Chroma Siting in this registry, one needs
+ a Vertical Chroma Siting value, a description, a Change Controller,
+ and an optional Reference to a document describing the Vertical
+ Chroma Siting.
+
+ The Vertical Chroma Sitings are to be allocated according to the
+ "First Come First Served" policy [RFC8126]. Available values range
+ from 3-18446744073709551615.
+
+ Table 63 shows the initial contents of the "Matroska Vertical Chroma
+ Sitings" registry. The Change Controller for the initial entries is
+ the IETF.
+
+ +========================+=============+===================+
+ | Vertical Chroma Siting | Description | Reference |
+ +========================+=============+===================+
+ | 0 | unspecified | RFC 9559, Section |
+ | | | 5.1.4.1.28.24 |
+ +------------------------+-------------+-------------------+
+ | 1 | top | RFC 9559, Section |
+ | | collocated | 5.1.4.1.28.24 |
+ +------------------------+-------------+-------------------+
+ | 2 | half | RFC 9559, Section |
+ | | | 5.1.4.1.28.24 |
+ +------------------------+-------------+-------------------+
+
+ Table 63: Initial Contents of "Matroska Vertical Chroma
+ Sitings" Registry
+
+27.12. Matroska Color Ranges Registry
+
+ IANA has created a new registry called the "Matroska Color Ranges"
+ registry. The values correspond to the unsigned integer Range value
+ described in Section 5.1.4.1.28.25.
+
+ To register a new Color Range in this registry, one needs a Color
+ Range value, a description, a Change Controller, and a Reference to a
+ document describing the Color Range.
+
+ The Color Ranges are to be allocated according to the "Specification
+ Required" policy [RFC8126]. Available values range from
+ 4-18446744073709551615.
+
+ Table 64 shows the initial contents of the "Matroska Color Ranges"
+ registry. The Change Controller for the initial entries is the IETF.
+
+ +=============+===============================+===================+
+ | Color Range | Description | Reference |
+ +=============+===============================+===================+
+ | 0 | unspecified | RFC 9559, Section |
+ | | | 5.1.4.1.28.25 |
+ +-------------+-------------------------------+-------------------+
+ | 1 | broadcast range | RFC 9559, Section |
+ | | | 5.1.4.1.28.25 |
+ +-------------+-------------------------------+-------------------+
+ | 2 | full range (no clipping) | RFC 9559, Section |
+ | | | 5.1.4.1.28.25 |
+ +-------------+-------------------------------+-------------------+
+ | 3 | defined by MatrixCoefficients | RFC 9559, Section |
+ | | / TransferCharacteristics | 5.1.4.1.28.25 |
+ +-------------+-------------------------------+-------------------+
+
+ Table 64: Initial Contents of "Matroska Color Ranges" Registry
+
+27.13. Matroska Tags Target Types Registry
+
+ IANA has created a new registry called the "Matroska Tags Target
+ Types" registry. The values correspond to the unsigned integer
+ TargetTypeValue value described in Section 5.1.8.1.1.1.
+
+ To register a new Tags Target Type in this registry, one needs a Tags
+ Target Type value, a description, a Change Controller, and a
+ Reference to a document describing the Tags Target Type.
+
+ The Tags Target Types are to be allocated according to the
+ "Specification Required" policy [RFC8126]. Available values range
+ from 1-9, 11-19, 21-29, 31-39, 41-49, 51-59, 61-69, and
+ 71-18446744073709551615.
+
+ The value 0 is not valid for use as a Tags Target Type.
+
+ Table 65 shows the initial contents of the "Matroska Tags Target
+ Types" registry. The Change Controller for the initial entries is
+ the IETF.
+
+ +==================+==========================+===================+
+ | Tags Target Type | Description | Reference |
+ +==================+==========================+===================+
+ | 70 | COLLECTION | RFC 9559, Section |
+ | | | 5.1.8.1.1.1 |
+ +------------------+--------------------------+-------------------+
+ | 60 | EDITION / ISSUE / VOLUME | RFC 9559, Section |
+ | | / OPUS / SEASON / SEQUEL | 5.1.8.1.1.1 |
+ +------------------+--------------------------+-------------------+
+ | 50 | ALBUM / OPERA / CONCERT | RFC 9559, Section |
+ | | / MOVIE / EPISODE | 5.1.8.1.1.1 |
+ +------------------+--------------------------+-------------------+
+ | 40 | PART / SESSION | RFC 9559, Section |
+ | | | 5.1.8.1.1.1 |
+ +------------------+--------------------------+-------------------+
+ | 30 | TRACK / SONG / CHAPTER | RFC 9559, Section |
+ | | | 5.1.8.1.1.1 |
+ +------------------+--------------------------+-------------------+
+ | 20 | SUBTRACK / MOVEMENT / | RFC 9559, Section |
+ | | SCENE | 5.1.8.1.1.1 |
+ +------------------+--------------------------+-------------------+
+ | 10 | SHOT | RFC 9559, Section |
+ | | | 5.1.8.1.1.1 |
+ +------------------+--------------------------+-------------------+
+ | 0 | Not valid for use as a | RFC 9559, Section |
+ | | Tags Target Type | 5.1.8.1.1.1 |
+ +------------------+--------------------------+-------------------+
+
+ Table 65: Initial Contents of "Matroska Tags Target Types" Registry
+
+27.14. Matroska Chapter Codec IDs Registry
+
+ IANA has created a new registry called the "Matroska Chapter Codec
+ IDs" registry. The values correspond to the unsigned integer
+ ChapProcessCodecID, ChapterTranslateCodec, and TrackTranslateCodec
+ values described in Section 5.1.7.1.4.15.
+
+ To register a new Chapter Codec ID in this registry, one needs a
+ Chapter Codec ID value, a description, a Change Controller, and a
+ Reference to a document describing the Chapter Codec ID.
+
+ The Chapter Codec IDs are to be allocated according to the
+ "Specification Required" policy [RFC8126]. Available values range
+ from 2-18446744073709551615.
+
+ Table 66 shows the initial contents of the "Matroska Chapter Codec
+ IDs" registry. The Change Controller for the initial entries is the
+ IETF.
+
+ +==================+=================+===================+
+ | Chapter Codec ID | Description | Reference |
+ +==================+=================+===================+
+ | 0 | Matroska Script | RFC 9559, Section |
+ | | | 5.1.7.1.4.15 |
+ +------------------+-----------------+-------------------+
+ | 1 | DVD-menu | RFC 9559, Section |
+ | | | 5.1.7.1.4.15 |
+ +------------------+-----------------+-------------------+
+
+ Table 66: Initial Contents of "Matroska Chapter Codec
+ IDs" Registry
+
+27.15. Matroska Projection Types Registry
+
+ IANA has created a new registry called the "Matroska Projection
+ Types" registry. The values correspond to the unsigned integer
+ ProjectionType value described in Section 5.1.4.1.28.42.
+
+ To register a new Projection Type in this registry, one needs a
+ Projection Type value, a description, a Change Controller, and an
+ optional Reference to a document describing the Projection Type.
+
+ The Projection Types are to be allocated according to the "First Come
+ First Served" policy [RFC8126]. Available values range from
+ 4-18446744073709551615.
+
+ Table 67 shows the initial contents of the "Matroska Projection
+ Types" registry. The Change Controller for the initial entries is
+ the IETF.
+
+ +=================+=================+===================+
+ | Projection Type | Description | Reference |
+ +=================+=================+===================+
+ | 0 | rectangular | RFC 9559, Section |
+ | | | 5.1.4.1.28.42 |
+ +-----------------+-----------------+-------------------+
+ | 1 | equirectangular | RFC 9559, Section |
+ | | | 5.1.4.1.28.42 |
+ +-----------------+-----------------+-------------------+
+ | 2 | cubemap | RFC 9559, Section |
+ | | | 5.1.4.1.28.42 |
+ +-----------------+-----------------+-------------------+
+ | 3 | mesh | RFC 9559, Section |
+ | | | 5.1.4.1.28.42 |
+ +-----------------+-----------------+-------------------+
+
+ Table 67: Initial Contents of "Matroska Projection
+ Types" Registry
+
+27.16. Matroska Track Types Registry
+
+ IANA has created a new registry called the "Matroska Track Types"
+ registry. The values correspond to the unsigned integer TrackType
+ value described in Section 5.1.4.1.3.
+
+ To register a new Track Type in this registry, one needs a Track Type
+ value, a description, a Change Controller, and a Reference to a
+ document describing the Track Type.
+
+ The Track Types are to be allocated according to the "Specification
+ Required" policy [RFC8126]. Available values range from 4-15, 19-31,
+ and 34-18446744073709551615.
+
+ The value 0 is not valid for use as a Track Type.
+
+ Table 68 shows the initial contents of the "Matroska Track Types"
+ registry. The Change Controller for the initial entries is the IETF.
+
+ +============+===================+===================+
+ | Track Type | Description | Reference |
+ +============+===================+===================+
+ | 0 | Not valid for use | RFC 9559, |
+ | | as a Track Type | Section 5.1.4.1.3 |
+ +------------+-------------------+-------------------+
+ | 1 | video | RFC 9559, |
+ | | | Section 5.1.4.1.3 |
+ +------------+-------------------+-------------------+
+ | 2 | audio | RFC 9559, |
+ | | | Section 5.1.4.1.3 |
+ +------------+-------------------+-------------------+
+ | 3 | complex | RFC 9559, |
+ | | | Section 5.1.4.1.3 |
+ +------------+-------------------+-------------------+
+ | 16 | logo | RFC 9559, |
+ | | | Section 5.1.4.1.3 |
+ +------------+-------------------+-------------------+
+ | 17 | subtitle | RFC 9559, |
+ | | | Section 5.1.4.1.3 |
+ +------------+-------------------+-------------------+
+ | 18 | buttons | RFC 9559, |
+ | | | Section 5.1.4.1.3 |
+ +------------+-------------------+-------------------+
+ | 32 | control | RFC 9559, |
+ | | | Section 5.1.4.1.3 |
+ +------------+-------------------+-------------------+
+ | 33 | metadata | RFC 9559, |
+ | | | Section 5.1.4.1.3 |
+ +------------+-------------------+-------------------+
+
+ Table 68: Initial Contents of "Matroska Track
+ Types" Registry
+
+27.17. Matroska Track Plane Types Registry
+
+ IANA has created a new registry called the "Matroska Track Plane
+ Types" registry. The values correspond to the unsigned integer
+ TrackPlaneType value described in Section 5.1.4.1.30.4.
+
+ To register a new Track Plane Type in this registry, one needs a
+ Track Plane Type value, a description, a Change Controller, and an
+ optional Reference to a document describing the Track Plane Type.
+
+ The Track Plane Types are to be allocated according to the "First
+ Come First Served" policy [RFC8126]. Available values range from
+ 3-18446744073709551615.
+
+ Table 69 shows the initial contents of the "Matroska Track Plane
+ Types" registry. The Change Controller for the initial entries is
+ the IETF.
+
+ +==================+=============+================================+
+ | Track Plane Type | Description | Reference |
+ +==================+=============+================================+
+ | 0 | left eye | RFC 9559, Section 5.1.4.1.30.4 |
+ +------------------+-------------+--------------------------------+
+ | 1 | right eye | RFC 9559, Section 5.1.4.1.30.4 |
+ +------------------+-------------+--------------------------------+
+ | 2 | background | RFC 9559, Section 5.1.4.1.30.4 |
+ +------------------+-------------+--------------------------------+
+
+ Table 69: Initial Contents of "Matroska Track Plane Types" Registry
+
+27.18. Media Types
+
+ Matroska files and streams are found in three main forms: audio-
+ video, audio-only, and (occasionally) stereoscopic video.
+
+ Historically, Matroska files and streams have used the following
+ media types with an "x-" prefix. For better compatibility, a system
+ SHOULD be able to handle both formats. Newer systems SHOULD NOT use
+ the historic format and use the format that follows the format in
+ [RFC6838] instead.
+
+ IANA has registered three media types per the templates (see
+ [RFC6838]) in the following subsections.
+
+27.18.1. For Files Containing Video Tracks
+
+ Type name: video
+
+ Subtype name: matroska
+
+ Required parameters: N/A
+
+ Optional parameters: N/A
+
+ Encoding considerations: As per RFCs 9559 and 8794
+
+ Security considerations: See Section 26 of RFC 9559.
+
+ Interoperability considerations: Due to the extensibility of
+ Matroska, it is possible to encounter files with unknown but valid
+ EBML Elements. Readers should be ready to handle this case. The
+ fixed byte order, octet boundaries, and UTF-8 usage allow for
+ broad interoperability.
+
+ Published specification: RFC 9559
+
+ Applications that use this media type: FFmpeg, VLC, etc.
+
+ Fragment identifier considerations: N/A
+
+ Additional information:
+
+ Deprecated alias names for this type: video/x-matroska
+ Magic number(s): N/A
+ File extension(s): mkv
+ Macintosh file type code(s): N/A
+
+ Person & email address to contact for further information: IETF
+ CELLAR WG (cellar@ietf.org)
+
+ Intended usage: COMMON
+
+ Restrictions on usage: None
+
+ Author: IETF CELLAR WG
+
+ Change controller: IETF
+
+27.18.2. For Files Containing Audio Tracks with No Video Tracks
+
+ Type name: audio
+
+ Subtype name: matroska
+
+ Required parameters: N/A
+
+ Optional parameters: N/A
+
+ Encoding considerations: As per RFCs 9559 and 8794
+
+ Security considerations: See Section 26 of RFC 9559.
+
+ Interoperability considerations: Due to the extensibility of
+ Matroska, it is possible to encounter files with unknown but valid
+ EBML Elements. Readers should be ready to handle this case. The
+ fixed byte order, octet boundaries, and UTF-8 usage allow for
+ broad interoperability.
+
+ Published specification: RFC 9559
+
+ Applications that use this media type: FFmpeg, VLC, etc.
+
+ Fragment identifier considerations: N/A
+
+ Additional information:
+
+ Deprecated alias names for this type: audio/x-matroska
+ Magic number(s): N/A
+ File extension(s): mka
+ Macintosh file type code(s): N/A
+
+ Person & email address to contact for further information: IETF
+ CELLAR WG (cellar@ietf.org)
+
+ Intended usage: COMMON
+
+ Restrictions on usage: None
+
+ Author: IETF CELLAR WG
+
+ Change controller: IETF
+
+27.18.3. For Files Containing a Stereoscopic Video Track
+
+ Type name: video
+
+ Subtype name: matroska-3d
+
+ Required parameters: N/A
+
+ Optional parameters: N/A
+
+ Encoding considerations: As per RFCs 9559 and 8794
+
+ Security considerations: See Section 26 of RFC 9559.
+
+ Interoperability considerations: Due to the extensibility of
+ Matroska, it is possible to encounter files with unknown but valid
+ EBML Elements. Readers should be ready to handle this case. The
+ fixed byte order, octet boundaries, and UTF-8 usage allow for
+ broad interoperability.
+
+ Published specification: RFC 9559
+
+ Applications that use this media type: FFmpeg, VLC, etc.
+
+ Fragment identifier considerations: N/A
+
+ Additional information:
+
+ Deprecated alias names for this type: video/x-matroska-3d
+ Magic number(s): N/A
+ File extension(s): mk3d
+ Macintosh file type code(s): N/A
+
+ Person & email address to contact for further information: IETF
+ CELLAR WG (cellar@ietf.org)
+
+ Intended usage: COMMON
+
+ Restrictions on usage: None
+
+ Author: IETF CELLAR WG
+
+ Change controller: IETF
+
+28. References
+
+28.1. Normative References
+
+ [CIE-1931] Wikipedia, "CIE 1931 color space",
+ <https://en.wikipedia.org/w/
+ index.php?title=CIE_1931_color_space&oldid=1242811504>.
+
+ [ISO639-2] International Organization for Standardization, "Codes for
+ the Representation of Names of Languages", ISO 639-2,
+ December 2017, <https://www.loc.gov/standards/iso639-
+ 2/php/code_list.php>.
+
+ [ISO9899] International Organization for Standardization,
+ "Information technology -- Programming languages -- C",
+ ISO/IEC 9899:2018, June 2018,
+ <https://www.iso.org/standard/74528.html>.
+
+ [ITU-H.273]
+ ITU-T, "Coding-independent code points for video signal
+ type identification", ITU-T Recommendation H.273,
+ September 2023,
+ <https://www.itu.int/rec/T-REC-H.273-202309-P/en>.
+
+ [RFC1950] Deutsch, P. and J. Gailly, "ZLIB Compressed Data Format
+ Specification version 3.3", RFC 1950,
+ DOI 10.17487/RFC1950, May 1996,
+ <https://www.rfc-editor.org/info/rfc1950>.
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119,
+ DOI 10.17487/RFC2119, March 1997,
+ <https://www.rfc-editor.org/info/rfc2119>.
+
+ [RFC5646] Phillips, A., Ed. and M. Davis, Ed., "Tags for Identifying
+ Languages", BCP 47, RFC 5646, DOI 10.17487/RFC5646,
+ September 2009, <https://www.rfc-editor.org/info/rfc5646>.
+
+ [RFC6838] Freed, N., Klensin, J., and T. Hansen, "Media Type
+ Specifications and Registration Procedures", BCP 13,
+ RFC 6838, DOI 10.17487/RFC6838, January 2013,
+ <https://www.rfc-editor.org/info/rfc6838>.
+
+ [RFC8081] Lilley, C., "The "font" Top-Level Media Type", RFC 8081,
+ DOI 10.17487/RFC8081, February 2017,
+ <https://www.rfc-editor.org/info/rfc8081>.
+
+ [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for
+ Writing an IANA Considerations Section in RFCs", BCP 26,
+ RFC 8126, DOI 10.17487/RFC8126, June 2017,
+ <https://www.rfc-editor.org/info/rfc8126>.
+
+ [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
+ 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
+ May 2017, <https://www.rfc-editor.org/info/rfc8174>.
+
+ [RFC8794] Lhomme, S., Rice, D., and M. Bunkus, "Extensible Binary
+ Meta Language", RFC 8794, DOI 10.17487/RFC8794, July 2020,
+ <https://www.rfc-editor.org/info/rfc8794>.
+
+ [RFC9562] Davis, K., Peabody, B., and P. Leach, "Universally Unique
+ IDentifiers (UUIDs)", RFC 9562, DOI 10.17487/RFC9562, May
+ 2024, <https://www.rfc-editor.org/info/rfc9562>.
+
+28.2. Informative References
+
+ [AVIFormat]
+ Microsoft Corporation, "AVI RIFF File Reference", June
+ 2023, <https://docs.microsoft.com/en-
+ us/windows/win32/directshow/avi-riff-file-reference>.
+
+ [Blowfish] Schneier, B., "The Blowfish Encryption Algorithm", 1993,
+ <https://www.schneier.com/academic/blowfish/>.
+
+ [BZIP2] Seward, J., "bzip2", July 2019,
+ <https://sourceware.org/bzip2/>.
+
+ [DivXTrickTrack]
+ "Smooth FF/RW", December 2010,
+ <https://web.archive.org/web/20101222001148/
+ http://labs.divx.com/node/16601>.
+
+ [DivXWorldFonts]
+ "World Fonts", December 2010,
+ <https://web.archive.org/web/20110214132246/
+ http://labs.divx.com/node/16602>.
+
+ [DVD-Video]
+ DVD Forum, "DVD-Books: Part 3 DVD-Video Book", November
+ 1995, <http://www.dvdforum.org/>.
+
+ [Err7189] RFC Errata, Erratum ID 7189, RFC 8794,
+ <https://www.rfc-editor.org/errata/eid7189>.
+
+ [Err7191] RFC Errata, Erratum ID 7191, RFC 8794,
+ <https://www.rfc-editor.org/errata/eid7191>.
+
+ [FIPS197] National Institute of Standards and Technology (NIST),
+ "Advanced Encryption Standard (AES)", FIPS PUB 197,
+ DOI 10.6028/NIST.FIPS.197, November 2001,
+ <https://csrc.nist.gov/publications/detail/fips/197/
+ final>.
+
+ [FIPS46-3] National Institute of Standards and Technology (NIST),
+ "Data Encryption Standard (DES)", FIPS PUB 46, October
+ 1999,
+ <https://csrc.nist.gov/publications/detail/fips/46/3/
+ archive/1999-10-25>.
+
+ [FourCC-RGB]
+ FOURCC, "RGB pixel formats",
+ <https://web.archive.org/web/20160609214806/
+ https://www.fourcc.org/rgb.php>.
+
+ [FourCC-YUV]
+ FOURCC, "YUV pixel formats",
+ <https://web.archive.org/web/20160609214806/
+ https://www.fourcc.org/yuv.php>.
+
+ [JPEG] ITU-T, "INFORMATION TECHNOLOGY - DIGITAL COMPRESSION AND
+ CODING OF CONTINUOUS-TONE STILL IMAGES - REQUIREMENTS AND
+ GUIDELINES", ITU-T Recommendation T.81, September 1992,
+ <https://www.w3.org/Graphics/JPEG/itu-t81.pdf>.
+
+ [libmatroska]
+ "libmatroska", March 2024,
+ <https://github.com/Matroska-Org/libmatroska>.
+
+ [LZO] Tarreau, W. and R. Rodgman, "LZO stream format as
+ understood by Linux's LZO decompressor", October 2018,
+ <https://www.kernel.org/doc/Documentation/lzo.txt>.
+
+ [MatroskaCodec]
+ Lhomme, S., Bunkus, M., and D. Rice, "Matroska Media
+ Container Codec Specifications", Work in Progress,
+ Internet-Draft, draft-ietf-cellar-codec-13, 5 May 2024,
+ <https://datatracker.ietf.org/doc/html/draft-ietf-cellar-
+ codec-13>.
+
+ [MatroskaTags]
+ Lhomme, S., Bunkus, M., and D. Rice, "Matroska Media
+ Container Tag Specifications", Work in Progress, Internet-
+ Draft, draft-ietf-cellar-tags-13, 5 May 2024,
+ <https://datatracker.ietf.org/doc/html/draft-ietf-cellar-
+ tags-13>.
+
+ [MCF] "MCF specification, introduction",
+ <http://mukoli.free.fr/mcf/>.
+
+ [MSRGB] Microsoft Corporation, "Compression Enumeration", June
+ 2021, <https://learn.microsoft.com/en-
+ us/openspecs/windows_protocols/ms-wmf/4e588f70-bd92-4a6f-
+ b77f-35d0feaf7a57>.
+
+ [MSYUV16] Microsoft Corporation, "10-bit and 16-bit YUV Video
+ Formats", November 2022, <https://learn.microsoft.com/en-
+ us/windows/win32/medfound/10-bit-and-16-bit-yuv-video-
+ formats>.
+
+ [MSYUV8] Microsoft Corporation, "Recommended 8-Bit YUV Formats for
+ Video Rendering", January 2021,
+ <https://learn.microsoft.com/en-us/windows/win32/medfound/
+ recommended-8-bit-yuv-formats-for-video-rendering>.
+
+ [RFC0959] Postel, J. and J. Reynolds, "File Transfer Protocol",
+ STD 9, RFC 959, DOI 10.17487/RFC0959, October 1985,
+ <https://www.rfc-editor.org/info/rfc959>.
+
+ [RFC2083] Boutell, T., "PNG (Portable Network Graphics)
+ Specification Version 1.0", RFC 2083,
+ DOI 10.17487/RFC2083, March 1997,
+ <https://www.rfc-editor.org/info/rfc2083>.
+
+ [RFC3533] Pfeiffer, S., "The Ogg Encapsulation Format Version 0",
+ RFC 3533, DOI 10.17487/RFC3533, May 2003,
+ <https://www.rfc-editor.org/info/rfc3533>.
+
+ [RFC4732] Handley, M., Ed., Rescorla, E., Ed., and IAB, "Internet
+ Denial-of-Service Considerations", RFC 4732,
+ DOI 10.17487/RFC4732, December 2006,
+ <https://www.rfc-editor.org/info/rfc4732>.
+
+ [RFC9110] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke,
+ Ed., "HTTP Semantics", STD 97, RFC 9110,
+ DOI 10.17487/RFC9110, June 2022,
+ <https://www.rfc-editor.org/info/rfc9110>.
+
+ [SMB-CIFS] Microsoft Corporation, "[MS-CIFS]: Common Internet File
+ System (CIFS) Protocol", October 2020,
+ <https://winprotocoldoc.blob.core.windows.net/
+ productionwindowsarchives/MS-CIFS/%5bMS-CIFS%5d.pdf>.
+
+ [SP800-38A]
+ National Institute of Standards and Technology (NIST),
+ "Recommendation for Block Cipher Modes of Operation:
+ Methods and Techniques", DOI 10.6028/NIST.SP.800-38A, NIST
+ Special Publication 800-38A, December 2001,
+ <https://nvlpubs.nist.gov/nistpubs/Legacy/SP/
+ nistspecialpublication800-38a.pdf>.
+
+ [SP800-67] National Institute of Standards and Technology (NIST),
+ "Recommendation for the Triple Data Encryption Algorithm
+ (TDEA) Block Cipher", DOI 10.6028/NIST.SP.800-67r2, NIST
+ Special Publication 800-67, November 2017,
+ <https://nvlpubs.nist.gov/nistpubs/SpecialPublications/
+ NIST.SP.800-67r2.pdf>.
+
+ [Twofish] Schneier, B., Kelsey, J., Whiting, D., Wagner, D., Hall,
+ C., and N. Ferguson, "Twofish: A 128-Bit Block Cipher",
+ June 1998,
+ <https://www.schneier.com/academic/archives/1998/06/
+ twofish_a_128-bit_bl.html>.
+
+ [WebM-Enc] Galligan, F., "WebM Encryption", September 2016,
+ <https://www.webmproject.org/docs/webm-encryption/>.
+
+ [WebVTT] Pieters, S., Pfeiffer, S., Ed., Jaegenstedt, P., and I.
+ Hickson, "WebVTT: The Web Video Text Tracks Format", W3C
+ Candidate Recommendation, April 2019,
+ <https://www.w3.org/TR/2019/CR-webvtt1-20190404/>.
+
+Appendix A. Historic Deprecated Elements
+
+ As Matroska has evolved since 2002, many parts that were considered
+ for use in the format were never used and often incorrectly designed.
+ Many of the elements that were defined then are not found in any
+ known files but were part of public specs. DivX also had a few
+ custom elements that were designed for custom features.
+
+ In this appendix, we list elements that have a known ID that SHOULD
+ NOT be reused to avoid colliding with existing files. These might be
+ reassigned by IANA in the future if there are no more IDs for a given
+ size. A short description of what each ID was used for is included,
+ but the text is not normative.
+
+A.1. SilentTracks Element
+
+ type / id: master / 0x5854
+ path: \Segment\Cluster\SilentTracks
+ documentation: The list of tracks that are not used in that part of
+ the stream. It is useful when using overlay tracks for seeking or
+ deciding what track to use.
+
+A.2. SilentTrackNumber Element
+
+ type / id: uinteger / 0x58D7
+ path: \Segment\Cluster\SilentTracks\SilentTrackNumber
+ documentation: One of the track numbers that is not used from now on
+ in the stream. It could change later if not specified as silent
+ in a further Cluster.
+
+A.3. BlockVirtual Element
+
+ type / id: binary / 0xA2
+ path: \Segment\Cluster\BlockGroup\BlockVirtual
+ documentation: A Block with no data. It must be stored in the
+ stream at the place the real Block would be in display order.
+
+A.4. ReferenceVirtual Element
+
+ type / id: integer / 0xFD
+ path: \Segment\Cluster\BlockGroup\ReferenceVirtual
+ documentation: The Segment Position of the data that would otherwise
+ be in position of the virtual block.
+
+A.5. Slices Element
+
+ type / id: master / 0x8E
+ path: \Segment\Cluster\BlockGroup\Slices
+ documentation: Contains slices description.
+
+A.6. TimeSlice Element
+
+ type / id: master / 0xE8
+ path: \Segment\Cluster\BlockGroup\Slices\TimeSlice
+ documentation: Contains extra time information about the data
+ contained in the Block. Being able to interpret this element is
+ not required for playback.
+
+A.7. LaceNumber Element
+
+ type / id: uinteger / 0xCC
+ path: \Segment\Cluster\BlockGroup\Slices\TimeSlice\LaceNumber
+ documentation: The reverse number of the frame in the lace (0 is the
+ last frame, 1 is the next to last, etc.). Being able to interpret
+ this element is not required for playback.
+
+A.8. FrameNumber Element
+
+ type / id: uinteger / 0xCD
+ path: \Segment\Cluster\BlockGroup\Slices\TimeSlice\FrameNumber
+ documentation: The number of the frame to generate from this lace
+ with this delay (allows for the generation of many frames from the
+ same Block/Frame).
+
+A.9. BlockAdditionID Element
+
+ type / id: uinteger / 0xCB
+ path: \Segment\Cluster\BlockGroup\Slices\TimeSlice\BlockAdditionID
+ documentation: The ID of the BlockAdditional element (0 is the main
+ Block).
+
+A.10. Delay Element
+
+ type / id: uinteger / 0xCE
+ path: \Segment\Cluster\BlockGroup\Slices\TimeSlice\Delay
+ documentation: The delay to apply to the element, expressed in Track
+ Ticks; see Section 11.1.
+
+A.11. SliceDuration Element
+
+ type / id: uinteger / 0xCF
+ path: \Segment\Cluster\BlockGroup\Slices\TimeSlice\SliceDuration
+ documentation: The duration to apply to the element, expressed in
+ Track Ticks; see Section 11.1.
+
+A.12. ReferenceFrame Element
+
+ type / id: master / 0xC8
+ path: \Segment\Cluster\BlockGroup\ReferenceFrame
+ documentation: Contains information about the last reference frame.
+ See [DivXTrickTrack].
+
+A.13. ReferenceOffset Element
+
+ type / id: uinteger / 0xC9
+ path: \Segment\Cluster\BlockGroup\ReferenceFrame\ReferenceOffset
+ documentation: The relative offset, in bytes, from the previous
+ BlockGroup element for this Smooth FF/RW video track to the
+ containing BlockGroup element. See [DivXTrickTrack].
+
+A.14. ReferenceTimestamp Element
+
+ type / id: uinteger / 0xCA
+ path: \Segment\Cluster\BlockGroup\ReferenceFrame\ReferenceTimestamp
+ documentation: The timestamp of the BlockGroup pointed to by
+ ReferenceOffset, expressed in Track Ticks; see Section 11.1. See
+ [DivXTrickTrack].
+
+A.15. EncryptedBlock Element
+
+ type / id: binary / 0xAF
+ path: \Segment\Cluster\EncryptedBlock
+ documentation: Similar to SimpleBlock (see Section 10.2), but the
+ data inside the Block are Transformed (encrypted and/or signed).
+
+A.16. MinCache Element
+
+ type / id: uinteger / 0x6DE7
+ path: \Segment\Tracks\TrackEntry\MinCache
+ documentation: The minimum number of frames a player should be able
+ to cache during playback. If set to 0, the reference pseudo-cache
+ system is not used.
+
+A.17. MaxCache Element
+
+ type / id: uinteger / 0x6DF8
+ path: \Segment\Tracks\TrackEntry\MaxCache
+ documentation: The maximum cache size necessary to store referenced
+ frames in and the current frame. 0 means no cache is needed.
+
+A.18. TrackOffset Element
+
+ type / id: integer / 0x537F
+ path: \Segment\Tracks\TrackEntry\TrackOffset
+ documentation: A value to add to the Block's Timestamp, expressed in
+ Matroska Ticks -- i.e., in nanoseconds; see Section 11.1. This
+ can be used to adjust the playback offset of a track.
+
+A.19. CodecSettings Element
+
+ type / id: utf-8 / 0x3A9697
+ path: \Segment\Tracks\TrackEntry\CodecSettings
+ documentation: A string describing the encoding setting used.
+
+A.20. CodecInfoURL Element
+
+ type / id: string / 0x3B4040
+ path: \Segment\Tracks\TrackEntry\CodecInfoURL
+ documentation: A URL to find information about the codec used.
+
+A.21. CodecDownloadURL Element
+
+ type / id: string / 0x26B240
+ path: \Segment\Tracks\TrackEntry\CodecDownloadURL
+ documentation: A URL to download information about the codec used.
+
+A.22. CodecDecodeAll Element
+
+ type / id: uinteger / 0xAA
+ path: \Segment\Tracks\TrackEntry\CodecDecodeAll
+ documentation: Set to 1 if the codec can decode potentially damaged
+ data.
+
+A.23. TrackOverlay Element
+
+ type / id: uinteger / 0x6FAB
+ path: \Segment\Tracks\TrackEntry\TrackOverlay
+ documentation: Specify that this track is an overlay track for the
+ Track specified (in the u-integer). This means that when this
+ track has a gap on SilentTracks, the overlay track should be used
+ instead. The order of multiple TrackOverlay matters; the first
+ one is the one that should be used. If the first one is not
+ found, it should be the second, etc.
+
+A.24. AspectRatioType Element
+
+ type / id: uinteger / 0x54B3
+ path: \Segment\Tracks\TrackEntry\Video\AspectRatioType
+ documentation: Specifies the possible modifications to the aspect
+ ratio.
+
+A.25. GammaValue Element
+
+ type / id: float / 0x2FB523
+ path: \Segment\Tracks\TrackEntry\Video\GammaValue
+ documentation: Gamma value.
+
+A.26. FrameRate Element
+
+ type / id: float / 0x2383E3
+ path: \Segment\Tracks\TrackEntry\Video\FrameRate
+ documentation: Number of frames per second. This value is
+ informational only. It is intended for constant frame rate
+ streams and should not be used for a variable frame rate
+ TrackEntry.
+
+A.27. ChannelPositions Element
+
+ type / id: binary / 0x7D7B
+ path: \Segment\Tracks\TrackEntry\Audio\ChannelPositions
+ documentation: Table of horizontal angles for each successive
+ channel.
+
+A.28. TrickTrackUID Element
+
+ type / id: uinteger / 0xC0
+ path: \Segment\Tracks\TrackEntry\TrickTrackUID
+ documentation: The TrackUID of the Smooth FF/RW video in the paired
+ EBML structure corresponding to this video track. See
+ [DivXTrickTrack].
+
+A.29. TrickTrackSegmentUID Element
+
+ type / id: binary / 0xC1
+ path: \Segment\Tracks\TrackEntry\TrickTrackSegmentUID
+ documentation: The SegmentUUID of the Segment containing the track
+ identified by TrickTrackUID. See [DivXTrickTrack].
+
+A.30. TrickTrackFlag Element
+
+ type / id: uinteger / 0xC6
+ path: \Segment\Tracks\TrackEntry\TrickTrackFlag
+ documentation: Set to 1 if this video track is a Smooth FF/RW track.
+ If set to 1, MasterTrackUID and MasterTrackSegUID should be
+ present, and BlockGroups for this track must contain
+ ReferenceFrame structures. Otherwise, TrickTrackUID and
+ TrickTrackSegUID must be present if this track has a corresponding
+ Smooth FF/RW track. See [DivXTrickTrack].
+
+A.31. TrickMasterTrackUID Element
+
+ type / id: uinteger / 0xC7
+ path: \Segment\Tracks\TrackEntry\TrickMasterTrackUID
+ documentation: The TrackUID of the video track in the paired EBML
+ structure that corresponds to this Smooth FF/RW track. See
+ [DivXTrickTrack].
+
+A.32. TrickMasterTrackSegmentUID Element
+
+ type / id: binary / 0xC4
+ path: \Segment\Tracks\TrackEntry\TrickMasterTrackSegmentUID
+ documentation: The SegmentUUID of the Segment containing the track
+ identified by MasterTrackUID. See [DivXTrickTrack].
+
+A.33. ContentSignature Element
+
+ type / id: binary / 0x47E3
+ path: \Segment\Tracks\TrackEntry\ContentEncodings\ContentEncoding\Co
+ ntentEncryption\ContentSignature
+ documentation: A cryptographic signature of the contents.
+
+A.34. ContentSigKeyID Element
+
+ type / id: binary / 0x47E4
+ path: \Segment\Tracks\TrackEntry\ContentEncodings\ContentEncoding\Co
+ ntentEncryption\ContentSigKeyID
+ documentation: This is the ID of the private key that the data was
+ signed with.
+
+A.35. ContentSigAlgo Element
+
+ type / id: uinteger / 0x47E5
+ path: \Segment\Tracks\TrackEntry\ContentEncodings\ContentEncoding\Co
+ ntentEncryption\ContentSigAlgo
+ documentation: The algorithm used for the signature.
+
+A.36. ContentSigHashAlgo Element
+
+ type / id: uinteger / 0x47E6
+ path: \Segment\Tracks\TrackEntry\ContentEncodings\ContentEncoding\Co
+ ntentEncryption\ContentSigHashAlgo
+ documentation: The hash algorithm used for the signature.
+
+A.37. CueRefCluster Element
+
+ type / id: uinteger / 0x97
+ path: \Segment\Cues\CuePoint\CueTrackPositions\CueReference\CueRefCl
+ uster
+ documentation: The Segment Position of the Cluster containing the
+ referenced Block.
+
+A.38. CueRefNumber Element
+
+ type / id: uinteger / 0x535F
+ path: \Segment\Cues\CuePoint\CueTrackPositions\CueReference\CueRefNu
+ mber
+ documentation: Number of the referenced Block of Track X in the
+ specified Cluster.
+
+A.39. CueRefCodecState Element
+
+ type / id: uinteger / 0xEB
+ path: \Segment\Cues\CuePoint\CueTrackPositions\CueReference\CueRefCo
+ decState
+ documentation: The Segment Position of the Codec State corresponding
+ to this referenced element. 0 means that the data is taken from
+ the initial TrackEntry.
+
+A.40. FileReferral Element
+
+ type / id: binary / 0x4675
+ path: \Segment\Attachments\AttachedFile\FileReferral
+ documentation: A binary value that a track/codec can refer to when
+ the attachment is needed.
+
+A.41. FileUsedStartTime Element
+
+ type / id: uinteger / 0x4661
+ path: \Segment\Attachments\AttachedFile\FileUsedStartTime
+ documentation: The timestamp at which this optimized font attachment
+ comes into context, expressed in Segment Ticks, which are based on
+ TimestampScale. See [DivXWorldFonts].
+
+A.42. FileUsedEndTime Element
+
+ type / id: uinteger / 0x4662
+ path: \Segment\Attachments\AttachedFile\FileUsedEndTime
+ documentation: The timestamp at which this optimized font attachment
+ goes out of context, expressed in Segment Ticks, which are based
+ on TimestampScale. See [DivXWorldFonts].
+
+A.43. TagDefaultBogus Element
+
+ type / id: uinteger / 0x44B4
+ path: \Segment\Tags\Tag\+SimpleTag\TagDefaultBogus
+ documentation: A variant of the TagDefault element with a bogus
+ element ID; see Section 5.1.8.1.2.4.
+
+Authors' Addresses
+
+ Steve Lhomme
+ Email: slhomme@matroska.org
+
+
+ Moritz Bunkus
+ Email: moritz@bunkus.org
+
+
+ Dave Rice
+ Email: dave@dericed.com