Skip to content

Commit f6aa0fb

Browse files
authored
Merge branch 'main' into error-codes
2 parents 7d901b8 + 66a6f1a commit f6aa0fb

File tree

1 file changed

+51
-70
lines changed

1 file changed

+51
-70
lines changed

draft-ietf-moq-transport.md

Lines changed: 51 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -763,7 +763,7 @@ subscription. It is specified in the SUBSCRIBE message, and can be updated via
763763
SUBSCRIBE_UPDATE message. The subscriber priority of an individual schedulable
764764
object is the subscriber priority of the subscription that caused that object
765765
to 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
767767
implementation dependent what happens to objects that have already been
768768
received and possibly scheduled.
769769

@@ -1300,14 +1300,14 @@ the subscription starts with the first published or received group.
13001300

13011301
AbsoluteStart (0x3): Specifies an open-ended subscription beginning
13021302
from 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

13061306
AbsoluteRange (0x4): Specifies a closed subscription starting at StartObject
13071307
in StartGroup and ending at EndObject in EndGroup. The start and end of the
13081308
range 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

13121312
A 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

13931393
A 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

14051411
Unlike a new subscription, SUBSCRIBE_UPDATE can not cause an Object to be
14061412
delivered multiple times. Like SUBSCRIBE, EndGroup MUST specify the
@@ -1866,11 +1872,10 @@ Values of 0x0 and those larger than 0x2 are a protocol error.
18661872
the Largest Group ID and Object Id indicate the last Object in the track,
18671873
0 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.
23242329
Though some status information could be inferred from QUIC stream state,
23252330
that 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

23312336
An Object received in an `OBJECT_DATAGRAM` message has an `Object
23322337
Forwarding 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
23362341
will 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

23492354
There is no explicit length field. The entirety of the transport datagram
23502355
following 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
23552360
conveys 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
23852387
belong to the track requested in the Subscribe message identified by `Track Alias`
23862388
and 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

24012403
To send an Object with `Object Forwarding Preference` = `Subgroup`, find the open
24022404
stream 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
24042406
following fields.
24052407

24062408
The 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

24182420
A publisher MUST NOT send an Object on a stream if its Object ID is less than a
24192421
previously 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
24492451
all data on the stream and the FIN, it can ignore any RESET_STREAM it receives.
24502452

24512453
If 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

24562458
Since SUBSCRIBEs always end on a group boundary, an ending subscription can
24572459
always 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
24952497
track 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

25052507
Each 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-
25482529
Sending a subgroup on one stream:
25492530

25502531
~~~
25512532
Stream = 2
25522533

2553-
STREAM_HEADER_SUBGROUP {
2534+
SUBGROUP_HEADER {
25542535
Track Alias = 2
25552536
Group ID = 0
25562537
Subgroup ID = 0

0 commit comments

Comments
 (0)