§7.3.

Streams

When objects are sent on streams, the stream begins with a stream header message and is followed by one or more sets of serialized object fields. If a stream ends gracefully in the middle of a serialized Object, terminate the session with a Protocol Violation.

A publisher SHOULD NOT open more than one stream at a time with the same stream header message type and fields.

TODO: figure out how a relay closes these streams

7.3.1. Stream Header Subgroup

When a stream begins with STREAM_HEADER_SUBGROUP, all objects on the stream belong to the track requested in the Subscribe message identified by Subscribe ID and the subgroup indicated by 'Group ID' and Subgroup ID.

STREAM_HEADER_SUBGROUP Message {
  Track Alias (i),
  Group ID (i),
  Subgroup ID (i),
  Publisher Priority (8),
}
Figure 28: MOQT STREAM_HEADER_SUBGROUP Message

All Objects received on a stream opened with STREAM_HEADER_SUBGROUP have an Object Forwarding Preference = Subgroup.

To send an Object with Object Forwarding Preference = Subgroup, find the open stream that is associated with the subscription, Group ID and Subgroup ID, or open a new one and send the STREAM_HEADER_SUBGROUP. Then serialize the following fields.

The Object Status field is only sent if the Object Payload Length is zero.

{
  Object ID (i),
  Object Payload Length (i),
  [Object Status (i)],
  Object Payload (..),
}
Figure 29: MOQT Group Stream Object Fields

A publisher MUST NOT send an Object on a stream if its Object ID is less than a previously sent Object ID within a given group in that stream.

7.3.2. Fetch Header

When a stream begins with FETCH_HEADER, all objects on the stream belong to the track requested in the Fetch message identified by Subscribe ID.

FETCH_HEADER Message {
  Subscribe ID (i),
}
Figure 30: MOQT FETCH_HEADER Message

Each object sent on a fetch stream after the FETCH_HEADER has the following format:

{
  Group ID (i),
  Subgroup ID (i),
  Object ID (i),
  Publisher Priority (8),
  Object Payload Length (i),
  [Object Status (i)],
  Object Payload (..),
}
Figure 31: MOQT Fetch Object Fields

The Object Status field is only sent if the Object Payload Length is zero.

This is one section of the MoQT specification, rendered per-section for quick reference and citation. The authoritative text is draft-ietf-moq-transport-07 at the IETF.