Endpoints use the exchange of Setup messages to negotiate MOQT extensions. Extensions can define new Message types, new Parameters, new Properties, or new framing for Streams and Datagrams.
The client and server MUST include all Setup Options Section 10.3.1 required for the negotiated MOQT version in SETUP.
Each endpoint declares the extensions it supports and provides any initial values required by those extensions as Setup Options in SETUP. Once an endpoint has both sent and received SETUP messages, it determines the set of negotiated extensions.
New versions of MOQT MUST specify which existing extensions can be used with that version. New extensions MUST specify the existing versions with which they can be used.
3.2.1. Reserved Namespaces
MOQT reserves all Track Namespace values whose first tuple field begins with
a period (0x2e, .). These namespaces MUST NOT be used unless their meaning
is defined through IANA registration. Unless otherwise specified, an
endpoint that receives a request for an unrecognized reserved namespace MUST
pass it to the Application, so that future extensions can define new reserved
namespaces without breaking older implementations.
A Track Namespace whose first field is exactly . (a single period, 0x2e)
is reserved and MUST NOT be used for any purpose; endpoints MUST NOT publish
tracks or namespaces under it and MUST reject requests referencing it with
DOES_NOT_EXIST.
3.2.2. Session-Level Tracks and Namespaces
MOQT defines the .session namespace (the bytes 0x2e, 0x73, 0x65, 0x73,
0x73, 0x69, 0x6f, 0x6e) in the first position of the Track Namespace for
session-level tracks and namespaces. Session-level tracks and namespaces are
managed by the MOQT implementation, not the Application. They provide a
mechanism for extending MOQT transport functionality using existing
subscription and object delivery machinery, without defining new control
messages or stream types.
The Application MUST NOT publish tracks or namespaces whose first
field is .session. Relays MUST NOT forward requests for session-level
tracks and namespaces to other sessions.
The empty track name in the .session namespace is defined to not exist.
A request with a Track Namespace whose first field is .session and an
empty Track Name MUST be rejected with DOES_NOT_EXIST.
An endpoint that receives a request for an unrecognized session-level track or namespace MUST reject it with REQUEST_ERROR using error code DOES_NOT_EXIST rather than passing it to the Application.
The track names and namespaces available under the .session namespace are
defined by extensions to this specification and registered with IANA (see
Section 15.9).