Skip to content

Data Streams

MoQT objects are delivered via three mechanisms:

Unidirectional streams carrying objects within a subgroup. Each stream has a header identifying the track (by its Track Alias), group, and subgroup, followed by a sequence of objects. The header’s type code also says which optional fields the stream uses.

Unidirectional streams carrying the response to a FETCH. The stream type is 0x05 (FETCH_HEADER) in every draft from 07 to 23. The header identifies the FETCH request, and the requested objects follow in order. In draft-23 a fetch stream can also mark the end of a group, the end of the track, and ranges of objects the publisher can no longer deliver.

Datagrams carry a single object each, for the lowest latency, with no ordering guarantees.

Each object on a stream includes:

  • Object ID within the group
  • Publisher priority — scheduling hint (in drafts 15–23 it can be left out, and the object then takes the Publisher Priority from the control message that established the subscription)
  • Object status — normal, end of group, end of track
  • Per-object metadata — extension headers in drafts 08–16, Object Properties from draft-17
  • Payload length and payload
StatusCodeDrafts
Normal0x007–23
Object Does Not Exist0x107–15
End of Group0x307–23
End of Track and Group0x407–10
End of Track0x411–23
End of Track0x508–10
End of Subgroup0x507

All moqtap tools parse data stream headers and display:

  • Track alias mapping to namespace + track name
  • Group/object/subgroup IDs
  • Priority and status fields
  • Payload content (auto-detected as text, JSON, fMP4, or binary)
  • Delivery mode (subgroup, fetch, or datagram)

The CLI shows data stream events inline with color-coded output (UNI for unidirectional streams, OBJ for object headers, DGRAM for datagrams). The browser extension provides a stream inspector with hex and JSON views.