@@ -84,7 +84,7 @@ supports wide range of use-cases with different resiliency and latency
84
84
(live, interactive) needs without compromising the scalability and cost
85
85
effectiveness associated with content delivery networks.
86
86
87
- MOQT is a generic protocol is designed to work in concert with multiple
87
+ MOQT is a generic protocol designed to work in concert with multiple
88
88
MoQ Streaming Formats. These MoQ Streaming Formats define how content is
89
89
encoded, packaged, and mapped to MOQT objects, along with policies for
90
90
discovery and subscription.
@@ -105,51 +105,44 @@ discovery and subscription.
105
105
# # Motivation
106
106
107
107
The development of MOQT is driven by goals in a number of areas -
108
- specifically latency, the robustness of QUIC, workflow efficiency and
109
- relay support.
108
+ specifically latency, the robust feature set of QUIC and relay
109
+ support.
110
110
111
111
# ## Latency
112
112
113
- HTTP Adaptive Streaming (HAS) has been successful at achieving scale
114
- although often at the cost of latency. Latency is necessary to correct
115
- for variable network throughput. Ideally live content is consumed at the
116
- same bitrate it is produced. End-to-end latency would be fixed and only
117
- subject to encoding and transmission delays. Unfortunately, networks
118
- have variable throughput, primarily due to congestion. Attempting to
119
- deliver content encoded at a higher bitrate than the network can support
120
- causes queuing along the path from producer to consumer. The speed at
121
- which a protocol can detect and respond to queuing determines the
122
- overall latency. TCP-based protocols are simple but are slow to detect
123
- congestion and suffer from head-of-line blocking. Protocols utilizing
124
- UDP directly can avoid queuing, but the application is then responsible
125
- for the complexity of fragmentation, congestion control, retransmissions,
126
- receiver feedback, reassembly, and more. One goal of MOQT is to achieve
127
- the best of both these worlds : leverage the features of QUIC to create a
128
- simple yet flexible low latency protocol that can rapidly detect and
129
- respond to congestion.
113
+ Latency is necessary to correct for variable network throughput. Ideally live
114
+ content is consumed at the same bitrate it is produced. End-to-end latency would
115
+ be fixed and only subject to encoding and transmission delays. Unfortunately,
116
+ networks have variable throughput, primarily due to congestion. Attempting to
117
+ deliver content encoded at a higher bitrate than the network can support causes
118
+ queuing along the path from producer to consumer. The speed at which a protocol
119
+ can detect and respond to congestion determines the overall latency. TCP-based
120
+ protocols are simple but are slow to detect congestion and suffer from
121
+ head-of-line blocking. Protocols utilizing UDP directly can avoid queuing, but
122
+ the application is then responsible for the complexity of fragmentation,
123
+ congestion control, retransmissions, receiver feedback, reassembly, and
124
+ more. One goal of MOQT is to achieve the best of both these worlds : leverage the
125
+ features of QUIC to create a simple yet flexible low latency protocol that can
126
+ rapidly detect and respond to congestion.
130
127
131
128
# ## Leveraging QUIC
132
129
133
130
The parallel nature of QUIC streams can provide improvements in the face
134
131
of loss. A goal of MOQT is to design a streaming protocol to leverage
135
132
the transmission benefits afforded by parallel QUIC streams as well
136
- exercising options for flexible loss recovery. Applying {{QUIC}} to HAS
137
- via HTTP/3 has not yet yielded generalized improvements in
138
- throughput. One reason for this is that sending segments down a single
139
- QUIC stream still allows head-of-line blocking to occur.
140
-
141
- # ## Universal
142
-
143
- Internet delivered media today has protocols optimized for ingest and
144
- separate protocols optimized for distribution. This protocol switch in
145
- the distribution chain necessitates intermediary origins which
146
- re-package the media content. While specialization can have its
147
- benefits, there are gains in efficiency to be had in not having to
148
- re-package content. A goal of MOQT is to develop a single protocol which
149
- can be used for transmission from contribution to distribution. A
150
- related goal is the ability to support existing encoding and packaging
151
- schemas, both for backwards compatibility and for interoperability with
152
- the established content preparation ecosystem.
133
+ exercising options for flexible loss recovery.
134
+
135
+ # ## Convergence
136
+
137
+ Some live media architectures today have separate protocols for ingest and
138
+ distribution, for example RTMP and HTTP based HLS or DASH. Switching protocols
139
+ necessitates intermediary origins which re-package the
140
+ media content. While specialization can have its benefits, there are efficiency
141
+ gains to be had in not having to re-package content. A goal of MOQT is to
142
+ develop a single protocol which can be used for transmission from contribution
143
+ to distribution. A related goal is the ability to support existing encoding and
144
+ packaging schemas, both for backwards compatibility and for interoperability
145
+ with the established content preparation ecosystem.
153
146
154
147
# ## Relays
155
148
@@ -180,6 +173,10 @@ Endpoint:
180
173
181
174
: A Client or Server.
182
175
176
+ Peer :
177
+
178
+ : The other endpoint than the one being described
179
+
183
180
Publisher :
184
181
185
182
: An endpoint that handles subscriptions by sending requested Objects from the requested track.
@@ -319,10 +316,11 @@ time.
319
316
Objects are comprised of two parts : metadata and a payload. The metadata is
320
317
never encrypted and is always visible to relays (see {{relays-moq}}). The
321
318
payload portion may be encrypted, in which case it is only visible to the
322
- Original Publisher and End Subscribers. The application is solely responsible
323
- for the content of the object payload. This includes the underlying encoding,
324
- compression, any end-to-end encryption, or authentication. A relay MUST NOT
325
- combine, split, or otherwise modify object payloads.
319
+ Original Publisher and End Subscribers. The Original Publisher is solely
320
+ responsible for the content of the object payload. This includes the
321
+ underlying encoding, compression, any end-to-end encryption, or
322
+ authentication. A relay MUST NOT combine, split, or otherwise modify object
323
+ payloads.
326
324
327
325
Objects within a group are ordered numerically by their Object ID.
328
326
@@ -470,7 +468,7 @@ using definitions from {{!RFC3986}}:
470
468
moqt-URI = "moqt" "://" authority path-abempty [ "?" query ]
471
469
~~~~~~~~~~~~~~~
472
470
473
- The `authority` portion MUST NOT contain a non- empty `host` portion.
471
+ The `authority` portion MUST NOT contain an empty `host` portion.
474
472
The `moqt` URI scheme supports the `/.well-known/` path prefix defined in
475
473
{{!RFC8615}}.
476
474
@@ -514,13 +512,13 @@ separate Setup parameters for that information in each version.
514
512
# # Session initialization {#session-init}
515
513
516
514
The first stream opened is a client-initiated bidirectional control stream where
517
- the peers exchange Setup messages ({{message-setup}}). All messages defined in
518
- this draft except OBJECT and OBJECT_WITH_LENGTH are sent on the control stream
519
- after the Setup message. Control messages MUST NOT be sent on any other stream,
520
- and a peer receiving a control message on a different stream closes the session
521
- as a 'Protocol Violation'. Objects MUST NOT be sent on the control stream, and a
522
- peer receiving an Object on the control stream closes the session as a 'Protocol
523
- Violation'.
515
+ the endpoints exchange Setup messages ({{message-setup}}). All messages defined
516
+ in this draft except OBJECT and OBJECT_WITH_LENGTH are sent on the control
517
+ stream after the Setup message. Control messages MUST NOT be sent on any other
518
+ stream, and a peer receiving a control message on a different stream closes the
519
+ session as a 'Protocol Violation'. Objects MUST NOT be sent on the control
520
+ stream, and a peer receiving an Object on the control stream closes the session
521
+ as a 'Protocol Violation'.
524
522
525
523
This draft only specifies a single use of bidirectional streams. Objects are
526
524
sent on unidirectional streams. Because there are no other uses of
@@ -921,10 +919,10 @@ prioritize sending Objects based on {{priorities}}.
921
919
A publisher SHOULD begin sending incomplete objects when available to
922
920
avoid incurring additional latency.
923
921
924
- A relay that reads from a stream and writes to stream in order will
922
+ A relay that reads from one stream and writes to another in order can
925
923
introduce head-of-line blocking. Packet loss will cause stream data to
926
- be buffered in the library, awaiting in order delivery, which will
927
- increase latency over additional hops. To mitigate this, a relay SHOULD
924
+ be buffered in the library, awaiting in- order delivery, which could
925
+ increase latency over additional hops. To mitigate this, a relay MAY
928
926
read and write stream data out of order subject to flow control
929
927
limits. See section 2.2 in {{QUIC}}.
930
928
@@ -1104,11 +1102,11 @@ a relay that handles a subscription that includes those Objects re-requests them
1104
1102
# # CLIENT_SETUP and SERVER_SETUP {#message-setup}
1105
1103
1106
1104
The `CLIENT_SETUP` and `SERVER_SETUP` messages are the first messages exchanged
1107
- by the client and the server; they allows the peers to establish the mutually
1105
+ by the client and the server; they allow the endpoints to establish the mutually
1108
1106
supported version and agree on the initial configuration before any objects are
1109
1107
exchanged. It is a sequence of key-value pairs called Setup parameters; the
1110
1108
semantics and format of which can vary based on whether the client or server is
1111
- sending. To ensure future extensibility of MOQT, the peers MUST ignore unknown
1109
+ sending. To ensure future extensibility of MOQT, endpoints MUST ignore unknown
1112
1110
setup parameters. TODO : describe GREASE for those.
1113
1111
1114
1112
The wire format of the Setup messages are as follows :
0 commit comments