Skip to content

Commit aa33520

Browse files
afrindianswettwilaw
authored
Save a byte per object when there are no extensions (#821)
Fixes: #666 --------- Co-authored-by: ianswett <[email protected]> Co-authored-by: Will Law <[email protected]>
1 parent b560b4d commit aa33520

File tree

1 file changed

+44
-23
lines changed

1 file changed

+44
-23
lines changed

draft-ietf-moq-transport.md

Lines changed: 44 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2549,24 +2549,24 @@ A publisher sends Objects matching a subscription on Data Streams or Datagrams.
25492549
All unidirectional MOQT streams start with a variable-length integer indicating
25502550
the type of the stream in question.
25512551

2552-
|-------|-------------------------------------------------------|
2553-
| ID | Type |
2554-
|------:|:------------------------------------------------------|
2555-
| 0x4 | SUBGROUP_HEADER ({{subgroup-header}}) |
2556-
|-------|-------------------------------------------------------|
2557-
| 0x5 | FETCH_HEADER ({{fetch-header}}) |
2558-
|-------|-------------------------------------------------------|
2552+
|-------------|-------------------------------------------------|
2553+
| ID | Type |
2554+
|------------:|:------------------------------------------------|
2555+
| 0x08-0x09 | SUBGROUP_HEADER ({{subgroup-header}}) |
2556+
|-------------|-------------------------------------------------|
2557+
| 0x05 | FETCH_HEADER ({{fetch-header}}) |
2558+
|-------------|-------------------------------------------------|
25592559

25602560
All MOQT datagrams start with a variable-length integer indicating the type of
25612561
the datagram.
25622562

2563-
|-------|-------------------------------------------------------|
2564-
| ID | Type |
2565-
|------:|:------------------------------------------------------|
2566-
| 0x1 | OBJECT_DATAGRAM ({{object-datagram}}) |
2567-
|-------|-------------------------------------------------------|
2568-
| 0x2 | OBJECT_DATAGRAM_STATUS ({{object-datagram}}) |
2569-
|-------|-------------------------------------------------------|
2563+
|-----------|---------------------------------------------------|
2564+
| ID | Type |
2565+
|----------:|:--------------------------------------------------|
2566+
| 0x00-0x01 | OBJECT_DATAGRAM ({{object-datagram}}) |
2567+
|-----------|---------------------------------------------------|
2568+
| 0x02-0x03 | OBJECT_DATAGRAM_STATUS ({{object-datagram}}) |
2569+
|-----------|---------------------------------------------------|
25702570

25712571
An endpoint that receives an unknown stream or datagram type MUST close the
25722572
session.
@@ -2698,17 +2698,24 @@ will be dropped.
26982698

26992699
~~~
27002700
OBJECT_DATAGRAM {
2701+
Type (i),
27012702
Track Alias (i),
27022703
Group ID (i),
27032704
Object ID (i),
27042705
Publisher Priority (8),
2705-
Extension Headers Length (i),
2706-
[Extension headers (...)],
2706+
[Extension Headers Length (i),
2707+
Extension headers (...)],
27072708
Object Payload (..),
27082709
}
27092710
~~~
27102711
{: #object-datagram-format title="MOQT OBJECT_DATAGRAM"}
27112712

2713+
The Type field takes the form 0b0000000X (or the set of values from 0x00 to
2714+
0x01). The LSB of the type determines if the Extensions Headers Length and
2715+
Extension headers are present. If an endpoint receives a datagram with Type
2716+
0x01 and Extension Headers Length is 0, it MUST close the session with Protocol
2717+
Violation.
2718+
27122719
There is no explicit length field. The entirety of the transport datagram
27132720
following Publisher Priority contains the Object Payload.
27142721

@@ -2719,17 +2726,24 @@ conveys an Object Status and has no payload.
27192726

27202727
~~~
27212728
OBJECT_DATAGRAM_STATUS {
2729+
Type (i),
27222730
Track Alias (i),
27232731
Group ID (i),
27242732
Object ID (i),
27252733
Publisher Priority (8),
2726-
Extension Headers Length (i),
2727-
[Extension headers (...)],
2734+
[Extension Headers Length (i),
2735+
Extension headers (...)],
27282736
Object Status (i),
27292737
}
27302738
~~~
27312739
{: #object-datagram-status-format title="MOQT OBJECT_DATAGRAM_STATUS"}
27322740

2741+
The Type field takes the form 0b0000001X (or the set of values from 0x02 to
2742+
0x03). The LSB of the type determines if the Extensions Headers Length and
2743+
Extension headers are present. If an endpoint receives a datagram with Type
2744+
0x03 and Extension Headers Length is 0, it MUST close the session with Protocol
2745+
Violation.
2746+
27332747
## Streams
27342748

27352749
When objects are sent on streams, the stream begins with a Subgroup Header
@@ -2755,6 +2769,7 @@ and the subgroup indicated by 'Group ID' and `Subgroup ID`.
27552769

27562770
~~~
27572771
SUBGROUP_HEADER {
2772+
Type (i),
27582773
Track Alias (i),
27592774
Group ID (i),
27602775
Subgroup ID (i),
@@ -2766,6 +2781,12 @@ SUBGROUP_HEADER {
27662781
All Objects received on a stream opened with `SUBGROUP_HEADER` have an
27672782
`Object Forwarding Preference` = `Subgroup`.
27682783

2784+
The Type field takes the form 0b0000100X (or the set of values from 0x08 to
2785+
0x09). The LSB determines if the Extensions Headers Length is present in Objects
2786+
in this subgroup. When it is 0, Extensions Headers Length is not present and all
2787+
Objects have no extensions. When it is 1, Extension Headers Length is present in
2788+
all Objects in this subgroup.
2789+
27692790
To send an Object with `Object Forwarding Preference` = `Subgroup`, find the open
27702791
stream that is associated with the subscription, `Group ID` and `Subgroup ID`,
27712792
or open a new one and send the `SUBGROUP_HEADER`. Then serialize the
@@ -2776,8 +2797,8 @@ The Object Status field is only sent if the Object Payload Length is zero.
27762797
~~~
27772798
{
27782799
Object ID (i),
2779-
Extension Headers Length (i),
2780-
[Extension headers (...)],
2800+
[Extension Headers Length (i),
2801+
Extension headers (...)],
27812802
Object Payload Length (i),
27822803
[Object Status (i)],
27832804
Object Payload (..),
@@ -2937,20 +2958,19 @@ Sending a subgroup on one stream:
29372958
Stream = 2
29382959

29392960
SUBGROUP_HEADER {
2961+
Type = 0
29402962
Track Alias = 2
29412963
Group ID = 0
29422964
Subgroup ID = 0
29432965
Publisher Priority = 0
29442966
}
29452967
{
29462968
Object ID = 0
2947-
Extension Headers Length = 0
29482969
Object Payload Length = 4
29492970
Payload = "abcd"
29502971
}
29512972
{
29522973
Object ID = 1
2953-
Extension Headers Length = 0
29542974
Object Payload Length = 4
29552975
Payload = "efgh"
29562976
}
@@ -2962,7 +2982,8 @@ Extension Headers.
29622982
~~~
29632983
Stream = 2
29642984

2965-
STREAM_HEADER_GROUP {
2985+
SUBGROUP_HEADER {
2986+
Type = 1
29662987
Subscribe ID = 2
29672988
Track Alias = 2
29682989
Group ID = 0

0 commit comments

Comments
 (0)