@@ -1236,8 +1236,8 @@ the `query` portion of the URI to the parameter.
12361236# ### MAX_SUBSCRIBE_ID {#max-subscribe-id}
12371237
12381238The MAX_SUBSCRIBE_ID parameter (Parameter Type 0x02) communicates an initial
1239- value for the Maximum Subscribe ID to the receiving subscriber. The default value
1240- is 0, so if not specified, the peer MUST NOT create subscriptions.
1239+ value for the Maximum Subscribe ID to the receiving subscriber. The default
1240+ value is 0, so if not specified, the peer MUST NOT create subscriptions.
12411241
12421242# # GOAWAY {#message-goaway}
12431243
@@ -2345,6 +2345,12 @@ Track or Datagram.
23452345* Object Status: As enumeration used to indicate missing
23462346objects or mark the end of a group or track. See {{object-status}} below.
23472347
2348+ * Object Extension Count: The number of Object Extensions present. A value of 0
2349+ indicates that no Object Extension Headers are present.
2350+
2351+ * Object Extensions : A sequence of Object Extension Headers. See
2352+ {{object-extensions}} below.
2353+
23482354* Object Payload: An opaque payload intended for an End Subscriber and SHOULD
23492355NOT be processed by a relay. Only present when 'Object Status' is Normal (0x0).
23502356
@@ -2389,6 +2395,44 @@ Any object with a status code other than zero MUST have an empty payload.
23892395Though some status information could be inferred from QUIC stream state,
23902396that information is not reliable and cacheable.
23912397
2398+ # ### Object Extension Header {#object-extensions}
2399+ Object Extension Headers are visible to relays and allow the transmission of
2400+ future metadata relevant to MOQT Object distribution. Any Object metadata never
2401+ accessed by the transport or relays SHOULD be serialized as part of the Object
2402+ payload and not as an extension header.
2403+
2404+ Extension Headers are defined in external specifications and registered in an
2405+ IANA table {{iana}}. These specifications define the type and value of the
2406+ header, along with any rules concerning processing, modification, caching and
2407+ forwarding. A relay which is coded to implement these rules is said to
2408+ " support" the extension.
2409+
2410+ If unsupported by the relay, Extension Headers MUST NOT be modified, MUST be
2411+ cached as part of the Object and MUST be forwarded by relays.
2412+
2413+ If supported by the relay and subject to the processing rules specified in the
2414+ definition of the extension, Extension Headers MAY be modified, added, removed,
2415+ and/or cached by relays.
2416+
2417+ Object Extension Headers are serialized as defined below :
2418+
2419+ ~~~
2420+ Extension Header {
2421+ Header Type (i),
2422+ [Header Value (i)]
2423+ [Header Length (i),
2424+ Header Value (..)]
2425+ }
2426+ ~~~
2427+ {: # object-extension-format title="Object Extension Header Format"}
2428+
2429+ * Header type: an unsigned integer, encoded as a varint, identifying the type
2430+ of the extension and also the subsequent serialization.
2431+ * Header values: even types are followed by a single varint encoded value. Odd
2432+ types are followed by a varint encoded length and then the header value.
2433+ Header types are registered in the IANA table 'MOQ Extension Headers'.
2434+ See {{iana}}.
2435+
23922436# # Object Datagram {#object-datagram}
23932437
23942438An `OBJECT_DATAGRAM` carries a single object in a datagram.
@@ -2406,6 +2450,10 @@ OBJECT_DATAGRAM {
24062450 Group ID (i),
24072451 Object ID (i),
24082452 Publisher Priority (8),
2453+ Extension Count (i),
2454+ [Extension headers (...)],
2455+ Object Payload Length (i),
2456+ [Object Status (i)],
24092457 Object Payload (..),
24102458}
24112459~~~
@@ -2470,6 +2518,8 @@ The Object Status field is only sent if the Object Payload Length is zero.
24702518~~~
24712519{
24722520 Object ID (i),
2521+ Extension Count (i),
2522+ [Extension headers (...)],
24732523 Object Payload Length (i),
24742524 [Object Status (i)],
24752525 Object Payload (..),
@@ -2572,6 +2622,8 @@ Each object sent on a fetch stream after the FETCH_HEADER has the following form
25722622 Subgroup ID (i),
25732623 Object ID (i),
25742624 Publisher Priority (8),
2625+ Extension Count (i),
2626+ [Extension headers (...)],
25752627 Object Payload Length (i),
25762628 [Object Status (i)],
25772629 Object Payload (..),
@@ -2609,6 +2661,38 @@ SUBGROUP_HEADER {
26092661}
26102662~~~
26112663
2664+ Sending a group on one stream, with the first object containing two
2665+ Extension Headers.
2666+
2667+ ~~~
2668+ Stream = 2
2669+
2670+ STREAM_HEADER_GROUP {
2671+ Subscribe ID = 2
2672+ Track Alias = 2
2673+ Group ID = 0
2674+ Publisher Priority = 0
2675+ }
2676+ {
2677+ Object ID = 0
2678+ Extension Count = 2
2679+ { Type = 4
2680+ Value = 2186796243
2681+ },
2682+ { Type = 77
2683+ Length = 21
2684+ Value = "traceID:123456"
2685+ }
2686+ Object Payload Length = 4
2687+ Payload = "abcd"
2688+ }
2689+ {
2690+ Object ID = 1
2691+ Object Payload Length = 4
2692+ Payload = "efgh"
2693+ }
2694+
2695+ ~~~
26122696
26132697
26142698# Security Considerations {#security}
@@ -2652,8 +2736,12 @@ TODO: fill out currently missing registries:
26522736* Announce Error codes
26532737* Announce Cancel Reason codes
26542738* Message types
2739+ * MOQ Extension headers - we wish to reserve extension types 0-63 for
2740+ standards utilization where space is a premium, 64 - 16383 for
2741+ standards utilization where space is less of a concern, and 16384 and
2742+ above for first-come-first-served non-standardization usage.
26552743
2656- TODO : register the URI scheme and the ALPN
2744+ TODO : register the URI scheme and the ALPN and grease the Extension types
26572745
26582746# Contributors
26592747{:numbered="false"}
0 commit comments