Skip to content

Data Streams

MoQT objects are delivered via three mechanisms:

Unidirectional QUIC streams carrying objects within a subgroup. Each stream has a header identifying the track, group, and subgroup, followed by a sequence of objects.

In draft-17, the subgroup stream header uses a bitfield format with flags for properties, subgroup ID mode, end-of-group, and default priority. The subgroup ID mode determines whether the subgroup ID is zero, derived from the first object ID, or explicitly encoded.

Unidirectional QUIC streams used for FETCH responses. The stream type is 0x05 in draft-17. A fetch header identifies the request, followed by the requested objects in order.

QUIC datagrams for ultra-low-latency delivery of small objects. No stream ordering guarantees. In draft-17, the datagram header also uses a bitfield format with flags for properties, end-of-group, zero object ID, default priority, and status.

Each object on a stream includes:

  • Object ID within the group
  • Publisher priority — scheduling hint (omitted if the stream header sets the default-priority flag in draft-17)
  • Object status — normal, end of group, end of track
  • Extension data — optional extension bytes (replaces key-value extension headers in draft-17)
  • Payload length and payload

Status codes changed in draft-17:

StatusDraft-14/16Draft-17
Normal0x00x0
End of Group0x10x3
End of Track0x20x4

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. The desktop app displays objects in a structured object viewer.