Skip to content

Commit cf636eb

Browse files
authored
Defining a connection URL
1 parent de1ff72 commit cf636eb

File tree

1 file changed

+112
-0
lines changed

1 file changed

+112
-0
lines changed

draft-ietf-moq-warp.md

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ normative:
5454
MIME: RFC6838
5555
RFC9000: RFC9000
5656
RFC4180: RFC4180
57+
RFC3986: RFC3986
5758
GZIP: RFC1952
5859
WEBCODECS-CODEC-REGISTRY:
5960
title: "WebCodecs Codec Registry"
@@ -1171,6 +1172,117 @@ This example shows drone GPS coordinates synched with the start of each Group.
11711172

11721173
# Workflow
11731174

1175+
## URL construction & interpretation
1176+
A WARP URL is a String with the following components
1177+
1178+
moqt:// + authority + path + query
1179+
1180+
* THe URL MUST conform with {{RFC3986}}.
1181+
* The protocol is moqt and is required.
1182+
* The authority is required and holds the host and optional port. The default port
1183+
will be 443. The authority holds the information needed for the client to connect
1184+
to the distribution service, using either WebTransport or Raw QUIC.
1185+
* The path is optional. If present, it contains information that might be used by
1186+
the server in initializing and configuring the connection.
1187+
* The query is optional. If present, it holds key-value data. Certain keys are reserved
1188+
by this specificaiton to hold special data. Multiple key/value pairs MAY be included,
1189+
separated by an ampersand. Query options MUST be stripped from the path when the path
1190+
is sent to the server at conneciton establishment. Query arguments are intended only
1191+
for the player and MUST NOT be transmitted to the server.
1192+
1193+
An example URL is shown below:
1194+
1195+
moqt://example.com/relay-app/relayID?c=customerID/broadcastID/catalog&c4m=12345
1196+
1197+
1198+
### Reserved query arguments
1199+
1200+
Table 5 defines reserved key names for the query portion of the URL. Keynames are
1201+
case-sensitive.
1202+
1203+
| Name | Description |
1204+
|:================|:=================================================|
1205+
| ns | The Namespace of the track |
1206+
| t | The Name of a non-catalog track |
1207+
| wallclock-range | A subclip defined by a wallclock time range |
1208+
| mediatime-range | A subclip defined by a media time range |
1209+
| location-range | A subclip defined by a MOQT Location range |
1210+
| c4m | A base64 encoded C4M token |
1211+
1212+
* ns - the Namespace of the track. The '/' character in the String defines
1213+
tuple field boundaries and is not included in the tuple fields. The '/' character
1214+
MUST NOT be used other than to define tuple boundaries. A closing '/' for the
1215+
last tuple field MUST NOT be included. This key MUST be included if 't' is present.
1216+
* t - the track name of a non-catalog track. This field MUST NOT be included if the
1217+
URL is referencing a catalog track.
1218+
* wallclock-range - a range defined by start and end wallclock times, each expressed
1219+
as milliseconds since Unix Epoch and separated by a "-" dash.
1220+
* mediatime-range - a range defined by start and end media times, each expressed
1221+
as milliseconds and separated by a "-" dash.
1222+
* location-range - a range defined by start and end media MOQT Location tuples and
1223+
expressed as Start Group ID, Start Object ID, End Group ID, End Object ID, each
1224+
separated by a "-" dash.
1225+
1226+
Only one of wallclock-range, mediatime-range or location-range MAY be included in each
1227+
URL. Inclusion of a range query-arg is an instruction to the player to only play the track
1228+
content over the range specified.
1229+
If 't' is omitted, then the URL is assumed to point at a catalog, in which case the track
1230+
name is automatically 'catalog'.
1231+
If 'ns' and 't' are omitted, then the player is assumed to have out-of-band information
1232+
for accessing tracks and the URL purely defines the connection to the delivery network.
1233+
1234+
Example query args
1235+
* wallclock-range=1761759637565-1761759836189
1236+
* mediatime-range=0-13421
1237+
* location-range=34-0-2145-16
1238+
1239+
Example URLs
1240+
* URL pointing at a catalog
1241+
moqt://example.com/relay-app/relayID?ns=customerID/broadcastID
1242+
1243+
* URL pointing at a non-catalog track
1244+
moqt://example.com/relay-app/relayID?ns=customerID/broadcastID&t=video
1245+
1246+
* URL pointing at a subclip of a catalog
1247+
moqt://example.com/relay-app/relayID?ns=customerID/broadcastID&location-range=34-0-64-16
1248+
1249+
* URL pointing at a catalog and supplying a token
1250+
moqt://example.com/relay-app/relayID?ns=customerID/broadcastID&c4m=gqhkYWxnIGVzaGFyqGR0eXB
1251+
lY2NhdZ9hdWQAY3VybGZlbWlzcwZleWV2aW5uZWlhdGVwQWNyZW5lYnJmcmVqMTIzNDU2NzgwMHZpc3VlZF9hdD0xN
1252+
zMwNDM4NDAw
1253+
1254+
### Connection using WebTransport
1255+
Assuming a WARP URL of
1256+
1257+
moqt://example.com/relay-app/relayID?ns=customerID/broadcastID&c4m=gqhkYWxnIGVzaGFyqGR0eXB
1258+
lY2NhdZ9hdWQAY3VybGZlbWlzcwZleWV2aW5uZWlhdGVwQWNyZW5lYnJmcmVqMTIzNDU2NzgwMHZpc3VlZF9hdD0xN
1259+
zMwNDM4NDAw
1260+
1261+
1. The player generates the WebTransport URL by substituting https for moqt and stripping off
1262+
all query args. The token bytes are extracted and stored separately.
1263+
2. Player establishes a Webtransport connection to 'https://example.com/relay-app/relayID' and
1264+
once connected, it executes CLIENT_SETUP supplying the token bytes via an AUTHORIZATION TOKEN
1265+
parameter and registering a token alias.
1266+
3. Player subscribes to NAMESPACE customerID | broadcastID (where | represents the tuple
1267+
boundary) and to NAME catalog, along with the token alias.
1268+
1269+
### Connection using raw QUIC
1270+
Assuming a WARP URL of
1271+
1272+
moqt://example.com/relay-app/relayID?ns=customerID/broadcastID&c4m=gqhkYWxnIGVzaGFyqGR0eXB
1273+
lY2NhdZ9hdWQAY3VybGZlbWlzcwZleWV2aW5uZWlhdGVwQWNyZW5lYnJmcmVqMTIzNDU2NzgwMHZpc3VlZF9hdD0xN
1274+
zMwNDM4NDAw
1275+
1276+
1. The player generates the AUTHORITY value of 'example.com' by stripping off the protocol,
1277+
path and query components from the WARp URL. The token bytes are extracted and stored separately.
1278+
2. The player generates the PATH value of 'relay-app/relayID' by removing the protocol, authority
1279+
and query arguments from the WARP URL.
1280+
Player establishes a QUIC connection to the host and port identified by the AUTHORITY value and
1281+
then executes CLIENT_SETUP supplying the AUTHORTY, PATH and AUTHORIZATION TOKEN as parameters,
1282+
registering an alias against the token.
1283+
3. Player subscribes to NAMESPACE customerID | broadcastID ( '|' defines the tuple boundary)
1284+
and to NAME catalog, along with the token alias.
1285+
11741286
## Initiating a broadcast
11751287
A WARP publisher MUST publish a catalog track object before publishing any media
11761288
track objects.

0 commit comments

Comments
 (0)