An OBJECT message contains a range of contiguous bytes from from the specified track, as well as associated metadata required to deliver, cache, and forward it. Objects are sent by publishers.
7.1.1. Canonical Object Fields
A canonical MoQ Object has the following information:
-
Track Namespace and Track Name: The track this object belongs to.
-
Group ID: The object is a member of the indicated group ID Section 2.3 within the track.
-
Object ID: The order of the object within the group. The IDs starts at 0, increasing sequentially for each object within the group.
-
Publisher Priority: An 8 bit integer indicating the publisher's priority for the Object Section 4.
-
Object Forwarding Preference: An enumeration indicating how a publisher sends an object. The preferences are Track, Subgroup, and Datagram. An Object MUST be sent according to its
Object Forwarding Preference, described below. -
Subgroup ID: The object is a member of the indicated subgroup ID (Section 2.2) within the group. This field is omitted if the Object Forwarding Preference is Track or Datagram.
-
Object Status: As enumeration used to indicate missing objects or mark the end of a group or track. See Section 7.1.1.1 below.
-
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).
7.1.1.1. Object Status
The Object Status informs subscribers what objects will not be received because they were never produced, are no longer available, or because they are beyond the end of a group or track.
Status can have following values:
-
0x0 := Normal object. The payload is array of bytes and can be empty.
-
0x1 := Indicates Object does not exist. Indicates that this object does not exist at any publisher and it will not be published in the future. This SHOULD be cached.
-
0x3 := Indicates end of Group. ObjectId is one greater that the largest object produced in the group identified by the GroupID. This is sent right after the last object in the group. If the ObjectID is 0, it indicates there are no Objects in this Group. This SHOULD be cached. A publisher MAY use an end of Group object to signal the end of all open Subgroups in a Group.
-
0x4 := Indicates end of Track and Group. GroupID is one greater than the largest group produced in this track and the ObjectId is one greater than the largest object produced in that group. This is sent right after the last object in the track. This SHOULD be cached.
-
0x5 := Indicates end of Subgroup. Object ID is one greater than the largest normal object ID in the Subgroup.
Any other value SHOULD be treated as a protocol error and terminate the session with a Protocol Violation (Section 3.5). Any object with a status code other than zero MUST have an empty payload.
Though some status information could be inferred from QUIC stream state, that information is not reliable and cacheable.