§3.2.

Extension Negotiation

Endpoints use the exchange of Setup messages to negotiate MOQT extensions. Extensions can define new Message types, new Parameters, new Properties, new Parameter values, 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.10).

This is one section of the MoQT specification, rendered per-section for quick reference and citation. The authoritative text is draft-ietf-moq-transport-19 at the IETF.