§9.3.

Datagrams

A single object can be conveyed in a datagram. The Track Alias field Section 9.1 indicates the track this Datagram belongs to. If an endpoint receives a datagram with an unknown Track Alias, it MAY drop the datagram or choose to buffer it for a brief period to handle reordering with the control message that establishes the Track Alias.

An Object received in an OBJECT_DATAGRAM or OBJECT_DATAGRAM_STATUS message has an Object Forwarding Preference = Datagram.

To send an Object with Object Forwarding Preference = Datagram, determine the length of the header and payload and send the Object as datagram. When the total size is larger than maximum datagram size for the session, the Object will be dropped without any explicit notification.

Each session along the path between the Original Publisher and End Subscriber might have different maximum datagram sizes. Additionally, Object Extension Headers (Section 9.2.1.2) can be added to Objects as they pass through the MOQT network, increasing the size of the Object and the chances it will exceed the maximum datagram size of a downstream session and be dropped.

9.3.1. Object Datagram

An OBJECT_DATAGRAM carries a single object in a datagram.

OBJECT_DATAGRAM {
  Type (i) = 0x0-0x4,
  Track Alias (i),
  Group ID (i),
  Object ID (i),
  Publisher Priority (8),
  [Extension Headers Length (i),
  Extension headers (...)],
  Object Payload (..),
}
Figure 33: MOQT OBJECT_DATAGRAM

There are 4 defined Type values for OBJECT_DATAGRAM:

Table 12
Type End Of Group Extensions
    Present
0x00 No No
0x01 No Yes
0x02 Yes No
0x03 Yes Yes

For Type values where End of Group is Yes, the Object is the last Object in the Group.

For Type values where Extensions Present is No, Extensions Headers Length is not present and the Object has no extensions. When Extensions Present is Yes, Extension Headers Length is present. If an endpoint receives a datagram with Type 0x01 and Extension Headers Length is 0, it MUST close the session with Protocol Violation.

There is no explicit length field. The entirety of the transport datagram following Publisher Priority contains the Object Payload.

9.3.2. Object Datagram Status

An OBJECT_DATAGRAM_STATUS is similar to OBJECT_DATAGRAM except it conveys an Object Status and has no payload.

OBJECT_DATAGRAM_STATUS {
  Type (i),
  Track Alias (i),
  Group ID (i),
  Object ID (i),
  Publisher Priority (8),
  [Extension Headers Length (i),
  Extension headers (...)],
  Object Status (i),
}
Figure 34: MOQT OBJECT_DATAGRAM_STATUS

The Type field takes the form 0b0000001X (or the set of values from 0x02 to 0x03). The LSB of the type determines if the Extensions Headers Length and Extension headers are present. If an endpoint receives a datagram with Type 0x03 and Extension Headers Length is 0, it MUST close the session with Protocol Violation.

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