Skip to content

Commit d97485d

Browse files
authored
Land Datagram Preferred (PR #342) (#344)
Update main to reflect the tx-mode branch after #342 was merged.
2 parents 124aec9 + be469ed commit d97485d

File tree

1 file changed

+75
-37
lines changed

1 file changed

+75
-37
lines changed

draft-ietf-moq-transport.md

Lines changed: 75 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -685,41 +685,43 @@ MOQT Message {
685685
~~~
686686
{: #moq-transport-message-format title="MOQT Message"}
687687

688-
|-------|----------------------------------------------------|
689-
| ID | Messages |
690-
|------:|:---------------------------------------------------|
691-
| 0x0 | OBJECT_STREAM ({{object-message-formats}}) |
692-
|-------|----------------------------------------------------|
693-
| 0x3 | SUBSCRIBE ({{message-subscribe-req}}) |
694-
|-------|----------------------------------------------------|
695-
| 0x4 | SUBSCRIBE_OK ({{message-subscribe-ok}}) |
696-
|-------|----------------------------------------------------|
697-
| 0x5 | SUBSCRIBE_ERROR ({{message-subscribe-error}}) |
698-
|-------|----------------------------------------------------|
699-
| 0x6 | ANNOUNCE ({{message-announce}}) |
700-
|-------|----------------------------------------------------|
701-
| 0x7 | ANNOUNCE_OK ({{message-announce-ok}}) |
702-
|-------|----------------------------------------------------|
703-
| 0x8 | ANNOUNCE_ERROR ({{message-announce-error}}) |
704-
|-------|----------------------------------------------------|
705-
| 0x9 | UNANNOUNCE ({{message-unannounce}}) |
706-
|-------|----------------------------------------------------|
707-
| 0xA | UNSUBSCRIBE ({{message-unsubscribe}}) |
708-
|-------|----------------------------------------------------|
709-
| 0xB | SUBSCRIBE_FIN ({{message-subscribe-fin}}) |
710-
|-------|----------------------------------------------------|
711-
| 0xC | SUBSCRIBE_RST ({{message-subscribe-rst}}) |
712-
|-------|----------------------------------------------------|
713-
| 0x10 | GOAWAY ({{message-goaway}}) |
714-
|-------|----------------------------------------------------|
715-
| 0x40 | CLIENT_SETUP ({{message-setup}}) |
716-
|-------|----------------------------------------------------|
717-
| 0x41 | SERVER_SETUP ({{message-setup}}) |
718-
|-------|----------------------------------------------------|
719-
| 0x50 | STREAM_HEADER_TRACK ({{multi-object-streams}}) |
720-
|-------|----------------------------------------------------|
721-
| 0x51 | STREAM_HEADER_GROUP ({{multi-object-streams}}) |
722-
|-------|----------------------------------------------------|
688+
|-------|-----------------------------------------------------|
689+
| ID | Messages |
690+
|------:|:----------------------------------------------------|
691+
| 0x0 | OBJECT_STREAM ({{object-message-formats}}) |
692+
|-------|-----------------------------------------------------|
693+
| 0x1 | OBJECT_PREFER_DATAGRAM ({{object-message-formats}}) |
694+
|-------|-----------------------------------------------------|
695+
| 0x3 | SUBSCRIBE ({{message-subscribe-req}}) |
696+
|-------|-----------------------------------------------------|
697+
| 0x4 | SUBSCRIBE_OK ({{message-subscribe-ok}}) |
698+
|-------|-----------------------------------------------------|
699+
| 0x5 | SUBSCRIBE_ERROR ({{message-subscribe-error}}) |
700+
|-------|-----------------------------------------------------|
701+
| 0x6 | ANNOUNCE ({{message-announce}}) |
702+
|-------|-----------------------------------------------------|
703+
| 0x7 | ANNOUNCE_OK ({{message-announce-ok}}) |
704+
|-------|-----------------------------------------------------|
705+
| 0x8 | ANNOUNCE_ERROR ({{message-announce-error}}) |
706+
|-------|-----------------------------------------------------|
707+
| 0x9 | UNANNOUNCE ({{message-unannounce}}) |
708+
|-------|-----------------------------------------------------|
709+
| 0xA | UNSUBSCRIBE ({{message-unsubscribe}}) |
710+
|-------|-----------------------------------------------------|
711+
| 0xB | SUBSCRIBE_FIN ({{message-subscribe-fin}}) |
712+
|-------|-----------------------------------------------------|
713+
| 0xC | SUBSCRIBE_RST ({{message-subscribe-rst}}) |
714+
|-------|-----------------------------------------------------|
715+
| 0x10 | GOAWAY ({{message-goaway}}) |
716+
|-------|-----------------------------------------------------|
717+
| 0x40 | CLIENT_SETUP ({{message-setup}}) |
718+
|-------|-----------------------------------------------------|
719+
| 0x41 | SERVER_SETUP ({{message-setup}}) |
720+
|-------|-----------------------------------------------------|
721+
| 0x50 | STREAM_HEADER_TRACK ({{multi-object-streams}}) |
722+
|-------|-----------------------------------------------------|
723+
| 0x51 | STREAM_HEADER_GROUP ({{multi-object-streams}}) |
724+
|-------|-----------------------------------------------------|
723725

724726
## Parameters {#params}
725727

@@ -889,14 +891,16 @@ group.
889891
{{send-order}} or priority {{ordering-by-priorities}} value.
890892

891893
* Object Forwarding Preference: An enumeration indicating how a sender sends an
892-
object. The preferences are Track, Group, and Object. An Object MUST be sent
893-
according to its `Object Forwarding Preference`, described below.
894+
object. The preferences are Track, Group, Object and Datagram. An Object MUST
895+
be sent according to its `Object Forwarding Preference`, described below.
894896

895897
* Object Payload: An opaque payload intended for the consumer and SHOULD
896898
NOT be processed by a relay.
897899

898900
### Object Message Formats
899901

902+
**Object Stream Message**
903+
900904
An `OBJECT_STREAM` message carries a single object on a stream. There is no
901905
explicit length of the payload; it is determined by the end of the stream. An
902906
`OBJECT_STREAM` message MUST be the first and only message on a unidirectional
@@ -931,6 +935,36 @@ the receiver MUST close the session with a Protocol Violation.
931935

932936
* Other fields: As described in {{canonical-object-fields}}.
933937

938+
**Object Prefer Datagram Message**
939+
940+
An `OBJECT_PREFER_DATAGRAM` message carries a single object in a datagram or
941+
a stream. There is no explicit length of the payload; it is determined by the
942+
length of the datagram or stream. If this message appears on a stream, it MUST
943+
be the only message on a unidirectional stream.
944+
945+
An Object received in an `OBJECT_PREFER_DATAGRAM` message has an `Object
946+
Forwarding Preference` = `Datagram`.
947+
948+
To send an Object with `Object Forwarding Preference` = `Datagram`, determine
949+
the length of the fields and payload, and compare the length with the maximum
950+
datagram size of the session. If the object size is less than or equal maximum
951+
datagram size, send the serialized data as a datagram. Otherwise, open a
952+
stream, send the serialized data and terminate the stream. An implementation
953+
SHOULD NOT send an Object with `Object Forwarding Preference` = `Datagram` on a
954+
stream if it is possible to send it as a datagram.
955+
956+
~~~
957+
OBJECT_PREFER_DATAGRAM Message {
958+
Subscription ID (i),
959+
Track Alias (i),
960+
Group ID (i),
961+
Object ID (i),
962+
Object Send Order (i),
963+
Object Payload (...),
964+
}
965+
~~~
966+
{: #object-datagram-format title="MOQT OBJECT_PREFER_DATAGRAM Message"}
967+
934968
### Multi-Object Streams
935969

936970
When multiple objects are sent on a stream, the stream begins with a stream
@@ -944,6 +978,8 @@ same stream header message type and fields.
944978

945979
TODO: figure out how a relay closes these streams
946980

981+
**Stream Header Track**
982+
947983
When a stream begins with `STREAM_HEADER_TRACK`, all objects on the stream
948984
belong to the track requested in the Subscribe message identified by `Subscribe
949985
ID`. All objects on the stream have the `Object Send Order` specified in the
@@ -976,6 +1012,8 @@ stream that is associated with the subscription, or open a new one and send the
9761012
~~~
9771013
{: #object-track-format title="MOQT Track Stream Object Fields"}
9781014

1015+
**Stream Header Group**
1016+
9791017
A sender MUST NOT send an Object on a stream if its Group ID is less than a
9801018
previously sent Group ID on that stream, or if its Object ID is less than or
9811019
equal to a previously sent Object ID within a given group on that stream.

0 commit comments

Comments
 (0)