Table 2 lists the fields defined within each track object.
| Field | Name | Definition |
|---|---|---|
| Track namespace | namespace | Section 5.2.2 |
| Track name | name | Section 5.2.3 |
| Packaging | packaging | Section 5.2.4 |
| Event timeline type | eventType | Section 5.2.5 |
| Is Live | isLive | Section 5.2.7 |
| Target latency | targetLatency | Section 5.2.8 |
| Buffers | buffers | Section 5.2.9 |
| Track role | role | Section 5.2.6 |
| Track label | label | Section 5.2.10 |
| Render group | renderGroup | Section 5.2.11 |
| Alternate group | altGroup | Section 5.2.12 |
| Initialization ref | initRef | Section 5.2.13 |
| Dependencies | depends | Section 5.2.14 |
| Temporal ID | temporalId | Section 5.2.16 |
| Spatial ID | spatialId | Section 5.2.17 |
| Codec | codec | Section 5.2.18 |
| Mime type | mimeType | Section 5.2.19 |
| Framerate | framerate | Section 5.2.20 |
| Timescale | timescale | Section 5.2.21 |
| Maximum Bitrate | bitrate | Section 5.2.22 |
| Average Bitrate | avgBitrate | Section 5.2.23 |
| Maximum GOP Duration | maxGopDuration | Section 5.2.24 |
| Maximum Group Duration | maxGroupDuration | Section 5.2.25 |
| Width | width | Section 5.2.26 |
| Height | height | Section 5.2.27 |
| Audio sample rate | samplerate | Section 5.2.28 |
| Channel configuration | channelConfig | Section 5.2.29 |
| Display width | displayWidth | Section 5.2.30 |
| Display height | displayHeight | Section 5.2.31 |
| Language | lang | Section 5.2.32 |
| Parent name | parentName | Section 5.2.33 |
| Parent namespace | parentNamespace | Section 5.2.34 |
| Track duration | trackDuration | Section 5.2.35 |
| Authorization Info | authInfo | Section 5.2.42 |
| Accessibility | accessibility | Section 5.2.44 |
5.2.1. Tracks object
A track object is a JSON Object containing a collection of fields whose location is specified in Table 2.
5.2.2. Track namespace
Required: Optional JSON Type: String Location: Track Object
The name space under which the track name is defined. See section 2.3 of [MoQTransport]. The track namespace is optional. If it is not declared within a track, then each track MUST inherit the namespace of the catalog track. A namespace declared in a track object overrides any inherited name space.
5.2.3. Track name
Required: Yes JSON Type: String Location: Track Object
A string defining the name of the track. See section 2.3 of [MoQTransport]. Within the catalog, track names MUST be unique per namespace.
5.2.4. Packaging
Required: Yes JSON Type: String Location: Track Object
A string defining the type of payload encapsulation. Allowed values are strings as defined in Table 3.
| Name | Value | Reference |
|---|---|---|
| LOC | loc | See RFC XXXX |
| Media Timeline | mediatimeline | See Section 7 |
| Event Timeline | eventtimeline | See Section 8 |
| MoQ Log | moqlog | See [MOQLOG] |
| MoQ Metrics | moqmetrics | See [MOQMETRICS] |
Table 3: Allowed packaging values
5.2.5. Event timeline type
Required: Optional JSON Type: String Location: Track Object
A String defining the type & structure of the data contained within the data field of the Event timeline track. Types are defined by the application provider and are not centrally registered. Implementers are encouraged to use a unique naming scheme, such as Reverse Domain Name Notation, where domain name components are listed in reverse order (e.g., "com.example.myeventtype"), to avoid naming collisions. This field is required if the Section 5.2.4 value is "eventtimeline". This field MUST NOT be used if the packaging value is not "eventtimeline".
5.2.6. Track role
Required: Optional JSON Type: String Location: Track Object
A string defining the role of content carried by the track. Specified roles are described in Table 4. These role values are case-sensitive.
This role field MAY be used in conjunction with the Mimetype Section 5.2.19 to fully describe the content of the track.
Table 4: Reserved track roles
| Role | Description |
|---|---|
| audiodescription | An audio description for visually impaired users |
| video | Visual content |
| audio | Audio content |
| mediatimeline | An MSF media timeline Section 7 |
| eventtimeline | An MSF event timeline Section 8 |
| caption | A textual representation of the audio track |
| subtitle | A transcription of the spoken dialogue |
| signlanguage | A visual track for hearing impaired users. |
| log | A log publishing track per [MOQLOG]. |
| metrics | A metrics publishing track per [MOQMETRICS]. |
Custom roles MAY be used as long as they do not collide with the specified roles.
5.2.7. Is Live
Required: Yes JSON Type: Boolean Location: Track Object
A track-level indication of whether new Objects will be added to this specific track. True if new Objects will be added to the track. False if no new Objects will be added to the track. A False value is sent under two possible conditions: * the publisher of a previously live track has ended the track. * the track is Video-On-Demand (VOD) and was never live. A True value MUST never follow a False value.
5.2.8. Target latency
Required: Optional JSON Type: Number Location: Track Object
The target latency in milliseconds. Target latency is defined as the offset in wallclock time between when content was encoded and when it is displayed to the end user. For example, if a frame of video is encoded at 10:08:32.638 UTC and the target latency is 5000, then that frame should be rendered to the end-user at 10:08:37.638 UTC. If isLive is FALSE, this field MUST be ignored. All tracks belonging to the same render group MUST have identical target latencies. All tracks belonging to the same alternate group MUST have identical target latencies. If this field is absent from the track definition, and isLive is TRUE, then the player MAY choose the latency with which it renders the content.
This property MUST NOT be present if the buffers Section 5.2.9 property is present within a track definition.
5.2.9. Buffers
Required: Optional JSON Type: Object Location: Track Object
An object defining a set of target buffers. Buffer is defined as the duration of media data that MUST be buffered before decoding commences. This is typically known as a forward or jitter-buffer in a media player.Players with identical buffer lengths are likely to be synchronized. The target buffer object has these keys:
-
target : defines the target buffer in integer milliseconds. Players SHOULD attempt to stabilize playback at this value.
-
min : defines the minimum buffer in milliseconds. Players SHOULD NOT operate below this value.
-
max : defines the maximum buffer in milliseconds. Players SHOULD NOT operate above this value.
Keys are optional. Unknown keys in the target buffer object MUST be ignored.
If isLive is FALSE, this target buffer property MUST be ignored. All tracks belonging to the same render group MUST have identical target buffers. All tracks belonging to the same alternate group MUST have identical target buffers. If this field is absent from the track definition, and isLive is TRUE, then the player MAY choose the buffers with which it conducts playback.
This property MUST NOT be present if the target latency Section 5.2.8 property is present within a track definition.
5.2.10. Track label
Required: Optional JSON Type: String Location: Track Object
A string defining a human-readable label for the track. Examples might be "Overhead camera view" or "Deutscher Kommentar". Note that the [JSON] spec requires UTF-8 support by decoders.
5.2.11. Render group
Required: Optional JSON Type: Number Location: Track Object
An integer specifying a group of tracks which are designed to be rendered together. Tracks with the same group number SHOULD be rendered simultaneously and are designed to accompany one another. A common example would be tying together audio and video tracks.
5.2.12. Alternate group
Required: Optional JSON Type: Number Location: Track Object
An integer specifying a group of tracks which are alternate versions of one-another. Alternate tracks represent the same media content, but differ in their selection properties. Alternate tracks MUST have matching media time sequences. A subscriber typically subscribes to one track from a set of tracks specifying the same alternate group number. A common example would be a set video tracks of the same content offered in alternate bitrates.
5.2.13. Initialization reference
Required: Optional JSON Type: String Location: Track Object
A string pointing at the id field of an entry in the Initialization Data List Section 5.1.7.
5.2.14. Dependencies
Required: Optional JSON Type: Array Location: Track Object
Certain tracks may depend on other tracks for decoding. Dependencies holds an array of track names Section 5.2.3 on which the current track is dependent. Since only the track name is signaled, the namespace of the dependencies is assumed to match that of the track declaring the dependencies.
5.2.15. Template
Required: Optional JSON Type: Array Location: Track Object
A media timeline template for tracks with fixed-duration segments. It specifies the relationship between media time, MOQT Location, and wallclock time through starting points and intervals. See Section 7.4 for the complete format specification, field definitions, and computation formulas.
Tracks that include a template field SHOULD NOT also have a separate media timeline track, as the template provides equivalent functionality. Different tracks (e.g., audio and video) MAY have independent template values to accommodate different group durations.
5.2.16. Temporal ID
Required: Optional JSON Type: Number Location: Track Object
A number identifying the temporal layer/sub-layer encoding of the track, starting with 0 for the base layer, and increasing by 1 for the next higher temporal fidelity.
5.2.17. Spatial ID
Required: Optional JSON Type: Number Location: Track Object
A number identifying the spatial layer encoding of the track, starting with 0 for the base layer, and increasing by 1 for the next higher fidelity.
5.2.18. Codec
Required: Conditional JSON Type: String Location: Track Object
A string defining the codec used to encode the track. For LOC packaged content, the string codec registrations are defined in Sect 3 and Section 4 of [WEBCODECS-CODEC-REGISTRY]. This property MUST be specified for tracks which have an inherent codec associated with them (e.g., audio and video tracks). It is not required for raw data tracks or event streams.
5.2.19. Mimetype
Required: Optional JSON Type: String Location: Track Object
A string defining the mime type [MIME] of the track.
5.2.20. Framerate
Required: Optional JSON Type: Number Location: Track Object
A number defining the framerate of the track, expressed as frames per second. This property SHOULD only accompany video or other frame-based content.
5.2.21. Timescale
Required: Optional JSON Type: Number Location: Track Object
The number of time units that pass per second.
5.2.22. Maximum Bitrate
Required: Conditional JSON Type: Number Location: Track Object
A number defining the maximum bitrate of the track, expressed in bits per second. This property MUST be specified for audio and video tracks.
5.2.23. Average Bitrate
Required: Optional JSON Type: Number Location: Track Object
A number defining the average bitrate of the track, over the lifetime of the track, expressed in bits per second.
5.2.24. Maximum GOP Duration
Required: Optional JSON Type: Number Location: Track Object
A number defining the maximum duration, expressed in milliseconds, between successive independently decodable points (random access points) in the media track. This property SHOULD only accompany video tracks.
5.2.25. Maximum Group Duration
Required: Optional JSON Type: Number Location: Track Object
A number defining the maximum duration, expressed in milliseconds, of any MOQT Group in this track. This value helps subscribers estimate buffer requirements for the track.
5.2.26. Width
Required: Optional JSON Type: Number Location: Track Object
A number expressing the maximum encoded width of the video frames in pixels. This property SHOULD accompany tracks which have a visual representation.
5.2.27. Height
Required: Optional JSON Type: Number Location: Track Object
A number expressing the maximum encoded height of the video frames in pixels. This property SHOULD accompany tracks which have a visual representation.
5.2.28. Audio sample rate
Required: Conditional JSON Type: Number Location: Track Object
The number of audio frame samples per second. This property MUST accompany tracks for which audio codecs are specified.
5.2.29. Channel configuration
Required: Conditional JSON Type: String Location: Track Object
A string specifying the audio channel configuration. A string is used in order to provide the flexibility to describe complex channel configurations for multi-channel and Next Generation Audio schemas. This property MUST accompany tracks for which audio codecs are specified.
5.2.30. Display width
Required: Optional JSON Type: Number Location: Track Object
A number expressing the intended display width of the track content in pixels. This property SHOULD only accompany tracks which have a visual representation.
5.2.31. Display height
Required: Optional JSON Type: Number Location: Track Object
A number expressing the intended display height of the track content in pixels. This property SHOULD only accompany tracks which have a visual representation.
5.2.32. Language
Required: Optional JSON Type: String Location: Track Object
A string defining the dominant language of the track. The string MUST be one of the standard Tags for Identifying Languages as defined by [LANG].
5.2.33. Parent name
Required: Optional JSON Type: String Location: Track Object
A string defining the parent track name Section 5.2.3 to be cloned. This field MUST only be included inside a clone operation in a delta update Section 5.1.6.
5.2.34. Parent namespace
Required: Optional JSON Type: String Location: Track Object
A string defining the parent track namespace Section 5.2.2 to be cloned. This field MUST only be included inside a clone operation in a delta update Section 5.1.6. If this field is missing from a clone operation, then the namespace of the catalog is assumed.
5.2.35. Track duration
Required: Optional JSON Type: Number Location: Track Object
The duration of the track expressed in integer milliseconds. This field MUST NOT be included if the isLive Section 5.2.7 field value is true.
5.2.36. Connection URI
Required: Optional JSON Type: String Location: Track Object
A string containing the MOQT connection endpoint URI for the publish track. When specified, the subscriber MUST establish a new MOQT connection to this URI for publishing the track data. If this field is absent, the subscriber SHOULD reuse the existing MOQT connection that was used to receive the catalog.
The URI MUST be a valid MOQT endpoint URI as defined by [MoQTransport] (Sect 3.1.1). Examples include "moqt://logs.example.com:4443", "moqt://metrics.example.com:8443", or "https://logs.example.com/moqt".
5.2.37. Token
Required: Optional JSON Type: String Location: Track Object
A string containing an authentication token or credential for the track. For publish tracks, this token authorizes the subscriber to publish data to the specified track. The format and validation of the token is application-specific.
5.2.38. Encryption scheme
Required: Optional JSON Type: String Location: Track Object
A string identifying the encryption scheme used to protect the track content. The default and RECOMMENDED value is "moq-secure-objects" as defined in [SecureObjects]. If this field is absent, the track content is unencrypted.
Table 5: Registered encryption schemes
| Name | Value | Reference |
|---|---|---|
| MoQ Secure Objects | moq-secure-objects | [SecureObjects] |
Custom encryption schemes MAY be used. Custom scheme names SHOULD use Reverse Domain Name Notation to avoid collisions (e.g., "com.example.custom-encryption").
5.2.39. Cipher suite
Required: Optional JSON Type: String Location: Track Object
A string identifying the AEAD cipher suite used for encryption. This field MUST be present when encryptionScheme is specified. For the "moq-secure-objects" scheme, the following cipher suites are defined:
Table 6: Cipher suites for moq-secure-objects
| Name | Value | Tag Size |
|---|---|---|
| AES-128-GCM-SHA256 | aes-128-gcm-sha256 | 128 bits |
| AES-256-GCM-SHA512 | aes-256-gcm-sha512 | 128 bits |
| AES-128-CTR-HMAC-SHA256-80 | aes-128-ctr-hmac-sha256-80 | 80 bits |
Implementations MUST support "aes-128-gcm-sha256". Implementations SHOULD support "aes-128-ctr-hmac-sha256-80" for scenarios requiring smaller authentication tags.
5.2.40. Key ID
Required: Optional JSON Type: String Location: Track Object
A string identifying the key material used for encryption. This value is transmitted in the Secure Object KID extension header as defined in ([SecureObjects], Section 4.2) of each encrypted object.
The keyId and associated trackBaseKey are obtained from an external key management system. The mechanism for obtaining these values is out of scope for this specification. Examples include MLS-based key distribution [E2EE-MLS] or other out-of-band key exchange mechanisms.
The scope of a keyId is determined by the key management system in use. A keyId MAY be scoped to a single track, a single MSF session, or multiple tracks and sessions. When multiple tracks share the same Key ID, they MAY share the same base key material, though per-track keys are derived using the track name as defined in ([SecureObjects], Section 5).
5.2.41. Track Base Key
Required: Optional JSON Type: String Location: Track Object
A base64-encoded [BASE64] string containing the base key material for this track, as defined in ([SecureObjects], Section 5). This field works in conjunction with keyId to provide the cryptographic material needed for decryption. The trackBaseKey is obtained from the same key management system that provides the keyId.
When present, this field contains the raw key material that, together with the track name and other parameters defined in ([SecureObjects], Section 5), is used to derive the actual encryption keys. Publishers and subscribers MUST use matching trackBaseKey values for successful decryption.
5.2.42. Authorization Info
Required: Optional JSON Type: Object Location: Track Object
An object indicating that authorization is required to access this track. The presence of this field signals to subscribers that they must obtain and present valid authorization tokens when subscribing to this track.
The keys of this object are authorization scheme identifiers. Registered schemes are defined in Table 7. The values are scheme-specific configuration objects defined by the referenced specifications.
Table 7: Registered Authorization Schemes
| Scheme | Value | Reference |
|---|---|---|
| Privacy Pass | privacy-pass | [PrivacyPassAuth] |
| CAT | cat | [C4M] |
Custom authorization schemes MAY be used. Custom scheme names MUST use a unique naming convention, such as Reverse Domain Name Notation (e.g., "com.example.custom-auth"), to avoid naming collisions.
Subscribers inspect the authInfo field to determine which authorization scheme to use and then obtain tokens through out-of-band mechanisms. The specific token format, acquisition process, and presentation method are defined by the authorization scheme specification.
5.2.43. Token Delivery via URI
Tokens can be delivered to subscribers through the catalog request URI using
variable substitution. Fragment parameters (following the # character) are
processed client-side and can be substituted into catalog fields using the
variable substitution mechanism defined in Section 5.4.
For example, given a URI:
moqt://relay.example.com/live#namespace--name&token=XYZ789
A catalog with:
"authInfo": {
"cat": "%token%"
}
Would be resolved by the subscriber to include "cat": "XYZ789", which is
then presented in control messages as specified by the authorization scheme.
5.2.44. Accessibility
Required: Optional JSON Type: Array Location: Track Object
An array of accessibility descriptors indicating accessibility features embedded within the track. Each descriptor is a JSON Object containing:
-
A required 'scheme' field (String) identifying the accessibility scheme.
-
A required 'value' field (String) specifying the accessibility channels or features available.
Table 6: Registered accessibility schemes
| Scheme | Description |
|---|---|
| urn:scte:dash:cc:cea-608:2015 | CEA-608 closed captions |
| urn:scte:dash:cc:cea-708:2015 | CEA-708 closed captions |
The 'value' field for CEA-608/708 schemes uses the format defined by [SCTE214-1], where caption service channels are specified as semicolon-separated pairs of channel identifier and language code (e.g., "CC1=eng;CC3=spa").
A subscriber MAY use this information to determine caption availability and configure an appropriate caption decoder.