An Object contains a range of contiguous bytes from the specified track, as well as associated metadata required to deliver, cache, and forward it. Objects are sent by publishers.
11.2.1. Object Header
A canonical MOQT Object has the following fields:
-
Track Namespace and Track Name: The track this object belongs to.
-
Group ID: The identifier of the Object's Group (see Section 2.3) within the Track.
-
Object ID: The order of the object within the group.
-
Publisher Priority: An 8 bit integer indicating the publisher's priority for the Object (Section 7).
-
Object Forwarding Preference: An enumeration indicating how a publisher sends an object. The preferences are Subgroup and Datagram.
Object Forwarding Preferenceis a property of an individual Object and can vary among Objects in the same Track. In a subscription, an Object MUST be sent according to itsObject Forwarding Preference. -
Subgroup ID: The identifier of the Object's Subgroup (see Section 2.2) within the Group. This field is omitted if the
Object Forwarding Preferenceis Datagram. -
Object Status: An enumeration used to indicate whether the Object is a normal Object or mark the end of a group or track. See Section 11.2.1.1 below.
-
Object Properties : A sequence of Properties associated with the object. See Section 11.2.1.2.
-
Object Payload: An opaque payload intended for an End Subscriber and SHOULD NOT be processed by a relay. Only present when 'Object Status' is Normal (0x0).
11.2.1.1. Object Status
The Object Status is a field that is only present in objects that are delivered via a SUBSCRIPTION, and is absent in Objects delivered via a FETCH. It allows the publisher to explicitly communicate that a specific range of objects does not exist.
Status can have following values:
-
0x0 := Normal object. This status is implicit for any non-zero length object. Zero-length objects explicitly encode the Normal status.
-
0x3 := Indicates End of Group. Indicates that no objects with the specified Group ID and the Object ID that is greater than or equal to the one specified exist in the group identified by the Group ID.
-
0x4 := Indicates End of Track. Indicates that no objects with the location that is equal to or greater than the one specified exist.
All of those SHOULD be cached.
There is no Object Status value indicating the end of a Subgroup. The end of a Subgroup is signaled by closing its stream with a FIN (see Section 11.4.3).
Any other value SHOULD be treated as a protocol error and the session SHOULD
be closed with a PROTOCOL_VIOLATION (Section 3.5).
An Object MUST have an empty payload unless its Object Status value is
registered as permitting a payload in the Object Status registry
(Section 15.9). Of the values defined in this document, only Normal
(0x0) permits a payload.
11.2.1.2. Object Properties
Any Object with status Normal can have properties (Section 2.5).
If an endpoint receives properties on an Object with status that is
not Normal, it MUST close the session with a PROTOCOL_VIOLATION.
Object Properties are visible to relays and are intended to be relevant to MOQT Object distribution. Any Object metadata never intended to be accessed by the transport or Relays SHOULD be serialized as part of the Object payload and not as an Object Property.
Object Properties set by the Original Publisher that are intended to be visible to relays, but not modified by them, SHOULD be placed in Immutable Properties (Section 12.7), which enables end-to-end authentication schemes.
Object Properties are serialized as a length in bytes followed by Key-Value-Pairs (see Figure 2).
Object Properties {
Properties Length (vi64),
Properties (..),
}
Object Property types are registered in the IANA table 'MOQ Properties'. See Section 15.