You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Reference moq-transport padding in probe extension (#18)
* Reference moq-transport padding instead of defining it
moq-wg/moq-transport#1475 added padding streams and datagrams
to draft-18. Remove the duplicate padding definitions and IANA
datagram registration, referencing Section 7.7 instead.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* Replace 0xPROBE_TODO with TBD1/TBD2 placeholders
Use RFC-style TBD tokens: TBD1 for the setup option key,
TBD2 for the stream type. Consistent across wire format
and IANA registry entries.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: draft-lcurley-moq-probe.md
+11-45Lines changed: 11 additions & 45 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -24,8 +24,8 @@ informative:
24
24
--- abstract
25
25
26
26
This document defines a PROBE extension for MoQ Transport {{moqt}}.
27
-
A subscriber opens a bidirectional PROBE stream to request that the publisher pad the connection up to a target.
28
-
The publisher periodically responds with the measured bitrate and an elapsed timestamp, enabling the subscriber to estimate the available bandwidth.
27
+
A subscriber opens a bidirectional PROBE stream to request that the publisher pad the connection up to a target bitrate.
28
+
The publisher sends padding as defined in {{moqt}} Section 7.7 and periodically responds with the measured bitrate and an elapsed timestamp, enabling the subscriber to estimate the available bandwidth.
29
29
30
30
--- middle
31
31
@@ -47,11 +47,10 @@ A viewer may get stuck at a low quality rendition indefinitely because the conge
47
47
If the viewer does attempt to switch to a higher rendition without first probing, they risk buffering — either because the congestion window has not been warmed up to support the higher bitrate, or because the network genuinely cannot sustain it.
48
48
Without probing, the subscriber cannot distinguish between these two cases.
49
49
50
-
{{moqt}} Section 3.7.2 suggests subscribing to additional tracks at low priority to fill the congestion window during probing intervals.
50
+
{{moqt}} Section 3.7.2 suggests subscribing to additional tracks at low priority or sending padding to fill the congestion window during probing intervals.
51
51
However, this is difficult in practice because the subscriber does not know when probing is needed or by how much.
52
52
The congestion window and bandwidth estimate are internal to the sender's congestion controller and are not exposed to the application, let alone the remote peer.
53
53
The subscriber cannot distinguish between "the network has more capacity" and "the congestion controller is already fully utilizing the link".
54
-
It also requires the publisher to have pre-encoded padding tracks and the subscriber to manage extra subscriptions.
55
54
56
55
## Hop-by-Hop
57
56
MoQ is designed to work end-to-end via relays.
@@ -62,8 +61,8 @@ Using a wire-level extension ensures that PROBE measurements are scoped to a sin
62
61
A relay terminates the PROBE stream and does not forward it upstream, avoiding incorrect measurements that reflect intermediate link capacity.
63
62
64
63
## This Extension
65
-
This extension provides a simple mechanism for bandwidth estimation.
66
-
The subscriber opens a PROBE stream and requests that the publisher pad the connection to a target.
64
+
{{moqt}} defines padding streams and datagrams (Section 7.7) for probing, but does not define a signaling mechanism for a subscriber to request padding or for a publisher to report measurements.
65
+
This extension fills that gap: the subscriber opens a PROBE stream to request that the publisher pad the connection to a target bitrate using {{moqt}} padding.
67
66
The publisher responds with periodic measurements, allowing the subscriber to adjust its subscriptions accordingly.
68
67
69
68
@@ -74,7 +73,7 @@ Both endpoints indicate support by including the following Setup Option:
74
73
75
74
~~~
76
75
PROBE Setup Option {
77
-
Option Key (vi64) = 0xPROBE_TODO
76
+
Option Key (vi64) = TBD1
78
77
Option Value Length (vi64) = 0
79
78
}
80
79
~~~
@@ -87,7 +86,7 @@ If a peer receives a PROBE stream without having negotiated the extension, it MU
87
86
The PROBE extension uses a new bidirectional stream type.
88
87
89
88
~~~
90
-
STREAM_TYPE = 0xPROBE_TODO
89
+
STREAM_TYPE = TBD2
91
90
~~~
92
91
93
92
The stream type is sent at the beginning of the stream, encoded as a variable-length integer, consistent with {{moqt}} stream type framing.
@@ -109,7 +108,7 @@ PROBE_REQUEST {
109
108
110
109
**Target Bitrate**:
111
110
The desired bitrate in kilobits per second.
112
-
The publisher SHOULD pad the connection to attempt to reach this rate.
111
+
The publisher SHOULD send padding as defined in {{moqt}} Section 7.7 to attempt to reach this rate.
113
112
A value of 0 indicates no padding is needed; the publisher SHOULD only send media data but MUST continue sending PROBE_RESPONSE messages.
114
113
This is useful for passively monitoring the current bitrate without actively probing for more bandwidth.
115
114
Either endpoint MAY close or reset the stream to stop receiving updates entirely.
@@ -146,32 +145,7 @@ The interval is implementation-defined but a value between 100ms and 1000ms is R
146
145
147
146
148
147
# Padding
149
-
Padding is optional and depends on the capabilities of the QUIC implementation.
150
-
A publisher that does not support padding MUST still send PROBE_RESPONSE messages based on the actual sending rate.
151
-
152
-
## QUIC-Level Padding
153
-
The preferred method is for the QUIC implementation to send PING+PADDING frames.
154
-
PADDING frames alone MUST NOT be used, as they are not ack-eliciting and can cause starvation of the congestion controller.
155
-
PING+PADDING is transparent to the application and does not consume application-level flow control.
156
-
157
-
## Datagram Padding
158
-
If the QUIC implementation does not expose a padding API, the publisher MAY send QUIC datagrams as a fallback.
159
-
Datagrams are unreliable and do not consume stream-level flow control, making them suitable for padding.
160
-
161
-
A PROBE datagram is identified by a well-known datagram type:
162
-
163
-
~~~
164
-
PROBE Datagram {
165
-
Datagram Type (vi64) = 0xPROBE_TODO
166
-
Padding (..)
167
-
}
168
-
~~~
169
-
170
-
The contents of the Padding field are arbitrary and MUST be discarded by the receiver.
171
-
The receiver MUST NOT interpret the contents as application data.
172
-
173
-
## General Requirements
174
-
Padding SHOULD be sent at the lowest priority to avoid interfering with media delivery.
148
+
The publisher SHOULD send padding using the mechanisms defined in {{moqt}} Section 7.7 (padding streams and/or padding datagrams).
175
149
176
150
The publisher MUST NOT exceed the target with padding alone.
177
151
If media traffic already meets or exceeds the target, no additional padding is necessary.
@@ -201,23 +175,15 @@ This document registers the following entry in the "MoQ Setup Option Types" regi
201
175
202
176
| Value | Name | Reference |
203
177
|:------|:-----|:----------|
204
-
| 0xPROBE_TODO | PROBE | This Document |
178
+
| TBD1 | PROBE | This Document |
205
179
206
180
## MOQT Stream Type
207
181
208
182
This document registers the following entry in the "MoQ Stream Types" registry:
209
183
210
184
| Value | Name | Reference |
211
185
|:------|:-----|:----------|
212
-
| 0xPROBE_TODO | PROBE | This Document |
213
-
214
-
## MOQT Datagram Type
215
-
216
-
This document registers the following entry in the "MoQ Datagram Types" registry:
0 commit comments