§10.3.

Datagrams

A single object can be conveyed in a datagram. The Track Alias field Section 10.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 10.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.

10.3.1. Object Datagram

An OBJECT_DATAGRAM carries a single object in a datagram.

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

The Type value determines which fields are present in the OBJECT_DATAGRAM. There are 10 defined Type values for OBJECT_DATAGRAM.

Table 6
Type End Of Group Extensions Object ID Status / Payload
    Present Present  
0x00 No No Yes Payload
0x01 No Yes Yes Payload
0x02 Yes No Yes Payload
0x03 Yes Yes Yes Payload
0x04 No No No Payload
0x05 No Yes No Payload
0x06 Yes No No Payload
0x07 Yes Yes No Payload
0x20 No No Yes Status
0x21 No Yes Yes Status
  • End of Group: For Type values where End of Group is "Yes" the Object is the last Object in the Group.

  • Extensions Present: If Extensions Present is "Yes" the Extension Headers Length and Extension headers fields are included. If an endpoint receives a datagram with Extensions Present as "Yes" and a Extension Headers Length of 0, it MUST close the session with PROTOCOL_VIOLATION.

  • Object ID Present: If Object ID Present is No, the Object ID field is omitted and the Object ID is 0. When Object ID Present is Yes, the Object ID field is present and encodes the Object ID.

  • Payload and Status: The Object Status field and Object Payload are mutually exclusive.

    • For Type values 0x00 through 0x07, the Object Payload is present and the Object Status field is omitted.

      There is no explicit length field for the Object Payload. The entirety of the transport datagram following the Object header fields contains the payload.

    • For Type values 0x20 and 0x21, the Object Status field is present and there is no Object Payload.

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