@@ -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
11751287A WARP publisher MUST publish a catalog track object before publishing any media
11761288track objects.
0 commit comments