§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 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 the 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,0x24-25
  Track Alias (i),
  Group ID (i),
  [Object ID (i),]
  [Publisher Priority (8),]
  [Extensions (..),]
  [Object Status (i),]
  [Object Payload (..),]
}
Figure 26: 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 5
Type End Of Group Extensions Object ID Priority Present Status / Payload
0x00 No No Yes Yes Payload
0x01 No Yes Yes Yes Payload
0x02 Yes No Yes Yes Payload
0x03 Yes Yes Yes Yes Payload
0x04 No No No Yes Payload
0x05 No Yes No Yes Payload
0x06 Yes No No Yes Payload
0x07 Yes Yes No Yes Payload
0x20 No No Yes Yes Status
0x21 No Yes Yes Yes Status
0x24 No No No Yes Status
0x25 No Yes No Yes Status
0x08 No No Yes No Payload
0x09 No Yes Yes No Payload
0x0A Yes No Yes No Payload
0x0B Yes Yes Yes No Payload
0x0C No No No No Payload
0x0D No Yes No No Payload
0x0E Yes No No No Payload
0x0F Yes Yes No No Payload
0x28 No No Yes No Status
0x29 No Yes Yes No Status
0x2C No No Yes No Status
0x2D No Yes Yes No 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 Extensions structure defined in Section 10.2.1.2 is 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 a 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.

  • Priority Present: If Priority Present is No, Priority is not present and this Object inherits the Publisher Priority specified in the control message that established the subscription. When Priority Present is Yes, the Priority field is present.

  • 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, 0x21, 0x24 and 0x25 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-15 at the IETF.