@@ -763,7 +763,7 @@ subscription. It is specified in the SUBSCRIBE message, and can be updated via
763763SUBSCRIBE_UPDATE message. The subscriber priority of an individual schedulable
764764object is the subscriber priority of the subscription that caused that object
765765to be sent. When subscriber priority is changed, a best effort SHOULD be made
766- to change the apply that to all objects that have not been sent, but it is
766+ to apply the change to all objects that have not been sent, but it is
767767implementation dependent what happens to objects that have already been
768768received and possibly scheduled.
769769
@@ -1300,14 +1300,14 @@ the subscription starts with the first published or received group.
13001300
13011301AbsoluteStart (0x3) : Specifies an open-ended subscription beginning
13021302from the object identified in the StartGroup and StartObject fields. If the
1303- StartGroup is prior to the current group, the publisher MUST reply with a
1304- SUBSCRIBE_ERROR with code 'Invalid Range' .
1303+ StartGroup is prior to the current group, the subscription starts at the
1304+ beginning of the current object like the 'Latest Object' filter .
13051305
13061306AbsoluteRange (0x4) : Specifies a closed subscription starting at StartObject
13071307in StartGroup and ending at EndObject in EndGroup. The start and end of the
13081308range are inclusive. EndGroup MUST specify the same or a later group than
1309- StartGroup. If the StartGroup is prior to the current group, the publisher MUST
1310- reply with a SUBSCRIBE_ERROR with code 'Invalid Range' .
1309+ StartGroup. If the StartGroup is prior to the current group, the subscription
1310+ starts at the beginning of the current object like the 'Latest Object' filter .
13111311
13121312A filter type other than the above MUST be treated as error.
13131313
@@ -1391,16 +1391,22 @@ A publisher MUST NOT send objects from outside the requested start and end.
13911391# # SUBSCRIBE_UPDATE {#message-subscribe-update-req}
13921392
13931393A subscriber issues a SUBSCRIBE_UPDATE to a publisher to request a change to
1394- a prior subscription. Subscriptions can only become more narrower, not wider,
1395- because an attempt to widen a subscription could fail. If Objects before the
1396- start or after the end of the current subscription are needed, a separate
1397- subscription can be made. The start Object MUST NOT decrease and when it increases,
1398- there is no guarantee that a publisher will not have already sent Objects before
1399- the new start Object. The end Object MUST NOT increase and when it decreases,
1400- there is no guarantee that a publisher will not have already sent Objects after
1401- the new end Object. A publisher SHOULD close the Session as a 'Protocol Violation'
1402- if the SUBSCRIBE_UPDATE violates either rule or if the subscriber specifies a
1403- Subscribe ID that does not exist within the Session.
1394+ an existing subscription. Subscriptions can only become more narrow, not wider,
1395+ because an attempt to widen a subscription could fail. If Objects before the
1396+ start or after the end of the current subscription are needed, a fetch might
1397+ be able to retrieve objects before the start. The start Object MUST NOT
1398+ decrease and when it increases, there is no guarantee that a publisher will
1399+ not have already sent Objects before the new start Object. The end Group
1400+ MUST NOT increase and when it decreases, there is no guarantee that a publisher
1401+ will not have already sent Objects after the new end Object. A publisher SHOULD
1402+ close the Session as a 'Protocol Violation' if the SUBSCRIBE_UPDATE violates
1403+ either rule or if the subscriber specifies a Subscribe ID that has not existed
1404+ within the Session.
1405+
1406+ There is no control message in response to a SUBSCRIBE_UPDATE, because it is
1407+ expected that it will always succeed and the worst outcome is that it is not
1408+ processed promptly and some extra objects from the existing subscription are
1409+ delivered.
14041410
14051411Unlike a new subscription, SUBSCRIBE_UPDATE can not cause an Object to be
14061412delivered multiple times. Like SUBSCRIBE, EndGroup MUST specify the
@@ -1866,11 +1872,10 @@ Values of 0x0 and those larger than 0x2 are a protocol error.
18661872the Largest Group ID and Object Id indicate the last Object in the track,
186718730 if not.
18681874
1869- * Largest Group ID: The largest Group ID available for this track. This field
1870- is only present if ContentExists has a value of 1.
1875+ * Largest Group ID: The largest Group ID available for this track.
18711876
18721877* Largest Object ID: The largest Object ID available within the largest Group ID
1873- for this track. This field is only present if ContentExists has a value of 1.
1878+ for this track.
18741879
18751880* Subscribe Parameters: The parameters are defined in {{version-specific-params}}.
18761881
@@ -2223,7 +2228,7 @@ the type of the stream in question.
22232228|-------|-------------------------------------------------------|
22242229| ID | Type |
22252230|------:|:------------------------------------------------------|
2226- | 0x4 | STREAM_HEADER_SUBGROUP ({{stream -header-subgroup }}) |
2231+ | 0x4 | SUBGROUP_HEADER ({{subgroup -header}}) |
22272232|-------|-------------------------------------------------------|
22282233| 0x5 | FETCH_HEADER ({{fetch-header}}) |
22292234|-------|-------------------------------------------------------|
@@ -2324,9 +2329,9 @@ Any object with a status code other than zero MUST have an empty payload.
23242329Though some status information could be inferred from QUIC stream state,
23252330that information is not reliable and cacheable.
23262331
2327- # # Object Datagram Message {#object-datagram}
2332+ # # Object Datagram {#object-datagram}
23282333
2329- An `OBJECT_DATAGRAM` message carries a single object in a datagram.
2334+ An `OBJECT_DATAGRAM` carries a single object in a datagram.
23302335
23312336An Object received in an `OBJECT_DATAGRAM` message has an `Object
23322337Forwarding Preference` = `Datagram`. To send an Object with `Object
@@ -2336,71 +2341,68 @@ size can be larger than maximum datagram size for the session, the Object
23362341will be dropped.
23372342
23382343~~~
2339- OBJECT_DATAGRAM Message {
2344+ OBJECT_DATAGRAM {
23402345 Track Alias (i),
23412346 Group ID (i),
23422347 Object ID (i),
23432348 Publisher Priority (8),
23442349 Object Payload (..),
23452350}
23462351~~~
2347- {: # object-datagram-format title="MOQT OBJECT_DATAGRAM Message "}
2352+ {: # object-datagram-format title="MOQT OBJECT_DATAGRAM"}
23482353
23492354There is no explicit length field. The entirety of the transport datagram
23502355following Publisher Priority contains the Object Payload.
23512356
2352- # # Object Datagram Status Message {#object-datagram-status}
2357+ # # Object Datagram Status {#object-datagram-status}
23532358
2354- An `OBJECT_DATAGRAM_STATUS` message is similar to OBEJCT_DATAGRAM except it
2359+ An `OBJECT_DATAGRAM_STATUS` is similar to OBEJCT_DATAGRAM except it
23552360conveys an Object Status and has no payload.
23562361
23572362~~~
2358- OBJECT_DATAGRAM_STATUS Message {
2363+ OBJECT_DATAGRAM_STATUS {
23592364 Track Alias (i),
23602365 Group ID (i),
23612366 Object ID (i),
23622367 Publisher Priority (8),
23632368 Object Status (i),
23642369}
23652370~~~
2366- {: # object-datagram-status-format title="MOQT OBJECT_DATAGRAM_STATUS Message "}
2371+ {: # object-datagram-status-format title="MOQT OBJECT_DATAGRAM_STATUS"}
23672372
23682373# # Streams
23692374
2370- When objects are sent on streams, the stream begins with a stream header
2371- message and is followed by one or more sets of serialized object fields.
2372- If a stream ends gracefully in the middle of a serialized Object, terminate the
2373- session with a Protocol Violation.
2375+ When objects are sent on streams, the stream begins with a Subgroup Header
2376+ and is followed by one or more sets of serialized object fields.
2377+ If a stream ends gracefully in the middle of a serialized Object, the session
2378+ SHOULD be terminated with a Protocol Violation.
23742379
2375- A publisher SHOULD NOT open more than one stream at a time with the same stream
2376- header message type and fields .
2380+ A publisher SHOULD NOT open more than one stream at a time with the same Subgroup
2381+ Header field values .
23772382
23782383
2379- TODO : figure out how a relay closes these streams
2384+ # ## Subgroup Header
23802385
2381-
2382- # ## Stream Header Subgroup
2383-
2384- When a stream begins with `STREAM_HEADER_SUBGROUP`, all objects on the stream
2386+ When a stream begins with `SUBGROUP_HEADER`, all Objects on the stream
23852387belong to the track requested in the Subscribe message identified by `Track Alias`
23862388and the subgroup indicated by 'Group ID' and `Subgroup ID`.
23872389
23882390~~~
2389- STREAM_HEADER_SUBGROUP Message {
2391+ SUBGROUP_HEADER {
23902392 Track Alias (i),
23912393 Group ID (i),
23922394 Subgroup ID (i),
23932395 Publisher Priority (8),
23942396}
23952397~~~
2396- {: # stream -header-subgroup- format title="MOQT STREAM_HEADER_SUBGROUP Message "}
2398+ {: # object -header-format title="MOQT SUBGROUP_HEADER "}
23972399
2398- All Objects received on a stream opened with `STREAM_HEADER_SUBGROUP ` have an
2400+ All Objects received on a stream opened with `SUBGROUP_HEADER ` have an
23992401` Object Forwarding Preference` = `Subgroup`.
24002402
24012403To send an Object with `Object Forwarding Preference` = `Subgroup`, find the open
24022404stream that is associated with the subscription, `Group ID` and `Subgroup ID`,
2403- or open a new one and send the `STREAM_HEADER_SUBGROUP `. Then serialize the
2405+ or open a new one and send the `SUBGROUP_HEADER `. Then serialize the
24042406following fields.
24052407
24062408The Object Status field is only sent if the Object Payload Length is zero.
@@ -2413,7 +2415,7 @@ The Object Status field is only sent if the Object Payload Length is zero.
24132415 Object Payload (..),
24142416}
24152417~~~
2416- {: # object-group -format title="MOQT Group Stream Object Fields"}
2418+ {: # object-subgroup -format title="MOQT Subgroup Fields"}
24172419
24182420A publisher MUST NOT send an Object on a stream if its Object ID is less than a
24192421previously sent Object ID within a given group in that stream.
@@ -2449,9 +2451,9 @@ the FIN if and only if all objects were received. If the application receives
24492451all data on the stream and the FIN, it can ignore any RESET_STREAM it receives.
24502452
24512453If a sender will not deliver any objects from a Subgroup, it MAY send
2452- a STREAM_HEADER_SUBGROUP on a new stream, with no objects, and
2453- then send RESET_STREAM_AT with a reliable_size equal to the length of the
2454- stream header. This explicitly tells the receiver there is an unsent Subgroup.
2454+ a SUBGROUP_HEADER on a new stream, with no objects, and then send RESET_STREAM_AT
2455+ with a reliable_size equal to the length of the stream header. This explicitly
2456+ tells the receiver there is an unsent Subgroup.
24552457
24562458Since SUBSCRIBEs always end on a group boundary, an ending subscription can
24572459always cleanly close all its subgroups. A sender that terminates a stream
@@ -2495,11 +2497,11 @@ When a stream begins with `FETCH_HEADER`, all objects on the stream belong to th
24952497track requested in the Fetch message identified by `Subscribe ID`.
24962498
24972499~~~
2498- FETCH_HEADER Message {
2500+ FETCH_HEADER {
24992501 Subscribe ID (i),
25002502}
25012503~~~
2502- {: # fetch-header-format title="MOQT FETCH_HEADER Message "}
2504+ {: # fetch-header-format title="MOQT FETCH_HEADER"}
25032505
25042506
25052507Each object sent on a fetch stream after the FETCH_HEADER has the following format :
@@ -2524,33 +2526,12 @@ The Subgroup ID field of an object with a Forwarding Preference of "Datagram"
25242526
25252527# # Examples
25262528
2527- Sending a track on one stream :
2528-
2529- ~~~
2530- STREAM_HEADER_TRACK {
2531- Track Alias = 1
2532- Publisher Priority = 0
2533- }
2534- {
2535- Group ID = 0
2536- Object ID = 0
2537- Object Payload Length = 4
2538- Payload = "abcd"
2539- }
2540- {
2541- Group ID = 1
2542- Object ID = 0
2543- Object Payload Length = 4
2544- Payload = "efgh"
2545- }
2546- ~~~
2547-
25482529Sending a subgroup on one stream :
25492530
25502531~~~
25512532Stream = 2
25522533
2553- STREAM_HEADER_SUBGROUP {
2534+ SUBGROUP_HEADER {
25542535 Track Alias = 2
25552536 Group ID = 0
25562537 Subgroup ID = 0
0 commit comments