<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.19 (Ruby 3.3.3) -->
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-moq-transport-07" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.2 -->
  <front>
    <title abbrev="moq-transport">Media over QUIC Transport</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-07"/>
    <author initials="L." surname="Curley" fullname="Luke Curley">
      <organization>Discord</organization>
      <address>
        <email>kixelated@gmail.com</email>
      </address>
    </author>
    <author initials="K." surname="Pugin" fullname="Kirill Pugin">
      <organization>Meta</organization>
      <address>
        <email>ikir@meta.com</email>
      </address>
    </author>
    <author initials="S." surname="Nandakumar" fullname="Suhas Nandakumar">
      <organization>Cisco</organization>
      <address>
        <email>snandaku@cisco.com</email>
      </address>
    </author>
    <author initials="V." surname="Vasiliev" fullname="Victor Vasiliev">
      <organization>Google</organization>
      <address>
        <email>vasilvv@google.com</email>
      </address>
    </author>
    <author initials="I." surname="Swett" fullname="Ian Swett" role="editor">
      <organization>Google</organization>
      <address>
        <email>ianswett@google.com</email>
      </address>
    </author>
    <date/>
    <area>Web and Internet Transport</area>
    <workgroup>Media Over QUIC</workgroup>
    <keyword>media over quic</keyword>
    <abstract>
      <?line 64?>

<t>This document defines the core behavior for Media over QUIC Transport
(MOQT), a media transport protocol designed to operate over QUIC and
WebTransport, which have similar functionality. MOQT allows a producer of
media to publish data and have it consumed via subscription by a
multiplicity of endpoints. It supports intermediate content distribution
networks and is designed for high scale and low latency distribution.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://moq-wg.github.io/moq-transport/draft-ietf-moq-transport.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-moq-transport/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Media Over QUIC Working Group mailing list (<eref target="mailto:moq@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/moq/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/moq/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/moq-wg/moq-transport"/>.</t>
    </note>
  </front>
  <middle>
    <?line 73?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Media Over QUIC Transport (MOQT) is a protocol that is optimized
for the QUIC protocol <xref target="QUIC"/>, either directly or via WebTransport
<xref target="WebTransport"/>, for the dissemination of media. MOQT utilizes a
publish/subscribe workflow in which producers of media publish data in
response to subscription requests from a multiplicity of endpoints. MOQT
supports wide range of use-cases with different resiliency and latency
(live, interactive) needs without compromising the scalability and cost
effectiveness associated with content delivery networks.</t>
      <t>MOQT is a generic protocol is designed to work in concert with multiple
MoQ Streaming Formats. These MoQ Streaming Formats define how content is
encoded, packaged, and mapped to MOQT objects, along with policies for
discovery and subscription.</t>
      <ul spacing="normal">
        <li>
          <t><xref target="model"/> describes the object model employed by MOQT.</t>
        </li>
        <li>
          <t><xref target="session"/> covers aspects of setting up a MOQT session.</t>
        </li>
        <li>
          <t><xref target="priorities"/> covers mechanisms for prioritizing subscriptions.</t>
        </li>
        <li>
          <t><xref target="relays-moq"/> covers behavior at the relay entities.</t>
        </li>
        <li>
          <t><xref target="message"/> covers how control messages are encoded on the wire.</t>
        </li>
        <li>
          <t><xref target="data-streams"/>} covers how data messages are encoded on the wire.</t>
        </li>
      </ul>
      <section anchor="motivation">
        <name>Motivation</name>
        <t>The development of MOQT is driven by goals in a number of areas -
specifically latency, the robustness of QUIC, workflow efficiency and
relay support.</t>
        <section anchor="latency">
          <name>Latency</name>
          <t>HTTP Adaptive Streaming (HAS) has been successful at achieving scale
although often at the cost of latency. Latency is necessary to correct
for variable network throughput. Ideally live content is consumed at the
same bitrate it is produced. End-to-end latency would be fixed and only
subject to encoding and transmission delays. Unfortunately, networks
have variable throughput, primarily due to congestion. Attempting to
deliver content encoded at a higher bitrate than the network can support
causes queuing along the path from producer to consumer. The speed at
which a protocol can detect and respond to queuing determines the
overall latency. TCP-based protocols are simple but are slow to detect
congestion and suffer from head-of-line blocking. Protocols utilizing
UDP directly can avoid queuing, but the application is then responsible
for the complexity of fragmentation, congestion control, retransmissions,
receiver feedback, reassembly, and more. One goal of MOQT is to achieve
the best of both these worlds: leverage the features of QUIC to create a
simple yet flexible low latency protocol that can rapidly detect and
respond to congestion.</t>
        </section>
        <section anchor="leveraging-quic">
          <name>Leveraging QUIC</name>
          <t>The parallel nature of QUIC streams can provide improvements in the face
of loss. A goal of MOQT is to design a streaming protocol to leverage
the transmission benefits afforded by parallel QUIC streams as well
exercising options for flexible loss recovery. Applying <xref target="QUIC"/> to HAS
via HTTP/3 has not yet yielded generalized improvements in
throughput. One reason for this is that sending segments down a single
QUIC stream still allows head-of-line blocking to occur.</t>
        </section>
        <section anchor="universal">
          <name>Universal</name>
          <t>Internet delivered media today has protocols optimized for ingest and
separate protocols optimized for distribution. This protocol switch in
the distribution chain necessitates intermediary origins which
re-package the media content. While specialization can have its
benefits, there are gains in efficiency to be had in not having to
re-package content. A goal of MOQT is to develop a single protocol which
can be used for transmission from contribution to distribution. A
related goal is the ability to support existing encoding and packaging
schemas, both for backwards compatibility and for interoperability with
the established content preparation ecosystem.</t>
        </section>
        <section anchor="relays">
          <name>Relays</name>
          <t>An integral feature of a protocol being successful is its ability to
deliver media at scale. Greatest scale is achieved when third-party
networks, independent of both the publisher and subscriber, can be
leveraged to relay the content. These relays must cache content for
distribution efficiency while simultaneously routing content and
deterministically responding to congestion in a multi-tenant network. A
goal of MOQT is to treat relays as first-class citizens of the protocol
and ensure that objects are structured such that information necessary
for distribution is available to relays while the media content itself
remains opaque and private.</t>
        </section>
      </section>
      <section anchor="terms-and-definitions">
        <name>Terms and Definitions</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

<dl>
          <dt>Client:</dt>
          <dd>
            <t>The party initiating a Transport Session.</t>
          </dd>
          <dt>Server:</dt>
          <dd>
            <t>The party accepting an incoming Transport Session.</t>
          </dd>
          <dt>Endpoint:</dt>
          <dd>
            <t>A Client or Server.</t>
          </dd>
          <dt>Publisher:</dt>
          <dd>
            <t>An endpoint that handles subscriptions by sending requested Objects from the requested track.</t>
          </dd>
          <dt>Subscriber:</dt>
          <dd>
            <t>An endpoint that subscribes to and receives tracks.</t>
          </dd>
          <dt>Original Publisher:</dt>
          <dd>
            <t>The initial publisher of a given track.</t>
          </dd>
          <dt>End Subscriber:</dt>
          <dd>
            <t>A subscriber that initiates a subscription and does not send the data on to other subscribers.</t>
          </dd>
          <dt>Relay:</dt>
          <dd>
            <t>An entity that is both a Publisher and a Subscriber, but not the Original
Publisher or End Subscriber.</t>
          </dd>
          <dt>Upstream:</dt>
          <dd>
            <t>In the direction of the Original Publisher</t>
          </dd>
          <dt>Downstream:</dt>
          <dd>
            <t>In the direction of the End Subscriber(s)</t>
          </dd>
          <dt>Transport Session:</dt>
          <dd>
            <t>A raw QUIC connection or a WebTransport session.</t>
          </dd>
          <dt>Congestion:</dt>
          <dd>
            <t>Packet loss and queuing caused by degraded or overloaded networks.</t>
          </dd>
          <dt>Group:</dt>
          <dd>
            <t>A temporal sequence of objects. A group represents a join point in a
track. See (<xref target="model-group"/>).</t>
          </dd>
          <dt>Object:</dt>
          <dd>
            <t>An object is an addressable unit whose payload is a sequence of
bytes. Objects form the base element in the MOQT data model. See
(<xref target="model-object"/>).</t>
          </dd>
          <dt>Track:</dt>
          <dd>
            <t>An encoded bitstream. Tracks contain a sequential series of one or
more groups and are the subscribable entity with MOQT.
See (<xref target="model-track"/>).</t>
          </dd>
        </dl>
      </section>
      <section anchor="notational-conventions">
        <name>Notational Conventions</name>
        <t>This document uses the conventions detailed in (<xref section="1.3" sectionFormat="comma" target="RFC9000"/>)
when describing the binary encoding.</t>
        <t>As a quick reference, the following list provides a non normative summary
of the parts of RFC9000 field syntax that are used in this specification.</t>
        <dl>
          <dt>x (L):</dt>
          <dd>
            <t>Indicates that x is L bits long</t>
          </dd>
          <dt>x (i):</dt>
          <dd>
            <t>Indicates that x holds an integer value using the variable-length
encoding as described in (<xref section="16" sectionFormat="comma" target="RFC9000"/>)</t>
          </dd>
          <dt>x (..):</dt>
          <dd>
            <t>Indicates that x can be any length including zero bits long.  Values
 in this format always end on a byte boundary.</t>
          </dd>
          <dt>[x (L)]:</dt>
          <dd>
            <t>Indicates that x is optional and has a length of L</t>
          </dd>
          <dt>x (L) ...:</dt>
          <dd>
            <t>Indicates that x is repeated zero or more times and that each instance
has a length of L</t>
          </dd>
        </dl>
        <t>This document extends the RFC9000 syntax and with the additional field types:</t>
        <dl>
          <dt>x (b):</dt>
          <dd>
            <t>Indicates that x consists of a variable length integer encoding as
described in (<xref section="16" sectionFormat="comma" target="RFC9000"/>), followed by that many bytes
of binary data</t>
          </dd>
          <dt>x (tuple):</dt>
          <dd>
            <t>Indicates that x is a tuple, consisting of a variable length integer encoded
as described in (<xref section="16" sectionFormat="comma" target="RFC9000"/>), followed by that many variable
length tuple fields, each of which are encoded as (b) above.</t>
          </dd>
        </dl>
        <t>To reduce unnecessary use of bandwidth, variable length integers <bcp14>SHOULD</bcp14>
be encoded using the least number of bytes possible to represent the
required value.</t>
      </section>
    </section>
    <section anchor="model">
      <name>Object Data Model</name>
      <t>MOQT has a hierarchical data model, comprised of tracks which contain
groups, and groups that contain objects. Inside of a group, the objects
can be organized into subgroups.</t>
      <t>To give an example of how an application might use this data model,
consider an application sending high and low resolution video using a
codec with temporal scalability. Each resolution is sent as a separate
track to allow the subscriber to pick the appropriate resolution given
the display environment and available bandwidth. Each "group of pictures"
in a video is sent as a group because the first frame is needed to
decode later frames. This allows the client to join at the logical points
where they can get the information to start decoding the stream.
The temporal layers are sent as separate sub groups to allow the
priority mechanism to favour the base layer when there is not enough
bandwidth to send both the base and enhancement layers. Each frame of
video on a given layer is sent as a single object.</t>
      <section anchor="model-object">
        <name>Objects</name>
        <t>The basic data element of MOQT is an object.  An object is an
addressable unit whose payload is a sequence of bytes.  All objects
belong to a group, indicating ordering and potential
dependencies. <xref target="model-group"/>  An object is uniquely identified by
its track namespace, track name, group ID, and object ID, and must be an
identical sequence of bytes regardless of how or where it is retrieved.
An Object can become unavailable, but its contents <bcp14>MUST NOT</bcp14> change over
time.</t>
        <t>Objects are comprised of two parts: metadata and a payload.  The metadata is
never encrypted and is always visible to relays (see <xref target="relays-moq"/>). The
payload portion may be encrypted, in which case it is only visible to the
Original Publisher and End Subscribers. The application is solely responsible
for the content of the object payload. This includes the underlying encoding,
compression, any end-to-end encryption, or authentication. A relay <bcp14>MUST NOT</bcp14>
combine, split, or otherwise modify object payloads.</t>
      </section>
      <section anchor="model-subgroup">
        <name>Subgroups</name>
        <t>A subgroup is a sequence of one or more objects from the same group
(<xref target="model-group"/>) in ascending order by Object ID. Objects in a subgroup
have a dependency and priority relationship consistent with sharing a QUIC
stream. In some cases, a Group will be most effectively delivered using more
than one QUIC stream.</t>
        <t>When a Track's forwarding preference (see <xref target="object-fields"/>) is "Track" or
"Datagram", Objects are not sent in Subgroups, no Subgroup IDs are assigned, and the
description in the remainder of this section does not apply.</t>
        <t>QUIC streams offer in-order reliable delivery and the ability to cancel sending
and retransmission of data. Furthermore, many implementations offer the ability
to control the relative priority of streams, which allows control over the
scheduling of sending data on active streams.</t>
        <t>Every object within a Group belongs to exactly one Subgroup.</t>
        <t>Objects from two subgroups cannot be sent on the same QUIC stream. Objects from the
same Subgroup <bcp14>MUST NOT</bcp14> be sent on different QUIC streams, unless one of the streams
was reset prematurely, or upstream conditions have forced objects from a Subgroup
to be sent out of Object ID order.</t>
        <t>Original publishers assign each Subgroup a Subgroup ID, and do so as they see fit.  The
scope of a Subgroup ID is a Group, so Subgroups from different Groups <bcp14>MAY</bcp14> share a Subgroup
ID without implying any relationship between them. In general, publishers assign
objects to subgroups in order to leverage the features of QUIC streams as described
above.</t>
        <t>An example strategy for using QUIC stream properties follows. If object B is
dependent on object A, then delivery of B can follow A, i.e. A and B can be
usefully delivered over a single QUIC stream. Furthermore, in this example:</t>
        <ul spacing="normal">
          <li>
            <t>If an object is dependent on all previous objects in a Subgroup, it is added to
that Subgroup.</t>
          </li>
          <li>
            <t>If an object is not dependent on all of the objects in a Subgroup, it goes in
a different Subgroup.</t>
          </li>
          <li>
            <t>There are often many ways to compose Subgroups that meet these criteria. Where
possible, choose the composition that results in the fewest Subgroups in a group
to minimize the number of QUIC streams used.</t>
          </li>
        </ul>
      </section>
      <section anchor="model-group">
        <name>Groups</name>
        <t>A group is a collection of objects and is a sub-unit of a track (<xref target="model-track"/>).
Groups <bcp14>SHOULD</bcp14> be indendepently useful, so objects within a group <bcp14>SHOULD NOT</bcp14> depend
on objects in other groups. A group provides a join point for subscriptions, so a
subscriber that does not want to receive the entire track can opt to receive only
the latest group(s).  The publisher then selectively transmits objects based on
their group membership.</t>
      </section>
      <section anchor="model-track">
        <name>Track</name>
        <t>A track is a sequence of groups (<xref target="model-group"/>). It is the entity
against which a subscriber issues a subscription request.  A subscriber
can request to receive individual tracks starting at a group boundary,
including any new objects pushed by the publisher while the track is
active.</t>
        <section anchor="track-name">
          <name>Track Naming and Scopes</name>
          <t>In MOQT, every track has a track name and a track namespace associated
with it.  A track name identifies an individual track within the
namespace.</t>
          <t>Track namespace is an ordered N-tuple of bytes where N can be between 1 and 32.
The structured nature of Track Namespace allows relays and applications to
manipulate prefixes of a namespace. Track name is a sequence of bytes.</t>
          <t>In this specification, both the Track Namespace tuple fields and the Track Name
are not constrained to a specific encoding. They carry a sequence of bytes and
comparison between two Track Namespace tuple fields or Track Names is done by
exact comparison of the bytes. Specifications that use MoQ Transport may
constrain the information in these fields, for example by restricting them to
UTF-8. Any specification that does needs to specify the canonicalization into
the bytes in the Track Namespace or Track Name such that exact comparison works.</t>
        </section>
        <section anchor="track-scope">
          <name>Scope</name>
          <t>A MOQT scope is a set of servers (as identified by their connection
URIs) for which the tuple of Track Name and Track Namespace are
guaranteed to be unique and identify a specific track. It is up to
the application using MOQT to define how broad or narrow the scope is.
An application that deals with connections between devices
on a local network may limit the scope to a single connection; by
contrast, an application that uses multiple CDNs to serve media may
require the scope to include all of those CDNs.</t>
          <t>Because the tuple of Track Namespace and Track Name are unique within an
MOQT scope, they can be used as a cache key.
MOQT does not provide any in-band content negotiation methods similar to
the ones defined by HTTP (<xref section="10" sectionFormat="comma" target="RFC9110"/>); if, at a given
moment in time, two tracks within the same scope contain different data,
they have to have different names and/or namespaces.</t>
        </section>
        <section anchor="connection-url">
          <name>Connection URL</name>
          <t>Each track <bcp14>MAY</bcp14> have one or more associated connection URLs specifying
network hosts through which a track may be accessed. The syntax of the
Connection URL and the associated connection setup procedures are
specific to the underlying transport protocol usage <xref target="session"/>.</t>
        </section>
      </section>
    </section>
    <section anchor="session">
      <name>Sessions</name>
      <section anchor="session-establishment">
        <name>Session establishment</name>
        <t>This document defines a protocol that can be used interchangeably both
over a QUIC connection directly <xref target="QUIC"/>, and over WebTransport
<xref target="WebTransport"/>.  Both provide streams and datagrams with similar
semantics (see <xref section="4" sectionFormat="comma" target="I-D.ietf-webtrans-overview"/>); thus, the
main difference lies in how the servers are identified and how the
connection is established.  When using QUIC, datagrams <bcp14>MUST</bcp14> be
supported via the [QUIC-DATAGRAM] extension, which is already a
requirement for WebTransport over HTTP/3.</t>
        <t>There is no definition of the protocol over other transports,
such as TCP, and applications using MoQ might need to fallback to
another protocol when QUIC or WebTransport aren't available.</t>
        <section anchor="webtransport">
          <name>WebTransport</name>
          <t>A MOQT server that is accessible via WebTransport can be identified
using an HTTPS URI (<xref section="4.2.2" sectionFormat="comma" target="RFC9110"/>).  A MOQT session can be
established by sending an extended CONNECT request to the host and the
path indicated by the URI, as described in <xref section="3" sectionFormat="comma" target="WebTransport"/>.</t>
        </section>
        <section anchor="quic">
          <name>QUIC</name>
          <t>A MOQT server that is accessible via native QUIC can be identified by a
URI with a "moq" scheme.  The "moq" URI scheme is defined as follows,
using definitions from <xref target="RFC3986"/>:</t>
          <artwork><![CDATA[
moq-URI = "moqt" "://" authority path-abempty [ "?" query ]
]]></artwork>
          <t>The <tt>authority</tt> portion <bcp14>MUST NOT</bcp14> contain a non-empty <tt>host</tt> portion.
The <tt>moq</tt> URI scheme supports the <tt>/.well-known/</tt> path prefix defined in
<xref target="RFC8615"/>.</t>
          <t>This protocol does not specify any semantics on the <tt>path-abempty</tt> and
<tt>query</tt> portions of the URI.  The contents of those are left up to the
application.</t>
          <t>The client can establish a connection to a MoQ server identified by a
given URI by setting up a QUIC connection to the host and port
identified by the <tt>authority</tt> section of the URI.  The <tt>path-abempty</tt>
and <tt>query</tt> portions of the URI are communicated to the server using the
PATH parameter (<xref target="path"/>) which is sent in the CLIENT_SETUP message at the
start of the session.  The ALPN value <xref target="RFC7301"/> used by the protocol
is <tt>moq-00</tt>.</t>
        </section>
      </section>
      <section anchor="version-negotiation">
        <name>Version and Extension Negotiation</name>
        <t>Endpoints use the exchange of Setup messages to negotiate the MOQT version and
any extensions to use.</t>
        <t>The client indicates the MOQT versions it supports in the CLIENT_SETUP message
(see <xref target="message-setup"/>). It also includes the union of all Setup Parameters
<xref target="setup-params"/> required for a handshake by any of those versions.</t>
        <t>Within any MOQT version, clients request the use of extensions by adding Setup
parameters corresponding to that extension. No extensions are defined in this
document.</t>
        <t>The server replies with a SERVER_SETUP message that indicates the chosen
version, includes all parameters required for a handshake in that version, and
parameters for every extension requested by the client that it supports.</t>
        <t>New versions of MOQT <bcp14>MUST</bcp14> specify which existing extensions can be used with
that version. New extensions <bcp14>MUST</bcp14> specify the existing versions with which they
can be used.</t>
        <t>If a given parameter carries the same information in multiple versions,
but might have different optimal values in those versions, there <bcp14>SHOULD</bcp14> be
separate Setup parameters for that information in each version.</t>
      </section>
      <section anchor="session-init">
        <name>Session initialization</name>
        <t>The first stream opened is a client-initiated bidirectional control stream where
the peers exchange Setup messages (<xref target="message-setup"/>).  All messages defined in
this draft except OBJECT and OBJECT_WITH_LENGTH are sent on the control stream
after the Setup message. Control messages <bcp14>MUST NOT</bcp14> be sent on any other stream,
and a peer receiving a control message on a different stream closes the session
as a 'Protocol Violation'. Objects <bcp14>MUST NOT</bcp14> be sent on the control stream, and a
peer receiving an Object on the control stream closes the session as a 'Protocol
Violation'.</t>
        <t>This draft only specifies a single use of bidirectional streams. Objects are
sent on unidirectional streams.  Because there are no other uses of
bidirectional streams, a peer <bcp14>MAY</bcp14> currently close the session as a
'Protocol Violation' if it receives a second bidirectional stream.</t>
        <t>The control stream <bcp14>MUST NOT</bcp14> be closed at the underlying transport layer while the
session is active.  Doing so results in the session being closed as a
'Protocol Violation'.</t>
      </section>
      <section anchor="stream-cancellation">
        <name>Stream Cancellation</name>
        <t>Streams aside from the control stream <bcp14>MAY</bcp14> be canceled due to congestion
or other reasons by either the publisher or subscriber. Early termination of a
stream does not affect the MoQ application state, and therefore has no
effect on outstanding subscriptions.</t>
      </section>
      <section anchor="session-termination">
        <name>Termination</name>
        <t>The Transport Session can be terminated at any point.  When native QUIC
is used, the session is closed using the CONNECTION_CLOSE frame
(<xref section="19.19" sectionFormat="comma" target="QUIC"/>).  When WebTransport is used, the session is
closed using the CLOSE_WEBTRANSPORT_SESSION capsule (<xref section="5" sectionFormat="comma" target="WebTransport"/>).</t>
        <t>The application <bcp14>MAY</bcp14> use any error message and <bcp14>SHOULD</bcp14> use a relevant
code, as defined below:</t>
        <table>
          <thead>
            <tr>
              <th align="right">Code</th>
              <th align="left">Reason</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x0</td>
              <td align="left">No Error</td>
            </tr>
            <tr>
              <td align="right">0x1</td>
              <td align="left">Internal Error</td>
            </tr>
            <tr>
              <td align="right">0x2</td>
              <td align="left">Unauthorized</td>
            </tr>
            <tr>
              <td align="right">0x3</td>
              <td align="left">Protocol Violation</td>
            </tr>
            <tr>
              <td align="right">0x4</td>
              <td align="left">Duplicate Track Alias</td>
            </tr>
            <tr>
              <td align="right">0x5</td>
              <td align="left">Parameter Length Mismatch</td>
            </tr>
            <tr>
              <td align="right">0x6</td>
              <td align="left">Too Many Subscribes</td>
            </tr>
            <tr>
              <td align="right">0x10</td>
              <td align="left">GOAWAY Timeout</td>
            </tr>
          </tbody>
        </table>
        <ul spacing="normal">
          <li>
            <t>No Error: The session is being terminated without an error.</t>
          </li>
          <li>
            <t>Internal Error: An implementation specific error occurred.</t>
          </li>
          <li>
            <t>Unauthorized: The endpoint breached an agreement, which <bcp14>MAY</bcp14> have been
 pre-negotiated by the application.</t>
          </li>
          <li>
            <t>Protocol Violation: The remote endpoint performed an action that was
disallowed by the specification.</t>
          </li>
          <li>
            <t>Duplicate Track Alias: The endpoint attempted to use a Track Alias
that was already in use.</t>
          </li>
          <li>
            <t>Too Many Subscribes: The session was closed because the subscriber used
a Subscribe ID equal or larger than the current Maximum Subscribe ID.</t>
          </li>
          <li>
            <t>GOAWAY Timeout: The session was closed because the client took too long to
close the session in response to a GOAWAY (<xref target="message-goaway"/>) message.
See session migration (<xref target="session-migration"/>).</t>
          </li>
        </ul>
      </section>
      <section anchor="session-migration">
        <name>Migration</name>
        <t>MoqTransport requires a long-lived and stateful session. However, a service
provider needs the ability to shutdown/restart a server without waiting for all
sessions to drain naturally, as that can take days for long-form media.
MoqTransport avoids this via the GOAWAY message (<xref target="message-goaway"/>).</t>
        <t>The server sends a GOAWAY message, signaling that the client should establish a
new session and migrate any active subscriptions. The GOAWAY message may contain
a new URI for the new session, otherwise the current URI is reused. The server
<bcp14>SHOULD</bcp14> terminate the session with 'GOAWAY Timeout' after a sufficient timeout if
there are still open subscriptions on a connection.</t>
        <t>The GOAWAY message does not immediately impact subscription state. A subscriber
<bcp14>SHOULD</bcp14> individually UNSUBSCRIBE for each existing subscription, while a
publisher <bcp14>MAY</bcp14> reject new SUBSCRIBEs while in the draining state. When the server
is a subscriber, it <bcp14>SHOULD</bcp14> send a GOAWAY message to downstream subscribers
prior to any UNSUBSCRIBE messages to upstream publishers.</t>
        <t>After the client receives a GOAWAY, it's <bcp14>RECOMMENDED</bcp14> that the client waits until
there are no more active subscriptions before closing the session with NO_ERROR.
Ideally this is transparent to the application using MOQT, which involves
establishing a new session in the background and migrating active subscriptions
and announcements. The client can choose to delay closing the session if it
expects more OBJECTs to be delivered. The server closes the session with a
'GOAWAY Timeout' if the client doesn't close the session quickly enough.</t>
      </section>
    </section>
    <section anchor="priorities">
      <name>Priorities</name>
      <t>MoQ priorities allow a subscriber and original publisher to influence
the transmission order of Objects within a session in the presence of
congestion.</t>
      <t>Given the critical nature of control messages and their relatively
small size, the control stream <bcp14>SHOULD</bcp14> be prioritized higher than all
subscribed Objects.</t>
      <t>Both SUBSCRIBE and FETCH messages indicate a subscriber priority and
group order, so the following text applies equally to both types of
subscriptions.</t>
      <t>The subscriber indicates the priority of a subscription via the
Subscriber Priority field and the original publisher indicates priority
in every stream or datagram header.  As such, the subscriber's priority is a
property of the subscription and the original publisher's priority is a
property of the Track and the Objects it contains. In both cases, a lower
value indicates a higher priority, with 0 being the highest priority.</t>
      <t>When Objects are contained in Subgroups, all Objects in the Subgroup have the same
priority.</t>
      <t>The Subscriber Priority is considered first when selecting a subscription
to send data on within a given session. When two or more subscriptions
have equal subscriber priority, the original publisher priority is considered
next and can change within the track, so subscriptions are prioritized based
on the highest priority data available to send. For example, if the subscription
had data at priority 6 and priority 10 to send, the subscription priority would
be 6. When both the subscriber and original publisher priorities for a
subscription are equal, how much data to send from each subscription is
implementation-dependent, but the expectation is that all subscriptions will
be able to send some data.</t>
      <t>The subscriber's priority can be changed via a SUBSCRIBE_UPDATE message.
This updates the priority of all unsent data within the subscription,
though the details of the reprioritization are implementation-specific.</t>
      <t>Subscriptions have a Group Order of either 'Ascending' or 'Descending',
which indicates whether the lowest or highest Group Id <bcp14>SHOULD</bcp14> be sent first
when multiple Groups are available to send.  A subscriber can specify either
'Ascending' or 'Descending' in the SUBSCRIBE message or they can specify they
want to use the Original Publisher's Group Order, which is indicated in
the corresponding SUBSCRIBE_OK.</t>
      <t>Within the same Group, and the same priority level,
Objects with a lower Object Id are always sent before objects with a
higher Object Id, regardless of the specified Group Order. If the group
contains more than one Subgroup and the priority varies between these Subgroups,
higher priority Subgroups are sent before lower priority Subgroups. If the specified
priority of two Subgroups in a Group are equal, the lower Subgroup ID has priority.
Within a Subgroup, Objects <bcp14>MUST</bcp14> be sent in increasing Object ID order.</t>
      <t>The Group Order cannot be changed via a SUBSCRIBE_UPDATE message, and
instead an UNSUBSCRIBE and SUBSCRIBE can be used.</t>
      <t>Relays <bcp14>SHOULD</bcp14> respect the subscriber and original publisher's priorities.
Relays <bcp14>SHOULD NOT</bcp14> directly use Subscriber Priority or Group Order
from incoming subscriptions for upstream subscriptions. Relays use of
Subscriber Priority for upstream subscriptions can be based on
factors specific to it, such as the popularity of the
content or policy, or relays can specify the same value for all
upstream subscriptions.</t>
      <t>MoQ Sessions can span multiple namespaces, and priorities might not
be coordinated across namespaces.  The subscriber's priority is
considered first, so there is a mechanism for a subscriber to fix
incompatibilities between different namespaces prioritization schemes.
Additionally, it is anticipated that when multiple namespaces
are present within a session, the namespaces could be coordinating,
possibly part of the same application.  In cases when pooling among
namespaces is expected to cause issues, multiple MoQ sessions, either
within a single connection or on multiple connections can be used.</t>
    </section>
    <section anchor="relays-moq">
      <name>Relays</name>
      <t>Relays are leveraged to enable distribution scale in the MoQ
architecture. Relays can be used to form an overlay delivery network,
similar in functionality to Content Delivery Networks
(CDNs). Additionally, relays serve as policy enforcement points by
validating subscribe and publish requests at the edge of a network.</t>
      <t>Relays are endpoints, which means they terminate Transport Sessions in order to
have visibility of MoQ Object metadata.</t>
      <t>Relays <bcp14>MAY</bcp14> cache Objects, but are not required to.</t>
      <section anchor="subscriber-interactions">
        <name>Subscriber Interactions</name>
        <t>Subscribers interact with the Relays by sending a SUBSCRIBE
(<xref target="message-subscribe-req"/>) control message for the tracks of
interest. Relays <bcp14>MUST</bcp14> ensure subscribers are authorized to access the
content associated with the track. The authorization
information can be part of subscription request itself or part of the
encompassing session. The specifics of how a relay authorizes a user are
outside the scope of this specification. The subscriber is notified
of the result of the subscription via a
SUBSCRIBE_OK (<xref target="message-subscribe-ok"/>) or SUBSCRIBE_ERROR
<xref target="message-subscribe-error"/> control message. The entity receiving the
SUBSCRIBE <bcp14>MUST</bcp14> send only a single response to a given SUBSCRIBE of
either SUBSCRIBE_OK or SUBSCRIBE_ERROR.</t>
        <t>If a relay does not already have a subscription for the track,
or if the subscription does not cover all the requested Objects, it
will need to make an upstream subscription.  The relay <bcp14>SHOULD NOT</bcp14>
return a SUBCRIBE_OK until at least one SUBSCRIBE_OK has been
received for the track, to ensure the Group Order is correct.</t>
        <t>For successful subscriptions, the publisher maintains a list of
subscribers for each track. Each new OBJECT belonging to the
track within the subscription range is forwarded to each active
subscriber, dependent on the congestion response. A subscription
remains active until the publisher of the track terminates the
subscription with a SUBSCRIBE_DONE (see <xref target="message-subscribe-done"/>).</t>
        <t>A caching relay saves Objects to its cache identified by the Object's
Full Track Name, Group ID and Object ID. Relays <bcp14>MUST</bcp14> be able to
process objects for the same Full Track Name from multiple
publishers and forward objects to active matching subscriptions.
If multiple objects are received with the same Full Track Name,
Group ID and Object ID, Relays <bcp14>MAY</bcp14> ignore subsequently received Objects
or <bcp14>MAY</bcp14> use them to update the cache. Implementations that update the
cache need to be protect against cache poisoning.</t>
        <t>Objects <bcp14>MUST NOT</bcp14> be sent for unsuccessful subscriptions, and if a subscriber
receives a SUBSCRIBE_ERROR after receiving objects, it <bcp14>MUST</bcp14> close the session
with a 'Protocol Violation'.</t>
        <t>A relay <bcp14>MUST NOT</bcp14> reorder or drop objects received on a multi-object stream when
forwarding to subscribers, unless it has application specific information.</t>
        <t>Relays <bcp14>MAY</bcp14> aggregate authorized subscriptions for a given track when
multiple subscribers request the same track. Subscription aggregation
allows relays to make only a single upstream subscription for the
track. The published content received from the upstream subscription
request is cached and shared among the pending subscribers.</t>
        <t>The application <bcp14>SHOULD</bcp14> use a relevant error code in SUBSCRIBE_ERROR,
as defined below:</t>
        <table>
          <thead>
            <tr>
              <th align="right">Code</th>
              <th align="left">Reason</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x0</td>
              <td align="left">Internal Error</td>
            </tr>
            <tr>
              <td align="right">0x1</td>
              <td align="left">Invalid Range</td>
            </tr>
            <tr>
              <td align="right">0x2</td>
              <td align="left">Retry Track Alias</td>
            </tr>
            <tr>
              <td align="right">0x3</td>
              <td align="left">Track Does Not Exist</td>
            </tr>
            <tr>
              <td align="right">0x4</td>
              <td align="left">Unauthorized</td>
            </tr>
            <tr>
              <td align="right">0x5</td>
              <td align="left">Timeout</td>
            </tr>
          </tbody>
        </table>
        <t>The application <bcp14>SHOULD</bcp14> use a relevant status code in
SUBSCRIBE_DONE, as defined below:</t>
        <table>
          <thead>
            <tr>
              <th align="right">Code</th>
              <th align="left">Reason</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x0</td>
              <td align="left">Unsubscribed</td>
            </tr>
            <tr>
              <td align="right">0x1</td>
              <td align="left">Internal Error</td>
            </tr>
            <tr>
              <td align="right">0x2</td>
              <td align="left">Unauthorized</td>
            </tr>
            <tr>
              <td align="right">0x3</td>
              <td align="left">Track Ended</td>
            </tr>
            <tr>
              <td align="right">0x4</td>
              <td align="left">Subscription Ended</td>
            </tr>
            <tr>
              <td align="right">0x5</td>
              <td align="left">Going Away</td>
            </tr>
            <tr>
              <td align="right">0x6</td>
              <td align="left">Expired</td>
            </tr>
          </tbody>
        </table>
        <section anchor="graceful-publisher-relay-switchover">
          <name>Graceful Publisher Relay Switchover</name>
          <t>This section describes behavior a subscriber <bcp14>MAY</bcp14> implement
to allow for a better user experience when a relay sends a GOAWAY.</t>
          <t>When a subscriber receives the GOAWAY message, it starts the process
of connecting to a new relay and sending the SUBSCRIBE requests for
all active subscriptions to the new relay. The new relay will send a
response to the subscribes and if they are successful, the subscriptions
to the old relay can be stopped with an UNSUBSCRIBE.</t>
        </section>
      </section>
      <section anchor="publisher-interactions">
        <name>Publisher Interactions</name>
        <t>Publishing through the relay starts with publisher sending ANNOUNCE
control message with a <tt>Track Namespace</tt> (<xref target="model-track"/>).
The announce enables the relay to know which publisher to forward a
SUBSCRIBE to.</t>
        <t>Relays <bcp14>MUST</bcp14> ensure that publishers are authorized by:</t>
        <ul spacing="normal">
          <li>
            <t>Verifying that the publisher is authorized to publish the content
associated with the set of tracks whose Track Namespace matches the
announced namespace. Where the authorization and identification of
the publisher occurs depends on the way the relay is managed and
is application specific.</t>
          </li>
        </ul>
        <t>Relays respond with an ANNOUNCE_OK or ANNOUNCE_ERROR control message
providing the result of announcement. The entity receiving the
ANNOUNCE <bcp14>MUST</bcp14> send only a single response to a given ANNOUNCE of
either ANNOUNCE_OK or ANNOUNCE_ERROR.</t>
        <t>A Relay can receive announcements from multiple publishers for the same
Track Namespace and it <bcp14>SHOULD</bcp14> respond with the same response to each of the
publishers, as though it was responding to an ANNOUNCE
from a single publisher for a given tracknamespace.</t>
        <t>When a publisher wants to stop
new subscriptions for an announced namespace it sends an UNANNOUNCE.
A subscriber indicates it will no longer route subscriptions for a
namespace it previously responded ANNOUNCE_OK to by sending an
ANNOUNCE_CANCEL.</t>
        <t>A relay manages sessions from multiple publishers and subscribers,
connecting them based on the track namespace. This <bcp14>MUST</bcp14> use an exact
match on track namespace unless otherwise negotiated by the application.
For example, a SUBSCRIBE namespace=foobar message will be forwarded to
the session that sent ANNOUNCE namespace=foobar.</t>
        <t>When a relay receives an incoming SUBSCRIBE request that triggers an
upstream subscription, it <bcp14>SHOULD</bcp14> send a SUBSCRIBE request to each
publisher that has announced the subscription's namespace, unless it
already has an active subscription for the Objects requested by the
incoming SUBSCRIBE request from all available publishers.</t>
        <t>When a relay receives an incoming ANNOUCE for a given namespace, for
each active upstream subscription that matches that namespace, it <bcp14>SHOULD</bcp14> send a
SUBSCRIBE to that publisher that send the ANNOUNCE.</t>
        <t>OBJECT message headers carry a short hop-by-hop <tt>Track Alias</tt> that maps to
the Full Track Name (see <xref target="message-subscribe-ok"/>). Relays use the
<tt>Track Alias</tt> of an incoming OBJECT message to identify its track and find
the active subscribers for that track. Relays <bcp14>MUST</bcp14> forward OBJECT messages to
matching subscribers in accordance to each subscription's priority, group order,
and delivery timeout.</t>
        <section anchor="graceful-publisher-network-switchover">
          <name>Graceful Publisher Network Switchover</name>
          <t>This section describes behavior that a publisher <bcp14>MAY</bcp14>
choose to implement to allow for a better users experience when
switching between networks, such as WiFi to Cellular or vice versa.</t>
          <t>If the original publisher detects it is likely to need to switch networks,
for example because the WiFi signal is getting weaker, and it does not
have QUIC connection migration available, it establishes a new session
over the new interface and sends an ANNOUCE. The relay will forward
matching subscribes and the publisher publishes objects on both sessions.
Once the subscriptions have migrated over to session on the new network,
the publisher can stop publishing objects on the old network. The relay
will drop duplicate objects received on both subscriptions.
Ideally, the subscriptions downstream from the relay do no observe this
change, and keep receiving the objects on the same subscription.</t>
        </section>
        <section anchor="graceful-publisher-relay-switchover-1">
          <name>Graceful Publisher Relay Switchover</name>
          <t>This section describes behavior that a publisher <bcp14>MAY</bcp14> choose to implement
to allow for a better user experience when a relay sends them a GOAWAY.</t>
          <t>When a publisher receives a GOAWAY, it starts the process of
connecting to a new relay and sends announces, but it does not immediately
stop publishing objects to the old relay. The new relay will send
subscribes and the publisher can start sending new objects to the new relay
instead of the old relay. Once objects are going to the new relay,
the announcement and subscription to the old relay can be stopped.</t>
        </section>
      </section>
      <section anchor="relay-object-handling">
        <name>Relay Object Handling</name>
        <t>MOQT encodes the delivery information for a stream via OBJECT headers
(<xref target="message-object"/>).  A relay <bcp14>MUST NOT</bcp14> modify Object properties when
forwarding.</t>
        <t>A relay <bcp14>MUST</bcp14> treat the object payload as opaque.  A relay <bcp14>MUST NOT</bcp14>
combine, split, or otherwise modify object payloads.  A relay <bcp14>SHOULD</bcp14>
prioritize sending Objects based on <xref target="priorities"/>.</t>
        <t>A publisher <bcp14>SHOULD</bcp14> begin sending incomplete objects when available to
avoid incurring additional latency.</t>
        <t>A relay that reads from a stream and writes to stream in order will
introduce head-of-line blocking.  Packet loss will cause stream data to
be buffered in the library, awaiting in order delivery, which will
increase latency over additional hops.  To mitigate this, a relay <bcp14>SHOULD</bcp14>
read and write stream data out of order subject to flow control
limits.  See section 2.2 in <xref target="QUIC"/>.</t>
      </section>
    </section>
    <section anchor="message">
      <name>Control Messages</name>
      <t>MOQT uses a single bidirectional stream to exchange control messages, as
defined in <xref target="session-init"/>.  Every single message on the control stream is
formatted as follows:</t>
      <figure anchor="moq-transport-message-format">
        <name>MOQT Message</name>
        <artwork><![CDATA[
MOQT Control Message {
  Message Type (i),
  Message Length (i),
  Message Payload (..),
}
]]></artwork>
      </figure>
      <table>
        <thead>
          <tr>
            <th align="right">ID</th>
            <th align="left">Messages</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="right">0x2</td>
            <td align="left">SUBSCRIBE_UPDATE (<xref target="message-subscribe-update-req"/>)</td>
          </tr>
          <tr>
            <td align="right">0x3</td>
            <td align="left">SUBSCRIBE (<xref target="message-subscribe-req"/>)</td>
          </tr>
          <tr>
            <td align="right">0x4</td>
            <td align="left">SUBSCRIBE_OK (<xref target="message-subscribe-ok"/>)</td>
          </tr>
          <tr>
            <td align="right">0x5</td>
            <td align="left">SUBSCRIBE_ERROR (<xref target="message-subscribe-error"/>)</td>
          </tr>
          <tr>
            <td align="right">0x6</td>
            <td align="left">ANNOUNCE  (<xref target="message-announce"/>)</td>
          </tr>
          <tr>
            <td align="right">0x7</td>
            <td align="left">ANNOUNCE_OK (<xref target="message-announce-ok"/>)</td>
          </tr>
          <tr>
            <td align="right">0x8</td>
            <td align="left">ANNOUNCE_ERROR (<xref target="message-announce-error"/>)</td>
          </tr>
          <tr>
            <td align="right">0x9</td>
            <td align="left">UNANNOUNCE  (<xref target="message-unannounce"/>)</td>
          </tr>
          <tr>
            <td align="right">0xA</td>
            <td align="left">UNSUBSCRIBE (<xref target="message-unsubscribe"/>)</td>
          </tr>
          <tr>
            <td align="right">0xB</td>
            <td align="left">SUBSCRIBE_DONE (<xref target="message-subscribe-done"/>)</td>
          </tr>
          <tr>
            <td align="right">0xC</td>
            <td align="left">ANNOUNCE_CANCEL (<xref target="message-announce-cancel"/>)</td>
          </tr>
          <tr>
            <td align="right">0xD</td>
            <td align="left">TRACK_STATUS_REQUEST (<xref target="message-track-status-req"/>)</td>
          </tr>
          <tr>
            <td align="right">0xE</td>
            <td align="left">TRACK_STATUS (<xref target="message-track-status"/>)</td>
          </tr>
          <tr>
            <td align="right">0x10</td>
            <td align="left">GOAWAY (<xref target="message-goaway"/>)</td>
          </tr>
          <tr>
            <td align="right">0x11</td>
            <td align="left">SUBSCRIBE_ANNOUNCES (<xref target="message-subscribe-ns"/>)</td>
          </tr>
          <tr>
            <td align="right">0x12</td>
            <td align="left">SUBSCRIBE_ANNOUNCES_OK (<xref target="message-sub-ann-ok"/>)</td>
          </tr>
          <tr>
            <td align="right">0x13</td>
            <td align="left">SUBSCRIBE_ANNOUNCES_ERROR (<xref target="message-sub-ann-error"/></td>
          </tr>
          <tr>
            <td align="right">0x14</td>
            <td align="left">UNSUBSCRIBE_ANNOUNCES (<xref target="message-unsub-ann"/>)</td>
          </tr>
          <tr>
            <td align="right">0x15</td>
            <td align="left">MAX_SUBSCRIBE_ID (<xref target="message-max-subscribe-id"/>)</td>
          </tr>
          <tr>
            <td align="right">0x16</td>
            <td align="left">FETCH (<xref target="message-fetch"/>)</td>
          </tr>
          <tr>
            <td align="right">0x17</td>
            <td align="left">FETCH_CANCEL (<xref target="message-fetch-cancel"/>)</td>
          </tr>
          <tr>
            <td align="right">0x18</td>
            <td align="left">FETCH_OK (<xref target="message-fetch-ok"/>)</td>
          </tr>
          <tr>
            <td align="right">0x19</td>
            <td align="left">FETCH_ERROR (<xref target="message-fetch-error"/>)</td>
          </tr>
          <tr>
            <td align="right">0x40</td>
            <td align="left">CLIENT_SETUP (<xref target="message-setup"/>)</td>
          </tr>
          <tr>
            <td align="right">0x41</td>
            <td align="left">SERVER_SETUP (<xref target="message-setup"/>)</td>
          </tr>
        </tbody>
      </table>
      <t>An endpoint that receives an unknown message type <bcp14>MUST</bcp14> close the session.
Control messages have a length to make parsing easier, but no control
messages are intended to be ignored. If the length does not match the
length of the message content, the receiver <bcp14>MUST</bcp14> close the session.</t>
      <section anchor="params">
        <name>Parameters</name>
        <t>Some messages include a Parameters field that encode optional message
elements. They contain a type, length, and value.</t>
        <t>Senders <bcp14>MUST NOT</bcp14> repeat the same parameter type in a message. Receivers
<bcp14>SHOULD</bcp14> check that there are no duplicate parameters and close the session
as a 'Protocol Violation' if found.</t>
        <t>Receivers ignore unrecognized parameters.</t>
        <t>The format of Parameters is as follows:</t>
        <figure anchor="moq-param">
          <name>MOQT Parameter</name>
          <artwork><![CDATA[
Parameter {
  Parameter Type (i),
  Parameter Length (i),
  Parameter Value (..),
}
]]></artwork>
        </figure>
        <t>Parameter Type is an integer that indicates the semantic meaning of the
parameter. Setup message parameters use a namespace that is constant across all
MoQ Transport versions. All other messages use a version-specific namespace. For
example, the integer '1' can refer to different parameters for Setup messages
and for all other message types.</t>
        <t>SETUP message parameter types are defined in <xref target="setup-params"/>. Version-
specific parameter types are defined in <xref target="version-specific-params"/>.</t>
        <t>The Parameter Length field of the String Parameter encodes the length
of the Parameter Value field in bytes.</t>
        <t>Each parameter description will indicate the data type in the Parameter Value
field. If a receiver understands a parameter type, and the parameter length
implied by that type does not match the Parameter Length field, the receiver
<bcp14>MUST</bcp14> terminate the session with error code 'Parameter Length Mismatch'.</t>
        <section anchor="version-specific-params">
          <name>Version Specific Parameters</name>
          <t>Each version-specific parameter definition indicates the message types in which
it can appear. If it appears in some other type of message, it <bcp14>MUST</bcp14> be ignored.
Note that since Setup parameters use a separate namespace, it is impossible for
these parameters to appear in Setup messages.</t>
          <section anchor="authorization-info">
            <name>AUTHORIZATION INFO</name>
            <t>AUTHORIZATION INFO parameter (key 0x02) identifies a track's authorization
information in a SUBSCRIBE, SUBSCRIBE_ANNOUNCES or ANNOUNCE message. This
parameter is populated for cases where the authorization is required at the
track level. The value is an ASCII string.</t>
          </section>
          <section anchor="delivery-timeout">
            <name>DELIVERY TIMEOUT Parameter</name>
            <t>The DELIVERY TIMEOUT parameter (key 0x03) <bcp14>MAY</bcp14> appear in a SUBSCRIBE,
SUBSCRIBE_OK, or a SUBSCRIBE_UDPATE message.  It is the duration in milliseconds
the relay <bcp14>SHOULD</bcp14> continue to attempt forwarding Objects after they have been
received.  The start time for the timeout is based on when the beginning of the
Object is received, and does not depend upon the forwarding preference. There is
no explicit signal that an Object was not sent because the delivery timeout
was exceeded.</t>
            <t>If both the subscriber and publisher specify the parameter, they use the min of the
two values for the subscription.  The publisher <bcp14>SHOULD</bcp14> always specify the value
received from an upstream subscription when there is one, and nothing otherwise.
If an earlier Object arrives later than subsequent Objects, relays can consider
the receipt time as that of the next later Object, with the assumption that the
Object's data was reordered.</t>
            <t>If neither the subscriber or publisher specify DELIVERY TIMEOUT, Objects are
delivered as indicated by their Group Order and Priority.</t>
            <t>When sent by a subscriber, this parameter is intended to be specific to a
subscription, so it <bcp14>SHOULD NOT</bcp14> be forwarded upstream by a relay that intends
to serve multiple subscriptions for the same track.</t>
            <t>Publishers <bcp14>SHOULD</bcp14> consider whether the entire Object is likely to be delivered
before sending any data for that Object, taking into account priorities,
congestion control, and any other relevant information.</t>
          </section>
          <section anchor="max-cache-duration">
            <name>MAX CACHE DURATION Parameter</name>
            <t>MAX_CACHE_DURATION (key 0x04): An integer expressing a number of milliseconds. If
present, the relay <bcp14>MUST NOT</bcp14> start forwarding any individual Object received
through this subscription after the specified number of milliseconds has elapsed
since the beginning of the Object was received.  This means Objects earlier
in a multi-object stream will expire earlier than Objects later in the stream.
Once Objects have expired, their state becomes unknown, and a relay that
handles a subscription that includes those Objects re-requests them.</t>
          </section>
        </section>
      </section>
      <section anchor="message-setup">
        <name>CLIENT_SETUP and SERVER_SETUP</name>
        <t>The <tt>CLIENT_SETUP</tt> and <tt>SERVER_SETUP</tt> messages are the first messages exchanged
by the client and the server; they allows the peers to establish the mutually
supported version and agree on the initial configuration before any objects are
exchanged. It is a sequence of key-value pairs called Setup parameters; the
semantics and format of which can vary based on whether the client or server is
sending.  To ensure future extensibility of MOQT, the peers <bcp14>MUST</bcp14> ignore unknown
setup parameters. TODO: describe GREASE for those.</t>
        <t>The wire format of the Setup messages are as follows:</t>
        <figure anchor="moq-transport-setup-format">
          <name>MOQT Setup Messages</name>
          <artwork><![CDATA[
CLIENT_SETUP Message {
  Type (i) = 0x40,
  Length (i),
  Number of Supported Versions (i),
  Supported Version (i) ...,
  Number of Parameters (i) ...,
  Setup Parameters (..) ...,
}

SERVER_SETUP Message {
  Type (i) = 0x41,
  Length (i),
  Selected Version (i),
  Number of Parameters (i) ...,
  Setup Parameters (..) ...,
}
]]></artwork>
        </figure>
        <t>The available versions and Setup parameters are detailed in the next sections.</t>
        <section anchor="setup-versions">
          <name>Versions</name>
          <t>MoQ Transport versions are a 32-bit unsigned integer, encoded as a varint.
This version of the specification is identified by the number 0x00000001.
Versions with the most significant 16 bits of the version number cleared are
reserved for use in future IETF consensus documents.</t>
          <t>The client offers the list of the protocol versions it supports; the
server <bcp14>MUST</bcp14> reply with one of the versions offered by the client. If the
server does not support any of the versions offered by the client, or
the client receives a server version that it did not offer, the
corresponding peer <bcp14>MUST</bcp14> close the session.</t>
          <t>[[RFC editor: please remove the remainder of this section before
publication.]]</t>
          <t>The version number for the final version of this specification (0x00000001), is
reserved for the version of the protocol that is published as an RFC.
Version numbers used to identify IETF drafts are created by adding the draft
number to 0xff000000. For example, draft-ietf-moq-transport-13 would be
identified as 0xff00000D.</t>
        </section>
        <section anchor="setup-params">
          <name>Setup Parameters</name>
          <section anchor="role">
            <name>ROLE</name>
            <t>The ROLE parameter (key 0x00) allows each endpoint to independently specify what
functionality they support for the session. It has three possible values,
which are of type varint:</t>
            <dl>
              <dt>0x01: Publisher</dt>
              <dd>
                <t>The endpoint can process subscriptions and send objects, but not subscribe.
The endpoint <bcp14>MUST NOT</bcp14> send a SUBSCRIBE message and an ANNOUNCE <bcp14>MUST NOT</bcp14> be
sent to it.</t>
              </dd>
              <dt>0x02: Subscriber</dt>
              <dd>
                <t>The endpoint can send subscriptions and receive objects, but not publish.
The endpoint <bcp14>MUST NOT</bcp14> send an ANNOUNCE message and a SUBSCRIBE <bcp14>MUST NOT</bcp14> be
sent to it.</t>
              </dd>
              <dt>0x03: PubSub</dt>
              <dd>
                <t>The endpoint can act as a publisher or subscriber, and can send or process
any message type.</t>
              </dd>
            </dl>
            <t>Both endpoints <bcp14>MUST</bcp14> send a ROLE parameter with one of the three values
specified above. Both endpoints <bcp14>MUST</bcp14> close the session if the ROLE
parameter is missing or is not one of the three above-specified values.</t>
          </section>
          <section anchor="path">
            <name>PATH</name>
            <t>The PATH parameter (key 0x01) allows the client to specify the path of
the MoQ URI when using native QUIC (<xref target="QUIC"/>).  It <bcp14>MUST NOT</bcp14> be used by
the server, or when WebTransport is used.  If the peer receives a PATH
parameter from the server, or when WebTransport is used, it <bcp14>MUST</bcp14> close
the connection. It follows the URI formatting rules <xref target="RFC3986"/>.</t>
            <t>When connecting to a server using a URI with the "moq" scheme, the
client <bcp14>MUST</bcp14> set the PATH parameter to the <tt>path-abempty</tt> portion of the
URI; if <tt>query</tt> is present, the client <bcp14>MUST</bcp14> concatenate <tt>?</tt>, followed by
the <tt>query</tt> portion of the URI to the parameter.</t>
          </section>
          <section anchor="max-subscribe-id">
            <name>MAX_SUBSCRIBE_ID</name>
            <t>The MAX_SUBSCRIBE_ID parameter (key 0x02) communicates an initial value for
the Maximum Subscribe ID to the receiving subscriber. The default value is 0,
so if not specified, the peer <bcp14>MUST NOT</bcp14> create subscriptions.</t>
          </section>
        </section>
      </section>
      <section anchor="message-goaway">
        <name>GOAWAY</name>
        <t>The server sends a <tt>GOAWAY</tt> message to initiate session migration
(<xref target="session-migration"/>) with an optional URI.</t>
        <t>The server <bcp14>MUST</bcp14> terminate the session with a Protocol Violation
(<xref target="session-termination"/>) if it receives a GOAWAY message. The client <bcp14>MUST</bcp14>
terminate the session with a Protocol Violation (<xref target="session-termination"/>) if it
receives multiple GOAWAY messages.</t>
        <figure anchor="moq-transport-goaway-format">
          <name>MOQT GOAWAY Message</name>
          <artwork><![CDATA[
GOAWAY Message {
  Type (i) = 0x10,
  Length (i),
  New Session URI Length (i),
  New Session URI (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>New Session URI: The client <bcp14>MUST</bcp14> use this URI for the new session if provided.
If the URI is zero bytes long, the current URI is reused instead. The new
session URI <bcp14>SHOULD</bcp14> use the same scheme as the current URL to ensure
compatibility.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-subscribe-req">
        <name>SUBSCRIBE</name>
        <t>A subscription causes the publisher to send newly published objects for a track.
A subscriber <bcp14>MUST NOT</bcp14> make multiple active subscriptions for a track within a
single session and publishers <bcp14>SHOULD</bcp14> treat this as a protocol violation.
The only objects prior to the current object that can be requested are those
in the current group.</t>
        <t><strong>Filter Types</strong></t>
        <t>The subscriber specifies a filter on the subscription to allow
the publisher to identify which objects need to be delivered.</t>
        <t>There are 4 types of filters:</t>
        <t>Latest Group (0x1) : Specifies an open-ended subscription with objects
from the beginning of the current group.  If no content has been delivered yet,
the subscription starts with the first published or received group.</t>
        <t>Latest Object (0x2): Specifies an open-ended subscription beginning from
the current object of the current group.  If no content has been delivered yet,
the subscription starts with the first published or received group.</t>
        <t>AbsoluteStart (0x3):  Specifies an open-ended subscription beginning
from the object identified in the StartGroup and StartObject fields. If the
StartGroup is prior to the current group, the publisher <bcp14>MUST</bcp14> reply with a
SUBSCRIBE_ERROR with code 'Invalid Range'.</t>
        <t>AbsoluteRange (0x4):  Specifies a closed subscription starting at StartObject
in StartGroup and ending at EndObject in EndGroup.  The start and end of the
range are inclusive.  EndGroup and EndObject <bcp14>MUST</bcp14> specify the same or a later
object than StartGroup and StartObject. If the StartGroup is prior
to the current group, the publisher <bcp14>MUST</bcp14> reply with a
SUBSCRIBE_ERROR with code 'Invalid Range'.</t>
        <t>A filter type other than the above <bcp14>MUST</bcp14> be treated as error.</t>
        <t>If a subscriber wants to subscribe to Objects both before and after
the Latest Object, it can send a SUBSCRIBE for the Latest Object
followed by a FETCH. Depending upon the application, one might want to send
both messages at the same time or wait for the first to return before sending
the second.</t>
        <t>The format of SUBSCRIBE is as follows:</t>
        <figure anchor="moq-transport-subscribe-format">
          <name>MOQT SUBSCRIBE Message</name>
          <artwork><![CDATA[
SUBSCRIBE Message {
  Type (i) = 0x3,
  Length (i),
  Subscribe ID (i),
  Track Alias (i),
  Track Namespace (tuple),
  Track Name Length (i),
  Track Name (..),
  Subscriber Priority (8),
  Group Order (8),
  Filter Type (i),
  [StartGroup (i),
   StartObject (i)],
  [EndGroup (i),
   EndObject (i)],
  Number of Parameters (i),
  Subscribe Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Subscribe ID: The subscriber specified identifier used to manage a
subscription. <tt>Subscribe ID</tt> is a variable length integer that <bcp14>MUST</bcp14> be
unique and monotonically increasing within a session and <bcp14>MUST</bcp14> be less
than the session's Maximum Subscribe ID.</t>
          </li>
          <li>
            <t>Track Alias: A session specific identifier for the track.
Messages that reference a track, such as OBJECT (<xref target="message-object"/>),
reference this Track Alias instead of the Track Name and Track Namespace to
reduce overhead. If the Track Alias is already being used for a different
track, the publisher <bcp14>MUST</bcp14> close the session with a Duplicate Track Alias
error (<xref target="session-termination"/>).</t>
          </li>
          <li>
            <t>Track Namespace: Identifies the namespace of the track as defined in
(<xref target="track-name"/>).</t>
          </li>
          <li>
            <t>Track Name: Identifies the track name as defined in (<xref target="track-name"/>).</t>
          </li>
          <li>
            <t>Subscriber Priority: Specifies the priority of a subscription relative to
other subscriptions in the same session. Lower numbers get higher priority.
See <xref target="priorities"/>.</t>
          </li>
          <li>
            <t>Group Order: Allows the subscriber to request Objects be delivered in
Ascending (0x1) or Descending (0x2) order by group. See <xref target="priorities"/>.
A value of 0x0 indicates the original publisher's Group Order <bcp14>SHOULD</bcp14> be
used. Values larger than 0x2 are a protocol error.</t>
          </li>
          <li>
            <t>Filter Type: Identifies the type of filter, which also indicates whether
the StartGroup/StartObject and EndGroup/EndObject fields will be present.</t>
          </li>
          <li>
            <t>StartGroup: The start Group ID. Only present for "AbsoluteStart" and
"AbsoluteRange" filter types.</t>
          </li>
          <li>
            <t>StartObject: The start Object ID. Only present for "AbsoluteStart" and
"AbsoluteRange" filter types.</t>
          </li>
          <li>
            <t>EndGroup: The end Group ID. Only present for the "AbsoluteRange" filter type.</t>
          </li>
          <li>
            <t>EndObject: The end Object ID, plus 1. A value of 0 means the entire group is
requested. Only present for the "AbsoluteRange" filter type.</t>
          </li>
          <li>
            <t>Subscribe Parameters: The parameters are defined in <xref target="version-specific-params"/>.</t>
          </li>
        </ul>
        <t>On successful subscription, the publisher <bcp14>MUST</bcp14> reply with a SUBSCRIBE_OK,
allowing the subscriber to determine the start group/object when not explicitly
specified and the publisher <bcp14>SHOULD</bcp14> start delivering objects.</t>
        <t>If a publisher cannot satisfy the requested start or end or if the end has
already been published it <bcp14>SHOULD</bcp14> send a SUBSCRIBE_ERROR with code 'Invalid Range'.
A publisher <bcp14>MUST NOT</bcp14> send objects from outside the requested start and end.</t>
      </section>
      <section anchor="message-subscribe-update-req">
        <name>SUBSCRIBE_UPDATE</name>
        <t>A subscriber issues a SUBSCRIBE_UPDATE to a publisher to request a change to
a prior subscription.  Subscriptions can only become more narrower, not wider,
because an attempt to widen a subscription could fail.  If Objects before the
start or after the end of the current subscription are needed, a separate
subscription can be made. The start Object <bcp14>MUST NOT</bcp14> decrease and when it increases,
there is no guarantee that a publisher will not have already sent Objects before
the new start Object.  The end Object <bcp14>MUST NOT</bcp14> increase and when it decreases,
there is no guarantee that a publisher will not have already sent Objects after
the new end Object. A publisher <bcp14>SHOULD</bcp14> close the Session as a 'Protocol Violation'
if the SUBSCRIBE_UPDATE violates either rule or if the subscriber specifies a
Subscribe ID that does not exist within the Session.</t>
        <t>Unlike a new subscription, SUBSCRIBE_UPDATE can not cause an Object to be
delivered multiple times.  Like SUBSCRIBE, EndGroup and EndObject <bcp14>MUST</bcp14> specify the
same or a later object than StartGroup and StartObject.</t>
        <t>The format of SUBSCRIBE_UPDATE is as follows:</t>
        <figure anchor="moq-transport-subscribe-update-format">
          <name>MOQT SUBSCRIBE_UPDATE Message</name>
          <artwork><![CDATA[
SUBSCRIBE_UPDATE Message {
  Type (i) = 0x2,
  Length (i),
  Subscribe ID (i),
  StartGroup (i),
  StartObject (i),
  EndGroup (i),
  EndObject (i),
  Subscriber Priority (8),
  Number of Parameters (i),
  Subscribe Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Subscribe ID: The subscription identifier that is unique within the session.
This <bcp14>MUST</bcp14> match an existing Subscribe ID.</t>
          </li>
          <li>
            <t>StartGroup: The start Group ID.</t>
          </li>
          <li>
            <t>StartObject: The start Object ID.</t>
          </li>
          <li>
            <t>EndGroup: The end Group ID, plus 1. A value of 0 means the subscription is
open-ended.</t>
          </li>
          <li>
            <t>EndObject: The end Object ID, plus 1. A value of 0 means the entire group is
requested.</t>
          </li>
          <li>
            <t>Subscriber Priority: Specifies the priority of a subscription relative to
other subscriptions in the same session. Lower numbers get higher priority.
See <xref target="priorities"/>.</t>
          </li>
          <li>
            <t>Subscribe Parameters: The parameters are defined in <xref target="version-specific-params"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-unsubscribe">
        <name>UNSUBSCRIBE</name>
        <t>A subscriber issues a <tt>UNSUBSCRIBE</tt> message to a publisher indicating it is no
longer interested in receiving media for the specified track and Objects
should stop being sent as soon as possible.  The publisher sends a
SUBSCRIBE_DONE to acknowledge the unsubscribe was successful and indicate
the final Object.</t>
        <t>The format of <tt>UNSUBSCRIBE</tt> is as follows:</t>
        <figure anchor="moq-transport-unsubscribe-format">
          <name>MOQT UNSUBSCRIBE Message</name>
          <artwork><![CDATA[
UNSUBSCRIBE Message {
  Type (i) = 0xA,
  Length (i),
  Subscribe ID (i)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Subscribe ID: Subscription Identifier as defined in <xref target="message-subscribe-req"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-fetch">
        <name>FETCH</name>
        <t>A subscriber issues a FETCH to a publisher to request a range of already published
objects within a track. The publisher responding to a FETCH is responsible for retrieving
all available Objects. If there are gaps between Objects, the publisher omits them from the
fetch response. All omitted objects have status Object Not Available.</t>
        <t>A publisher responds to a FETCH request with either a FETCH_OK or a FETCH_ERROR
message.  If it responds with FETCH_OK, the publisher creates a new unidirectional
stream that is used to send the Objects.  A relay <bcp14>MAY</bcp14> start sending objects immediately
in response to a FETCH, even if sending the FETCH_OK takes longer because it requires
going upstream to populate the latest object.</t>
        <t>The Object Forwarding Preference does not apply to fetches.</t>
        <t>Fetch specifies an inclusive range of Objects starting at StartObject
in StartGroup and ending at EndObject in EndGroup. EndGroup and EndObject <bcp14>MUST</bcp14>
specify the same or a later object than StartGroup and StartObject.</t>
        <t>The format of FETCH is as follows:</t>
        <figure anchor="moq-transport-fetch-format">
          <name>MOQT FETCH Message</name>
          <artwork><![CDATA[
FETCH Message {
  Type (i) = 0x16,
  Length (i),
  Subscribe ID (i),
  Track Namespace (tuple),
  Track Name Length (i),
  Track Name (..),
  Subscriber Priority (8),
  Group Order (8),
  StartGroup (i),
  StartObject (i),
  EndGroup (i),
  EndObject (i),
  Number of Parameters (i),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Subscribe ID: The Subscribe ID identifies a given fetch request. Subscribe ID
is a variable length integer that <bcp14>MUST</bcp14> be unique and monotonically increasing
within  a session.</t>
          </li>
          <li>
            <t>Track Namespace: Identifies the namespace of the track as defined in
(<xref target="track-name"/>).</t>
          </li>
          <li>
            <t>Track Name: Identifies the track name as defined in (<xref target="track-name"/>).</t>
          </li>
          <li>
            <t>Subscriber Priority: Specifies the priority of a fetch request relative to
other subscriptions or fetches in the same session. Lower numbers get higher
priority. See <xref target="priorities"/>.</t>
          </li>
          <li>
            <t>Group Order: Allows the subscriber to request Objects be delivered in
Ascending (0x1) or Descending (0x2) order by group. See <xref target="priorities"/>.
A value of 0x0 indicates the original publisher's Group Order <bcp14>SHOULD</bcp14> be
used. Values larger than 0x2 are a protocol error.</t>
          </li>
          <li>
            <t>StartGroup: The start Group ID.</t>
          </li>
          <li>
            <t>StartObject: The start Object ID.</t>
          </li>
          <li>
            <t>EndGroup: The end Group ID.</t>
          </li>
          <li>
            <t>EndObject: The end Object ID, plus 1. A value of 0 means the entire group is
requested.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="version-specific-params"/>.</t>
          </li>
        </ul>
        <t>Objects that are not yet published will not be retrieved by a FETCH.
The latest available Object is indicated in the FETCH_OK, and is the last
Object a fetch will return if the EndGroup and EndObject have not yet been
published.</t>
        <t>A publisher <bcp14>MUST</bcp14> send fetched groups in the determined group order, either
ascending or descending. Within each group, objects are sent in Object ID order;
subgroup ID is not used for ordering.</t>
        <t>If StartGroup/StartObject is greater than the latest published Object group,
the publisher <bcp14>MUST</bcp14> return FETCH_ERROR with error code 'No Objects'.</t>
        <t>A publisher <bcp14>MUST</bcp14> send fetched groups in group order, either ascending or
descending. Within each group, objects are sent in Object ID order;
subgroup ID is not used for ordering.</t>
      </section>
      <section anchor="message-fetch-cancel">
        <name>FETCH_CANCEL</name>
        <t>A subscriber issues a <tt>FETCH_CANCEL</tt> message to a publisher indicating it is no
longer interested in receiving Objects for the fetch specified by 'Subscribe ID'.
The publisher <bcp14>SHOULD</bcp14> close the unidirectional stream as soon as possible.</t>
        <t>The format of <tt>FETCH_CANCEL</tt> is as follows:</t>
        <figure anchor="moq-transport-fetch-cancel">
          <name>MOQT FETCH_CANCEL Message</name>
          <artwork><![CDATA[
FETCH_CANCEL Message {
  Type (i) = 0x17,
  Length (i),
  Subscribe ID (i)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Subscribe ID: Subscription Identifier as defined in <xref target="message-fetch"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-announce-ok">
        <name>ANNOUNCE_OK</name>
        <t>The subscriber sends an ANNOUNCE_OK control message to acknowledge the
successful authorization and acceptance of an ANNOUNCE message.</t>
        <figure anchor="moq-transport-announce-ok">
          <name>MOQT ANNOUNCE_OK Message</name>
          <artwork><![CDATA[
ANNOUNCE_OK Message
{
  Type (i) = 0x7,
  Length (i),
  Track Namespace (tuple),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace: Identifies the track namespace in the ANNOUNCE
message for which this response is provided.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-announce-error">
        <name>ANNOUNCE_ERROR</name>
        <t>The subscriber sends an ANNOUNCE_ERROR control message for tracks that
failed authorization.</t>
        <figure anchor="moq-transport-announce-error">
          <name>MOQT ANNOUNCE_ERROR Message</name>
          <artwork><![CDATA[
ANNOUNCE_ERROR Message
{
  Type (i) = 0x8,
  Length (i),
  Track Namespace (tuple),
  Error Code (i),
  Reason Phrase Length (i),
  Reason Phrase (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace: Identifies the track namespace in the ANNOUNCE
message for which this response is provided.</t>
          </li>
          <li>
            <t>Error Code: Identifies an integer error code for announcement failure.</t>
          </li>
          <li>
            <t>Reason Phrase: Provides the reason for announcement error.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-announce-cancel">
        <name>ANNOUNCE_CANCEL</name>
        <t>The subscriber sends an <tt>ANNOUNCE_CANCEL</tt> control message to
indicate it will stop sending new subscriptions for tracks
within the provided Track Namespace.</t>
        <t>If a publisher receives new subscriptions for that namespace after
receiving an ANNOUNCE_CANCEL, it <bcp14>SHOULD</bcp14> close the session as a
'Protocol Violation'.</t>
        <figure anchor="moq-transport-announce-cancel-format">
          <name>MOQT ANNOUNCE_CANCEL Message</name>
          <artwork><![CDATA[
ANNOUNCE_CANCEL Message {
  Type (i) = 0xC,
  Length (i),
  Track Namespace (tuple),
  Error Code (i),
  Reason Phrase Length (i),
  Reason Phrase Length (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace: Identifies a track's namespace as defined in
(<xref target="track-name"/>).</t>
          </li>
          <li>
            <t>Error Code: Identifies an integer error code for canceling the announcement.</t>
          </li>
          <li>
            <t>Reason Phrase: Provides the reason for announcement cancelation.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-track-status-req">
        <name>TRACK_STATUS_REQUEST</name>
        <t>A potential subscriber sends a 'TRACK_STATUS_REQUEST' message on the control
stream to obtain information about the current status of a given track.</t>
        <t>A TRACK_STATUS message <bcp14>MUST</bcp14> be sent in response to each TRACK_STATUS_REQUEST.</t>
        <figure anchor="moq-track-status-request-format">
          <name>MOQT TRACK_STATUS_REQUEST Message</name>
          <artwork><![CDATA[
TRACK_STATUS_REQUEST Message {
  Type (i) = 0xD,
  Length (i),
  Track Namespace (tuple),
  Track Name Length (i),
  Track Name (..),
}
]]></artwork>
        </figure>
      </section>
      <section anchor="message-subscribe-ns">
        <name>SUBSCRIBE_ANNOUNCES</name>
        <t>The subscriber sends the SUBSCRIBE_ANNOUNCES control message to a publisher
to request the current set of matching announcements, as well as future updates
to the set.</t>
        <figure anchor="moq-transport-subscribe-ns-format">
          <name>MOQT SUBSCRIBE_ANNOUNCES Message</name>
          <artwork><![CDATA[
SUBSCRIBE_ANNOUNCES Message {
  Type (i) = 0x11,
  Length (i),
  Track Namespace Prefix (tuple),
  Number of Parameters (i),
  Parameters (..) ...,
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace Prefix: An ordered N-Tuple of byte fields which are matched
against track namespaces known to the publisher.  For example, if the publisher
is a relay that has received ANNOUNCE messages for namespaces ("example.com",
"meeting=123", "participant=100") and ("example.com", "meeting=123",
"participant=200"), a SUBSCRIBE_ANNOUNCES for ("example.com", "meeting=123")
would match both.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="version-specific-params"/>.</t>
          </li>
        </ul>
        <t>The publisher will respond with SUBSCRIBE_ANNOUNCES_OK or
SUBSCRIBE_ANNOUNCES_ERROR.  If the SUBSCRIBE_ANNOUNCES is successful,
the publisher will forward any matching ANNOUNCE messages to the subscriber
that it has not yet sent.  If the set of matching ANNOUNCE messages changes, the
publisher sends the corresponding ANNOUNCE or UNANNOUNCE message.</t>
        <t>A subscriber cannot make overlapping namespace subscriptions on a single
session.  Within a session, if a publisher receives a SUBSCRIBE_ANNOUNCES
with a Track Namespace Prefix that is a prefix of an earlier
SUBSCRIBE_ANNOUNCES or vice versa, it <bcp14>MUST</bcp14> respond with
SUBSCRIBE_ANNOUNCES_ERROR, with error code SUBSCRIBE_ANNOUNCES_OVERLAP.</t>
        <t>The publisher <bcp14>MUST</bcp14> ensure the subscriber is authorized to perform this
namespace subscription.</t>
        <t>SUBSCRIBE_ANNOUNCES is not required for a publisher to send ANNOUNCE and
UNANNOUNCE messages to a subscriber.  It is useful in applications or relays
where subscribers are only interested in or authorized to access a subset of
available announcements.</t>
      </section>
      <section anchor="message-unsub-ann">
        <name>UNSUBSCRIBE_ANNOUNCES</name>
        <t>A subscriber issues a <tt>UNSUBSCRIBE_ANNOUNCES</tt> message to a publisher
indicating it is no longer interested in ANNOUNCE and UNANNOUNCE messages for
the specified track namespace prefix.</t>
        <t>The format of <tt>UNSUBSCRIBE_ANNOUNCES</tt> is as follows:</t>
        <figure anchor="moq-transport-unsub-ann-format">
          <name>MOQT UNSUBSCRIBE Message</name>
          <artwork><![CDATA[
UNSUBSCRIBE_ANNOUNCES Message {
  Type (i) = 0x14,
  Length (i),
  Track Namespace Prefix (tuple)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace Prefix: As defined in <xref target="message-subscribe-ns"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-subscribe-ok">
        <name>SUBSCRIBE_OK</name>
        <t>A publisher sends a SUBSCRIBE_OK control message for successful
subscriptions.</t>
        <figure anchor="moq-transport-subscribe-ok">
          <name>MOQT SUBSCRIBE_OK Message</name>
          <artwork><![CDATA[
SUBSCRIBE_OK
{
  Type (i) = 0x4,
  Length (i),
  Subscribe ID (i),
  Expires (i),
  Group Order (8),
  ContentExists (8),
  [Largest Group ID (i)],
  [Largest Object ID (i)],
  Number of Parameters (i),
  Subscribe Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Subscribe ID: Subscription Identifier as defined in <xref target="message-subscribe-req"/>.</t>
          </li>
          <li>
            <t>Expires: Time in milliseconds after which the subscription is no
longer valid. A value of 0 indicates that the subscription does not expire
or expires at an unknown time.  Expires is advisory and a subscription can
end prior to the expiry time or last longer.</t>
          </li>
          <li>
            <t>Group Order: Indicates the subscription will be delivered in
Ascending (0x1) or Descending (0x2) order by group. See <xref target="priorities"/>.
Values of 0x0 and those larger than 0x2 are a protocol error.</t>
          </li>
          <li>
            <t>ContentExists: 1 if an object has been published on this track, 0 if not.
If 0, then the Largest Group ID and Largest Object ID fields will not be
present. Any other value is a protocol error and <bcp14>MUST</bcp14> terminate the
session with a Protocol Violation (<xref target="session-termination"/>).</t>
          </li>
          <li>
            <t>Largest Group ID: The largest Group ID available for this track. This field
is only present if ContentExists has a value of 1.</t>
          </li>
          <li>
            <t>Largest Object ID: The largest Object ID available within the largest Group ID
for this track. This field is only present if ContentExists has a value of 1.</t>
          </li>
          <li>
            <t>Subscribe Parameters: The parameters are defined in <xref target="version-specific-params"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-subscribe-error">
        <name>SUBSCRIBE_ERROR</name>
        <t>A publisher sends a SUBSCRIBE_ERROR control message in response to a
failed SUBSCRIBE.</t>
        <figure anchor="moq-transport-subscribe-error">
          <name>MOQT SUBSCRIBE_ERROR Message</name>
          <artwork><![CDATA[
SUBSCRIBE_ERROR
{
  Type (i) = 0x5,
  Length (i),
  Subscribe ID (i),
  Error Code (i),
  Reason Phrase Length (i),
  Reason Phrase (..),
  Track Alias (i),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Subscribe ID: Subscription Identifier as defined in <xref target="message-subscribe-req"/>.</t>
          </li>
          <li>
            <t>Error Code: Identifies an integer error code for subscription failure.</t>
          </li>
          <li>
            <t>Reason Phrase: Provides the reason for subscription error.</t>
          </li>
          <li>
            <t>Track Alias: When Error Code is 'Retry Track Alias', the subscriber <bcp14>SHOULD</bcp14> re-issue the
SUBSCRIBE with this Track Alias instead. If this Track Alias is already in use,
the subscriber <bcp14>MUST</bcp14> close the connection with a Duplicate Track Alias error
(<xref target="session-termination"/>).</t>
          </li>
        </ul>
      </section>
      <section anchor="message-fetch-ok">
        <name>FETCH_OK</name>
        <t>A publisher sends a FETCH_OK control message in response to successful fetches.
A publisher <bcp14>MAY</bcp14> send Objects in response to a FETCH before the FETCH_OK message is sent,
but the FETCH_OK <bcp14>MUST NOT</bcp14> be sent until the latest group and object are known.</t>
        <figure anchor="moq-transport-fetch-ok">
          <name>MOQT FETCH_OK Message</name>
          <artwork><![CDATA[
FETCH_OK
{
  Type (i) = 0x18,
  Length (i),
  Subscribe ID (i),
  Group Order (8),
  End Of Track (8),
  Largest Group ID (i),
  Largest Object ID (i),
  Number of Parameters (i),
  Subscribe Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Subscribe ID: Fetch Identifier as defined in <xref target="message-fetch"/>.</t>
          </li>
          <li>
            <t>Group Order: Indicates the fetch will be delivered in
Ascending (0x1) or Descending (0x2) order by group. See <xref target="priorities"/>.
Values of 0x0 and those larger than 0x2 are a protocol error.</t>
          </li>
          <li>
            <t>End Of Track: 1 if all objects have been published on this track, so
the Largest Group ID and Object Id indicate the last Object in the track,
0 if not.</t>
          </li>
          <li>
            <t>Largest Group ID: The largest Group ID available for this track. This field
is only present if ContentExists has a value of 1.</t>
          </li>
          <li>
            <t>Largest Object ID: The largest Object ID available within the largest Group ID
for this track. This field is only present if ContentExists has a value of 1.</t>
          </li>
          <li>
            <t>Subscribe Parameters: The parameters are defined in <xref target="version-specific-params"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-fetch-error">
        <name>FETCH_ERROR</name>
        <t>A publisher sends a FETCH_ERROR control message in response to a
failed FETCH.</t>
        <figure anchor="moq-transport-fetch-error">
          <name>MOQT FETCH_ERROR Message</name>
          <artwork><![CDATA[
FETCH_ERROR
{
  Type (i) = 0x19,
  Length (i),
  Subscribe ID (i),
  Error Code (i),
  Reason Phrase Length (i),
  Reason Phrase (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Subscribe ID: Subscription Identifier as defined in <xref target="message-subscribe-req"/>.</t>
          </li>
          <li>
            <t>Error Code: Identifies an integer error code for fetch failure.</t>
          </li>
          <li>
            <t>Reason Phrase: Provides the reason for fetch error.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-subscribe-done">
        <name>SUBSCRIBE_DONE</name>
        <t>A publisher sends a <tt>SUBSCRIBE_DONE</tt> message to indicate it is done publishing
Objects for that subscription.  The Status Code indicates why the subscription ended,
and whether it was an error.</t>
        <t>The format of <tt>SUBSCRIBE_DONE</tt> is as follows:</t>
        <figure anchor="moq-transport-subscribe-fin-format">
          <name>MOQT SUBSCRIBE_DONE Message</name>
          <artwork><![CDATA[
SUBSCRIBE_DONE Message {
  Type (i) = 0xB,
  Length (i),
  Subscribe ID (i),
  Status Code (i),
  Reason Phrase Length (i),
  Reason Phrase (..),
  ContentExists (8),
  [Final Group (i)],
  [Final Object (i)],
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Subscribe ID: Subscription identifier as defined in <xref target="message-subscribe-req"/>.</t>
          </li>
          <li>
            <t>Status Code: An integer status code indicating why the subscription ended.</t>
          </li>
          <li>
            <t>Reason Phrase: Provides the reason for subscription error.</t>
          </li>
          <li>
            <t>ContentExists: 1 if an object has been published for this subscription, 0 if
not. If 0, then the Final Group and Final Object fields will not be present.
Any other value is a protocol error and <bcp14>MUST</bcp14> terminate the session with a
Protocol Violation (<xref target="session-termination"/>).</t>
          </li>
          <li>
            <t>Final Group: The largest Group ID sent by the publisher in an OBJECT
message in this track.</t>
          </li>
          <li>
            <t>Final Object: The largest Object ID sent by the publisher in an OBJECT
message in the <tt>Final Group</tt> for this track.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-max-subscribe-id">
        <name>MAX_SUBSCRIBE_ID</name>
        <t>A publisher sends a MAX_SUBSCRIBE_ID message to increase the number of
subscriptions a subscriber can create within a session.</t>
        <t>The Maximum Subscribe Id <bcp14>MUST</bcp14> only increase within a session, and
receipt of a MAX_SUBSCRIBE_ID message with an equal or smaller Subscribe ID
value is a 'Protocol Violation'.</t>
        <figure anchor="moq-transport-max-subscribe-id">
          <name>MOQT MAX_SUBSCRIBE_ID Message</name>
          <artwork><![CDATA[
MAX_SUBSCRIBE_ID
{
  Type (i) = 0x15,
  Length (i),
  Subscribe ID (i),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Subscribe ID: The new Maximum Subscribe ID for the session. If a Subscribe ID
equal or larger than this is received in any message, including SUBSCRIBE,
the publisher <bcp14>MUST</bcp14> close the session with an error of 'Too Many Subscribes'.
More on Subscribe ID in <xref target="message-subscribe-req"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-announce">
        <name>ANNOUNCE</name>
        <t>The publisher sends the ANNOUNCE control message to advertise where the
receiver can route SUBSCRIBEs for tracks within the announced
Track Namespace. The receiver verifies the publisher is authorized to
publish tracks under this namespace.</t>
        <figure anchor="moq-transport-announce-format">
          <name>MOQT ANNOUNCE Message</name>
          <artwork><![CDATA[
ANNOUNCE Message {
  Type (i) = 0x6,
  Length (i),
  Track Namespace (tuple),
  Number of Parameters (i),
  Parameters (..) ...,
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace: Identifies a track's namespace as defined in
(<xref target="track-name"/>)</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="version-specific-params"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-unannounce">
        <name>UNANNOUNCE</name>
        <t>The publisher sends the <tt>UNANNOUNCE</tt> control message to indicate
its intent to stop serving new subscriptions for tracks
within the provided Track Namespace.</t>
        <figure anchor="moq-transport-unannounce-format">
          <name>MOQT UNANNOUNCE Message</name>
          <artwork><![CDATA[
UNANNOUNCE Message {
  Type (i) = 0x9,
  Length (i),
  Track Namespace (tuple),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace: Identifies a track's namespace as defined in
(<xref target="track-name"/>).</t>
          </li>
        </ul>
      </section>
      <section anchor="message-track-status">
        <name>TRACK_STATUS</name>
        <t>A publisher sends a 'TRACK_STATUS' message on the control stream in response
to a TRACK_STATUS_REQUEST message.</t>
        <figure anchor="moq-track-status-format">
          <name>MOQT TRACK_STATUS Message</name>
          <artwork><![CDATA[
TRACK_STATUS Message {
  Type (i) = 0xE,
  Length (i),
  Track Namespace (tuple),
  Track Name Length(i),
  Track Name (..),
  Status Code (i),
  Last Group ID (i),
  Last Object ID (i),
}
]]></artwork>
        </figure>
        <t>The 'Status Code' field provides additional information about the status of the
track. It <bcp14>MUST</bcp14> hold one of the following values. Any other value is a malformed
message.</t>
        <t>0x00: The track is in progress, and subsequent fields contain the highest group
and object ID for that track.</t>
        <t>0x01: The track does not exist. Subsequent fields <bcp14>MUST</bcp14> be zero, and any other
value is a malformed message.</t>
        <t>0x02: The track has not yet begun. Subsequent fields <bcp14>MUST</bcp14> be zero. Any other
value is a malformed message.</t>
        <t>0x03: The track has finished, so there is no "live edge." Subsequent fields
contain the highest Group and object ID known.</t>
        <t>0x04: The publisher is a relay that cannot obtain the current track status from
upstream. Subsequent fields contain the largest group and object ID known.</t>
        <t>Any other value in the Status Code field is a malformed message.</t>
        <t>When a relay is subscribed to a track, it can simply return the highest group
and object ID it has observed, whether or not that object was cached or
completely delivered. If not subscribed, a relay <bcp14>SHOULD</bcp14> send a
TRACK_STATUS_REQUEST upstream to obtain updated information.</t>
        <t>Alternatively, the relay <bcp14>MAY</bcp14> subscribe to the track to obtain the same
information.</t>
        <t>If a relay cannot or will not do either, it should return its best available
information with status code 0x04.</t>
        <t>The receiver of multiple TRACK_STATUS messages for a track uses the information
from the latest arriving message, as they are delivered in order on a single
stream.</t>
      </section>
      <section anchor="message-sub-ann-ok">
        <name>SUBSCRIBE_ANNOUNCES_OK</name>
        <t>A publisher sends a SUBSCRIBE_ANNOUNCES_OK control message for successful
namespace subscriptions.</t>
        <figure anchor="moq-transport-sub-ann-ok">
          <name>MOQT SUBSCRIBE_ANNOUNCES_OK Message</name>
          <artwork><![CDATA[
SUBSCRIBE_ANNOUNCES_OK
{
  Type (i) = 0x12,
  Length (i),
  Track Namespace Prefix (tuple),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace Prefix: As defined in <xref target="message-subscribe-ns"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-sub-ann-error">
        <name>SUBSCRIBE_ANNOUNCES_ERROR</name>
        <t>A publisher sends a SUBSCRIBE_ANNOUNCES_ERROR control message in response to
a failed SUBSCRIBE_ANNOUNCES.</t>
        <figure anchor="moq-transport-sub-ann-error">
          <name>MOQT SUBSCRIBE_ANNOUNCES_ERROR Message</name>
          <artwork><![CDATA[
SUBSCRIBE_ANNOUNCES_ERROR
{
  Type (i) = 0x13,
  Length (i),
  Track Namespace Prefix (tuple),
  Error Code (i),
  Reason Phrase Length (i),
  Reason Phrase (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace Prefix: As defined in <xref target="message-subscribe-ns"/>.</t>
          </li>
          <li>
            <t>Error Code: Identifies an integer error code for the namespace subscription
failure.</t>
          </li>
          <li>
            <t>Reason Phrase: Provides the reason for the namespace subscription error.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="data-streams">
      <name>Data Streams</name>
      <t>A publisher sends Objects matching a subscription on Data Streams.</t>
      <t>All unidirectional MOQT streams, as well as all datagrams, start with a
variable-length integer indicating the type of the stream in question.</t>
      <table>
        <thead>
          <tr>
            <th align="right">ID</th>
            <th align="left">Stream Type</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="right">0x1</td>
            <td align="left">OBJECT_DATAGRAM (<xref target="object-datagram"/>)</td>
          </tr>
          <tr>
            <td align="right">0x4</td>
            <td align="left">STREAM_HEADER_SUBGROUP  (<xref target="stream-header-subgroup"/>)</td>
          </tr>
          <tr>
            <td align="right">0x5</td>
            <td align="left">FETCH_HEADER  (<xref target="fetch-header"/>)</td>
          </tr>
        </tbody>
      </table>
      <t>An endpoint that receives an unknown stream type <bcp14>MUST</bcp14> close the session.</t>
      <t>Every Track has a single 'Object Forwarding Preference' and the Original
Publisher <bcp14>MUST NOT</bcp14> mix different forwarding preferences within a single track.
If a subscriber receives different forwarding preferences for a track, it
<bcp14>SHOULD</bcp14> close the session with an error of 'Protocol Violation'.</t>
      <section anchor="message-object">
        <name>Object Headers</name>
        <t>An OBJECT message contains a range of contiguous bytes from from the
specified track, as well as associated metadata required to deliver,
cache, and forward it.  Objects are sent by publishers.</t>
        <section anchor="object-fields">
          <name>Canonical Object Fields</name>
          <t>A canonical MoQ Object has the following information:</t>
          <ul spacing="normal">
            <li>
              <t>Track Namespace and Track Name: The track this object belongs to.</t>
            </li>
            <li>
              <t>Group ID: The object is a member of the indicated group ID
<xref target="model-group"/> within the track.</t>
            </li>
            <li>
              <t>Object ID: The order of the object within the group.  The
IDs starts at 0, increasing sequentially for each object within the
group.</t>
            </li>
            <li>
              <t>Publisher Priority: An 8 bit integer indicating the publisher's priority for
the Object <xref target="priorities"/>.</t>
            </li>
            <li>
              <t>Object Forwarding Preference: An enumeration indicating how a publisher sends
an object. The preferences are Track, Subgroup, and Datagram.  An Object
<bcp14>MUST</bcp14> be sent according to its <tt>Object Forwarding Preference</tt>, described below.</t>
            </li>
            <li>
              <t>Subgroup ID: The object is a member of the indicated subgroup ID (<xref target="model-subgroup"/>)
within the group. This field is omitted if the Object Forwarding Preference is
Track or Datagram.</t>
            </li>
            <li>
              <t>Object Status: As enumeration used to indicate missing
objects or mark the end of a group or track. See <xref target="object-status"/> below.</t>
            </li>
            <li>
              <t>Object Payload: An opaque payload intended for an End Subscriber and <bcp14>SHOULD
NOT</bcp14> be processed by a relay. Only present when 'Object Status' is Normal (0x0).</t>
            </li>
          </ul>
          <section anchor="object-status">
            <name>Object Status</name>
            <t>The Object Status informs subscribers what objects will not be received
because they were never produced, are no longer available, or because they
are beyond the end of a group or track.</t>
            <t><tt>Status</tt> can have following values:</t>
            <ul spacing="normal">
              <li>
                <t>0x0 := Normal object. The payload is array of bytes and can be empty.</t>
              </li>
              <li>
                <t>0x1 := Indicates Object does not exist. Indicates that this object
       does not exist at any publisher and it will not be published in
       the future. This <bcp14>SHOULD</bcp14> be cached.</t>
              </li>
              <li>
                <t>0x3 := Indicates end of Group. ObjectId is one greater that the
       largest object produced in the group identified by the
       GroupID. This is sent right after the last object in the
       group. If the ObjectID is 0, it indicates there are no Objects
       in this Group. This <bcp14>SHOULD</bcp14> be cached. A publisher <bcp14>MAY</bcp14> use an end of
       Group object to signal the end of all open Subgroups in a Group.</t>
              </li>
              <li>
                <t>0x4 := Indicates end of Track and Group. GroupID is one greater than
       the largest group produced in this track and the ObjectId is
       one greater than the largest object produced in that
       group. This is sent right after the last object in the
       track. This <bcp14>SHOULD</bcp14> be cached.</t>
              </li>
              <li>
                <t>0x5 := Indicates end of Subgroup. Object ID is one greater than the largest
       normal object ID in the Subgroup.</t>
              </li>
            </ul>
            <t>Any other value <bcp14>SHOULD</bcp14> be treated as a protocol error and terminate the
session with a Protocol Violation (<xref target="session-termination"/>).
Any object with a status code other than zero <bcp14>MUST</bcp14> have an empty payload.</t>
            <t>Though some status information could be inferred from QUIC stream state,
that information is not reliable and cacheable.</t>
          </section>
        </section>
      </section>
      <section anchor="object-datagram">
        <name>Object Datagram Message</name>
        <t>An <tt>OBJECT_DATAGRAM</tt> message carries a single object in a datagram.</t>
        <t>An Object received in an <tt>OBJECT_DATAGRAM</tt> message has an <tt>Object
Forwarding Preference</tt> = <tt>Datagram</tt>. To send an Object with <tt>Object
Forwarding Preference</tt> = <tt>Datagram</tt>, determine the length of the header and
payload and send the Object as datagram. In certain scenarios where the object
size can be larger than maximum datagram size for the session, the Object
will be dropped.</t>
        <figure anchor="object-datagram-format">
          <name>MOQT OBJECT_DATAGRAM Message</name>
          <artwork><![CDATA[
OBJECT_DATAGRAM Message {
  Track Alias (i),
  Group ID (i),
  Object ID (i),
  Publisher Priority (8),
  Object Payload Length (i),
  [Object Status (i)],
  Object Payload (..),
}
]]></artwork>
        </figure>
      </section>
      <section anchor="streams">
        <name>Streams</name>
        <t>When objects are sent on streams, the stream begins with a stream header
message and is followed by one or more sets of serialized object fields.
If a stream ends gracefully in the middle of a serialized Object, terminate the
session with a Protocol Violation.</t>
        <t>A publisher <bcp14>SHOULD NOT</bcp14> open more than one stream at a time with the same stream
header message type and fields.</t>
        <t>TODO: figure out how a relay closes these streams</t>
        <section anchor="stream-header-subgroup">
          <name>Stream Header Subgroup</name>
          <t>When a stream begins with <tt>STREAM_HEADER_SUBGROUP</tt>, all objects on the stream
belong to the track requested in the Subscribe message identified by <tt>Subscribe
ID</tt> and the subgroup indicated by 'Group ID' and <tt>Subgroup ID</tt>.</t>
          <figure anchor="stream-header-subgroup-format">
            <name>MOQT STREAM_HEADER_SUBGROUP Message</name>
            <artwork><![CDATA[
STREAM_HEADER_SUBGROUP Message {
  Track Alias (i),
  Group ID (i),
  Subgroup ID (i),
  Publisher Priority (8),
}
]]></artwork>
          </figure>
          <t>All Objects received on a stream opened with <tt>STREAM_HEADER_SUBGROUP</tt> have an
<tt>Object Forwarding Preference</tt> = <tt>Subgroup</tt>.</t>
          <t>To send an Object with <tt>Object Forwarding Preference</tt> = <tt>Subgroup</tt>, find the open
stream that is associated with the subscription, <tt>Group ID</tt> and <tt>Subgroup ID</tt>,
or open a new one and send the <tt>STREAM_HEADER_SUBGROUP</tt>. Then serialize the
following fields.</t>
          <t>The Object Status field is only sent if the Object Payload Length is zero.</t>
          <figure anchor="object-group-format">
            <name>MOQT Group Stream Object Fields</name>
            <artwork><![CDATA[
{
  Object ID (i),
  Object Payload Length (i),
  [Object Status (i)],
  Object Payload (..),
}
]]></artwork>
          </figure>
          <t>A publisher <bcp14>MUST NOT</bcp14> send an Object on a stream if its Object ID is less than a
previously sent Object ID within a given group in that stream.</t>
        </section>
        <section anchor="fetch-header">
          <name>Fetch Header</name>
          <t>When a stream begins with <tt>FETCH_HEADER</tt>, all objects on the stream belong to the
track requested in the Fetch message identified by <tt>Subscribe ID</tt>.</t>
          <figure anchor="fetch-header-format">
            <name>MOQT FETCH_HEADER Message</name>
            <artwork><![CDATA[
FETCH_HEADER Message {
  Subscribe ID (i),
}
]]></artwork>
          </figure>
          <t>Each object sent on a fetch stream after the FETCH_HEADER has the following format:</t>
          <figure anchor="object-fetch-format">
            <name>MOQT Fetch Object Fields</name>
            <artwork><![CDATA[
{
  Group ID (i),
  Subgroup ID (i),
  Object ID (i),
  Publisher Priority (8),
  Object Payload Length (i),
  [Object Status (i)],
  Object Payload (..),
}
]]></artwork>
          </figure>
          <t>The Object Status field is only sent if the Object Payload Length is zero.</t>
        </section>
      </section>
      <section anchor="examples">
        <name>Examples</name>
        <t>Sending a track on one stream:</t>
        <artwork><![CDATA[
STREAM_HEADER_TRACK {
  Track Alias = 1
  Publisher Priority = 0
}
{
  Group ID = 0
  Object ID = 0
  Object Payload Length = 4
  Payload = "abcd"
}
{
  Group ID = 1
  Object ID = 0
  Object Payload Length = 4
  Payload = "efgh"
}
]]></artwork>
        <t>Sending a subgroup on one stream:</t>
        <artwork><![CDATA[
Stream = 2

STREAM_HEADER_SUBGROUP {
  Track Alias = 2
  Group ID = 0
  Subgroup ID = 0
  Publisher Priority = 0
}
{
  Object ID = 0
  Object Payload Length = 4
  Payload = "abcd"
}
{
  Object ID = 1
  Object Payload Length = 4
  Payload = "efgh"
}
]]></artwork>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>TODO: Expand this section, including subscriptions.</t>
      <section anchor="resource-exhaustion">
        <name>Resource Exhaustion</name>
        <t>Live content requires significant bandwidth and resources.  Failure to
set limits will quickly cause resource exhaustion.</t>
        <t>MOQT uses stream limits and flow control to impose resource limits at
the network layer.  Endpoints <bcp14>SHOULD</bcp14> set flow control limits based on the
anticipated bitrate.</t>
        <t>Endpoints <bcp14>MAY</bcp14> impose a MAX STREAM count limit which would restrict the
number of concurrent streams which a MOQT Streaming Format could have in
flight.</t>
        <t>The publisher prioritizes and transmits streams out of order.  Streams
might be starved indefinitely during congestion.  The publisher and
subscriber <bcp14>MUST</bcp14> cancel a stream, preferably the lowest priority, after
reaching a resource limit.</t>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>TODO: fill out currently missing registries:</t>
      <ul spacing="normal">
        <li>
          <t>MOQT version numbers</t>
        </li>
        <li>
          <t>Setup parameters</t>
        </li>
        <li>
          <t>Subscribe parameters</t>
        </li>
        <li>
          <t>Subscribe Error codes</t>
        </li>
        <li>
          <t>Subscribe Namespace Error codes</t>
        </li>
        <li>
          <t>Announce Error codes</t>
        </li>
        <li>
          <t>Announce Cancel Reason codes</t>
        </li>
        <li>
          <t>Message types</t>
        </li>
      </ul>
      <t>TODO: register the URI scheme and the ALPN</t>
    </section>
    <section numbered="false" anchor="contributors">
      <name>Contributors</name>
      <ul spacing="normal">
        <li>
          <t>Alan Frindell</t>
        </li>
        <li>
          <t>Ali Begen</t>
        </li>
        <li>
          <t>Charles Krasic</t>
        </li>
        <li>
          <t>Christian Huitema</t>
        </li>
        <li>
          <t>Cullen Jennings</t>
        </li>
        <li>
          <t>James Hurley</t>
        </li>
        <li>
          <t>Jordi Cenzano</t>
        </li>
        <li>
          <t>Mike English</t>
        </li>
        <li>
          <t>Mo Zanaty</t>
        </li>
        <li>
          <t>Will Law</t>
        </li>
      </ul>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="QUIC">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="WebTransport">
          <front>
            <title>WebTransport over HTTP/3</title>
            <author fullname="Alan Frindell" initials="A." surname="Frindell">
              <organization>Facebook</organization>
            </author>
            <author fullname="Eric Kinnear" initials="E." surname="Kinnear">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <date day="25" month="August" year="2024"/>
            <abstract>
              <t>   WebTransport [OVERVIEW] is a protocol framework that enables clients
   constrained by the Web security model to communicate with a remote
   server using a secure multiplexed transport.  This document describes
   a WebTransport protocol that is based on HTTP/3 [HTTP3] and provides
   support for unidirectional streams, bidirectional streams and
   datagrams, all multiplexed within the same HTTP/3 connection.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-http3-10"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC8615">
          <front>
            <title>Well-Known Uniform Resource Identifiers (URIs)</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="May" year="2019"/>
            <abstract>
              <t>This memo defines a path prefix for "well-known locations", "/.well-known/", in selected Uniform Resource Identifier (URI) schemes.</t>
              <t>In doing so, it obsoletes RFC 5785 and updates the URI schemes defined in RFC 7230 to reserve that space. It also updates RFC 7595 to track URI schemes that support well-known URIs in their registry.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8615"/>
          <seriesInfo name="DOI" value="10.17487/RFC8615"/>
        </reference>
        <reference anchor="RFC7301">
          <front>
            <title>Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension</title>
            <author fullname="S. Friedl" initials="S." surname="Friedl"/>
            <author fullname="A. Popov" initials="A." surname="Popov"/>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="E. Stephan" initials="E." surname="Stephan"/>
            <date month="July" year="2014"/>
            <abstract>
              <t>This document describes a Transport Layer Security (TLS) extension for application-layer protocol negotiation within the TLS handshake. For instances in which multiple application protocols are supported on the same TCP or UDP port, this extension allows the application layer to negotiate which protocol will be used within the TLS connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7301"/>
          <seriesInfo name="DOI" value="10.17487/RFC7301"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="I-D.ietf-webtrans-overview">
          <front>
            <title>The WebTransport Protocol Framework</title>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <date day="25" month="August" year="2024"/>
            <abstract>
              <t>   The WebTransport Protocol Framework enables clients constrained by
   the Web security model to communicate with a remote server using a
   secure multiplexed transport.  It consists of a set of individual
   protocols that are safe to expose to untrusted applications, combined
   with an abstract model that allows them to be used interchangeably.

   This document defines the overall requirements on the protocols used
   in WebTransport, as well as the common features of the protocols,
   support for some of which may be optional.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-overview-08"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+2963rcxrUg+r+eAkP/kOSvuyVKjmMz40lokpK5I5EKSdk7
4/gT0d0giVE30AHQohhZ51nOs5wnO+tatQoXXhQ6OzPf6JvZMdFAXVatWvfL
eDx2Td4ssq1k41U2z9OkfJ9VyV/e7O8kJ1Va1KuyajZcOp1W2futZFn+fdzo
YzcvZ0W6hE/nVXrWjPOsORtHb4yf/N7N0wbe+Li7fbL3yc3gj/OyutpK6mbu
XL6qtpKmWtfN0ydPvn3y1KVVlm4lycZP2TRJi3myXzRZVWSNXUu9ni7zus7L
4uRqBUPv7508d5dl9e68Ktcrv49D3ceGe5ddwe/zLZeMk2XY5N/X+cy9z4p1
Br8kg18nSUPzbPwEc+TFefIC38TnyzRfwHPY8p9w75OyOsfHaTW7gMcXTbOq
tx4/xrfwUf4+m+hrj/HB42lVXtbZY/j+MX53njcX6ykPOL48fxyBEl9YAPTq
xg5NL074w0lexp88HjqWyUWzXGw4VzcA47fpoixge1dZ7eplWjVv/74uYZ6t
pCjdKt9Kfm7K2Sip4bsqO6vhv66W/B9w/Mt0tQKQ/OJcum4uygoBOYb/nyR5
ASO8nCQ762qRXdEjxpWX63eZfQrQSIv8H2kDB7qV7Ob1DI6KfskYvu/yDxnu
fP6nc3wwmZVLF0/z50nyen2eF2aWP+dVvliYx/E0r7ImtXPk7/LqT0t42DP6
8SQ5ADil79YAHTPF8foirds/xdPs4G7sPHXBr/9phr/0TPbjJPkxrfNFnr03
U/2Yz5qyin+JZ3pRlueLzE71Hl9+//5P5/RLz1T7k+T4MmsaM89+WphnN82Q
Azrhy3YK/LkqkZzANYI1O1eU1RKGeE+XDG/UVnL0fOfbJ0+ewN9wz/3NhunH
u3RDxpfZlJB1jIj+DOhEcRZGcePxOEmnNbwxa5w7uchrRMX1MiuaZJ6d5UVW
J81FlgAiZck0u0jf5wA8GCEZpHDu4avDv5w8GiWpEAh/V5JVVcIFKBcwdJ2f
F9k8acqkXGUVoKQZCs7V2d2MksuLfHaRwOxZUudLpAHJ2bqYITTTRd5cTRKc
M0kXC6ACMDFMNF/PYLzyzMkiymS1ni7y+iIBKpoSRaTx8gY2V9Sw5XnyHl4E
kljPqnyFYyfTqyR1y/WiyVeLfAYTwYBJVsxXZV409STZb+D9Fa6xBkQA+kqT
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

-->

</rfc>
