<?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.17 (Ruby 3.3.3) -->
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-moq-transport-05" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.22.0 -->
  <front>
    <title abbrev="moq-transport">Media over QUIC Transport</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-05"/>
    <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>Applications and Real-Time</area>
    <workgroup>MOQ</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 56?>

<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>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Media Over QUIC Working Group mailing list (moq@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/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 65?>

<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 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 MoQ 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 entitly 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 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 (f):</dt>
          <dd>
            <t>Indicates that x is a flag and is encoded as a single byte with the
value 0 or 1. A value of 0 indicates the flag is false or off, while a
value of 1 indicates the flag is true or on. Any other value is a
protocol error and <bcp14>SHOULD</bcp14> terminate the session with a Protocol
Violation (<xref target="session-termination"/>).</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 Model</name>
      <t>MOQT has a hierarchical object model for data, comprised of objects,
groups and tracks.</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 it's 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. 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-group">
        <name>Groups</name>
        <t>A group is a collection of objects and is a sub-unit of a track
(<xref target="model-track"/>).  Objects within a group <bcp14>SHOULD NOT</bcp14> depend on objects
in other groups.  A group behaves as a join point for subscriptions.
A new subscriber might not want to receive the entire track, and may
instead 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>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>
          <t>In this specification, both the Track Namespace and the Track Name are
not constrained to a specific encoding. They carry a sequence of
bytes and comparison between two Track Namespaces 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="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 abruptly closed at the underlying transport
layer.  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">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>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 prior to any UNSUBSCRIBE
messages.</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>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>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 reprioitization 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 priority
varies within a Group, higher priority Objects are sent before lower
priority Objects.</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 can 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.</t>
        <t>The subscriber making the subscribe request is notified of the result of
the subscription, via SUBSCRIBE_OK (<xref target="message-subscribe-ok"/>) or the
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>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
track with a SUBSCRIBE_DONE (see <xref target="message-subscribe-done"/>).</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</bcp14> not 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 forward subscription for the
track. The published content received from the forward 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>
          </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>
      <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"/>).</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. Specifics of where the authorization happens,
either at the relays or forwarded for further processing, depends on
the way the relay is managed and is application specific (typically
based on prior business agreement).</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.  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>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 NOT</bcp14> depend on OBJECT
payload content for making forwarding decisions and <bcp14>MUST</bcp14> only depend on the
fields, such as priority order and other metadata properties in the
OBJECT message header. Unless determined by congestion response, Relays
<bcp14>MUST</bcp14> forward the OBJECT message to the matching subscribers.</t>
      </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>Messages</name>
      <t>Unidirectional streams and datagrams contain Objects and all other
messages are sent on a bidirectional stream.</t>
      <t>An endpoint that receives an unknown message type <bcp14>MUST</bcp14> close the session.</t>
      <figure anchor="moq-transport-message-format">
        <name>MOQT Message</name>
        <artwork><![CDATA[
MOQT Message {
  Message Type (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">0x0</td>
            <td align="left">OBJECT_STREAM (<xref target="object-message-formats"/>)</td>
          </tr>
          <tr>
            <td align="right">0x1</td>
            <td align="left">OBJECT_DATAGRAM (<xref target="object-message-formats"/>)</td>
          </tr>
          <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">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>
          <tr>
            <td align="right">0x50</td>
            <td align="left">STREAM_HEADER_TRACK (<xref target="multi-object-streams"/>)</td>
          </tr>
          <tr>
            <td align="right">0x51</td>
            <td align="left">STREAM_HEADER_GROUP (<xref target="multi-object-streams"/>)</td>
          </tr>
        </tbody>
      </table>
      <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 Parameter</name>
            <t>AUTHORIZATION INFO parameter (key 0x02) identifies a track's authorization
information in a SUBSCRIBE 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>
      </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 Payload {
  Number of Supported Versions (i),
  Supported Version (i) ...,
  Number of Parameters (i) ...,
  Setup Parameters (..) ...,
}

SERVER_SETUP Message Payload {
  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 parameter</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 parameter</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>
      </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 {
  New Session URI (b)
}
]]></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>
        <section anchor="sub-filter">
          <name>Filter Types</name>
          <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.</t>
          <t>Latest Object (0x2): Specifies an open-ended subscription beginning from
the current object of the current group.</t>
          <t>AbsoluteStart (0x3):  Specifies an open-ended subscription beginning
from the object identified in the StartGroup and StartObject fields.</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.</t>
          <t>A filter type other than the above <bcp14>MUST</bcp14> be treated as error.</t>
        </section>
        <section anchor="subscribe-format">
          <name>SUBSCRIBE Format</name>
          <t>A subscriber issues a SUBSCRIBE to a publisher to request a track.</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 {
  Subscribe ID (i),
  Track Alias (i),
  Track Namespace (b),
  Track Name (b),
  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 subscription identifier that is unique within the session.
<tt>Subscribe ID</tt> is a monotonically increasing variable length integer which
<bcp14>MUST</bcp14> not be reused within a session. <tt>Subscribe ID</tt> is used by subscribers and
the publishers to identify a given subscription. Subscribers specify the
<tt>Subscribe ID</tt> and it is included in the corresponding SUBSCRIBE_OK or
SUBSCRIBE_ERROR messages.</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 in use, 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.
See (<xref target="sub-filter"/>).</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 for the subscription it
<bcp14>MAY</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>
      <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 {
  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 {
  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-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
{
  Track Namespace (b),
}
]]></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
{
  Track Namespace (b),
  Error Code (i),
  Reason Phrase (b),
}
]]></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 {
  Track Namespace (b),
}
]]></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-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 {
  Track Namespace (b),
  Track Name (b),
}
]]></artwork>
        </figure>
      </section>
      <section anchor="message-object">
        <name>OBJECT</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="canonical-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, Group, Object and Datagram.  An Object
<bcp14>MUST</bcp14> be sent according to its <tt>Object Forwarding Preference</tt>, described below.</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>0x2 := Indicates Group does not exist. Indicates that objects with
       this GroupID do not exist at any publisher and they 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. This <bcp14>SHOULD</bcp14> be cached.</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>
            </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>
            <t>In most cases, messages with a non zero status code are sent on the same
stream that an object with that GroupID would have been sent on. The
exception to this is when that stream has been reset; in that case they
are sent on a new stream. This is to avoid the status message being lost
in cases such as a relay dropping a group and reseting the stream the
group is being sent on.</t>
          </section>
        </section>
        <section anchor="object-message-formats">
          <name>Object Message Formats</name>
          <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>
          <t><strong>Object Stream Message</strong></t>
          <t>An <tt>OBJECT_STREAM</tt> message carries a single object on a stream.  There is no
explicit length of the payload; it is determined by the end of the stream.  An
<tt>OBJECT_STREAM</tt> message <bcp14>MUST</bcp14> be the first and only message on a unidirectional
stream.</t>
          <t>An Object received in an <tt>OBJECT_STREAM</tt> message has an <tt>Object Forwarding
Preference</tt> = <tt>Object</tt>.</t>
          <t>To send an Object with <tt>Object Forwarding Preference</tt> = <tt>Object</tt>, open a stream,
serialize object fields below, and terminate the stream.</t>
          <figure anchor="moq-transport-object-stream-format">
            <name>MOQT OBJECT_STREAM Message</name>
            <artwork><![CDATA[
OBJECT_STREAM Message {
  Subscribe ID (i),
  Track Alias (i),
  Group ID (i),
  Object ID (i),
  Publisher Priority (8),
  Object Status (i),
  Object Payload (..),
}
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>Subscribe ID: Subscription Identifier as defined in <xref target="message-subscribe-req"/>.</t>
            </li>
            <li>
              <t>Track Alias: Identifies the Track Namespace and Track Name as defined in
<xref target="message-subscribe-req"/>.</t>
            </li>
          </ul>
          <t>If the Track Namespace and Track Name identified by the Track Alias are
different from those specified in the subscription identified by Subscribe ID,
the subscriber <bcp14>MUST</bcp14> close the session with a Protocol Violation.</t>
          <ul spacing="normal">
            <li>
              <t>Other fields: As described in <xref target="canonical-object-fields"/>.</t>
            </li>
          </ul>
          <t><strong>Object Datagram Message</strong></t>
          <t>An <tt>OBJECT_DATAGRAM</tt> message carries a single object in a datagram.
There is no explicit length of the payload; it is determined by the
length of the 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 fields 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 {
  Subscribe ID (i),
  Track Alias (i),
  Group ID (i),
  Object ID (i),
  Publisher Priority (8),
  Object Status (i),
  Object Payload (..),
}
]]></artwork>
          </figure>
        </section>
        <section anchor="multi-object-streams">
          <name>Multi-Object Streams</name>
          <t>When multiple objects are sent on a stream, 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 multi-object 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>
          <t><strong>Stream Header Track</strong></t>
          <t>When a stream begins with <tt>STREAM_HEADER_TRACK</tt>, all objects on the stream
belong to the track requested in the Subscribe message identified by <tt>Subscribe
ID</tt>.  All objects on the stream have the <tt>Object Send Order</tt> specified in the
stream header.</t>
          <figure anchor="stream-header-track-format">
            <name>MOQT STREAM_HEADER_TRACK Message</name>
            <artwork><![CDATA[
STREAM_HEADER_TRACK Message {
  Subscribe ID (i)
  Track Alias (i),
  Publisher Priority (8),
}
]]></artwork>
          </figure>
          <t>All Objects received on a stream opened with STREAM_HEADER_TRACK have an <tt>Object
Forwarding Preference</tt> = <tt>Track</tt>.</t>
          <t>To send an Object with <tt>Object Forwarding Preference</tt> = <tt>Track</tt>, find the open
stream that is associated with the subscription, or open a new one and send the
<tt>STREAM_HEADER_TRACK</tt> if needed, then serialize the following object fields.
The Object Status field is only sent if the Object Payload Length is zero.</t>
          <figure anchor="object-track-format">
            <name>MOQT Track Stream Object Fields</name>
            <artwork><![CDATA[
{
  Group ID (i),
  Object ID (i),
  Object Payload Length (i),
  [Object Status (i)],
  Object Payload (..),
}
]]></artwork>
          </figure>
          <t><strong>Stream Header Group</strong></t>
          <t>A publisher <bcp14>MUST NOT</bcp14> send an Object on a stream if its Group ID is less than a
previously sent Group ID on that stream, or if its Object ID is less than or
equal to a previously sent Object ID within a given group on that stream.</t>
          <t>When a stream begins with <tt>STREAM_HEADER_GROUP</tt>, all objects on the stream
belong to the track requested in the Subscribe message identified by <tt>Subscribe
ID</tt> and the group indicated by <tt>Group ID</tt>.  All objects on the stream
have the <tt>Object Send Order</tt> specified in the stream header.</t>
          <figure anchor="stream-header-group-format">
            <name>MOQT STREAM_HEADER_GROUP Message</name>
            <artwork><![CDATA[
STREAM_HEADER_GROUP Message {
  Subscribe ID (i),
  Track Alias (i),
  Group ID (i),
  Publisher Priority (8),
}
]]></artwork>
          </figure>
          <t>All Objects received on a stream opened with <tt>STREAM_HEADER_GROUP</tt> have an
<tt>Object Forwarding Preference</tt> = <tt>Group</tt>.</t>
          <t>To send an Object with <tt>Object Forwarding Preference</tt> = <tt>Group</tt>, find the open
stream that is associated with the subscription, <tt>Group ID</tt> and <tt>Object
Send Order</tt>, or open a new one and send the <tt>STREAM_HEADER_GROUP</tt> if needed,
then serialize the following fields.
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="examples">
          <name>Examples:</name>
          <t>Sending a track on one stream:</t>
          <artwork><![CDATA[
STREAM_HEADER_TRACK {
  Subscribe ID = 1
  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 group on one stream, with a unordered object in the group appearing
on its own stream.</t>
          <artwork><![CDATA[
Stream = 2

STREAM_HEADER_GROUP {
  Subscribe ID = 2
  Track Alias = 2
  Group ID = 0
  Publisher Priority = 0
}
{
  Object ID = 0
  Object Payload Length = 4
  Payload = "abcd"
}
{
  Object ID = 1
  Object Payload Length = 4
  Payload = "efgh"
}

Stream = 6

OBJECT_STREAM {
  Subscribe ID = 3
  Track Alias = 3
  Group ID = 0
  Object ID = 1
  Object Send Order = 0
  Payload = "moqrocks"
}
]]></artwork>
        </section>
      </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
{
  Subscribe ID (i),
  Expires (i),
  Group Order (8),
  ContentExists (f),
  [Largest Group ID (i)],
  [Largest Object ID (i)]
}
]]></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.</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>
        </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
{
  Subscribe ID (i),
  Error Code (i),
  Reason Phrase (b),
  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-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 {
  Subscribe ID (i),
  Status Code (i),
  Reason Phrase (b),
  ContentExists (f),
  [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.</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-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 {
  Track Namespace (b),
  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 {
  Track Namespace (b),
}
]]></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 {
  Track Namespace (b),
  Track Name (b),
  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>
    <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>Announce Error codes</t>
        </li>
        <li>
          <t>Message types</t>
        </li>
      </ul>
      <t>TODO: register the URI scheme and the ALPN</t>
      <t>TODO: the MOQT spec should establish the IANA registration table for MoQ
Streaming Formats. Each MoQ streaming format can then register its type
in that table. The MoQ Streaming Format type <bcp14>MUST</bcp14> be carried as the
leading varint in catalog track objects.</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>
      <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="4" month="March" 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-09"/>
        </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="4" month="March" 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-07"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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
o9FuL91mu/et547xjEdd0zmxnG+x4n9Lm1pZ6k2mdQcPv4GFHXorSN4md1fQ
yz/iid5HrXsvnexmhepW7afbajx4CX9Lzer/OcPp0yt1pCjERWBBR4hrwLap
BmfRp0n4Ke9f5cBV5dpV0ml3E2vhKYCGdi98BU5Qr7x2F9pRqABxegcROrPo
vQiNdPPMmkoEhKUsqLxLexsxc09r0Lg9KDL85tw+FQBEqOCrsiItmP06aoqx
HJPMmC3cMsXXEKuM9+ImLrmVD0WwDrGggfGHuE/SG+swcJ7UEbG1ZFfoKi7u
DHQV13b2IzbWLCf+tttzqr9DLt6RJOGXUyemuDQ31xzUgQQLDfNFc7q329zF
2/AeLWuoriReT4L321xL3SY4ylB8Q664P67d8Fxapybu2RwFA5Nd0Z6r/Y2R
itf32JvBNk9ybKWjVsvJRpIvmexLF+M80nakZ9qBjnvlqZjWhnkvLmtoqu+3
N+Lru2l7ZEn/F3fofrTUZKqo9CiqnZDeU6F/Fps9aG+NkRIU7SJCjlkaNR35
t9735piKKUWLYwdIRWtjt9PKWWeQs4HT7HzJi/W/YnZuXViGG24JhblI9zEk
djesb+H7uP+WoaFehf0UGyW5P7qzqPhesw+4Ubl7CBTNMdv/OBYkuzLE/rfM
dTuhh/KNCDG3ubdxlfBQgXMgpF59M3flqdAUqkwvDLJkl7tDI96NbxnXNCTu
D6MNZUhiVBOuwYzLTfJJpdfWeINfmnyymhd1teXYaVIqbdNZvJSVjs4VmJyQ
OQSt7vsgam7d/H64skcOCUah6Q5Rwk2zgxx49zT6E/ZLgz/cyabT28ouuEIh
GvuA9Oqy8mJdrRtNOWEPlsX3XUex4y6q1wWdfxyZ0K7RN+6KutKbJ2/kuC3v
yGpEuPNWCedG/6aTTRTZ08Tc/XwpIUczJ56ySxz7PfU/IVFPf77UzBZR2qRR
kieo3YFD1Al3ia6u3bAhBdTslt7ejbTbv+/NJnnd0iDkRgszXAFGuObmQr9w
1naTH7x717sci8f3tpNOUM/CmOZmDd9dhHwGd/iksVahRFAPRnGgVip9cHDn
m9DNvDees2SR+1Gn0mB6EWX9HqUGXtpF9kPi2Y3vAtHiN1vYgOVk+xvay73w
4UuetCB7rKitEM1PKd33O1aDg9tSHVVsVPihhN5OhZz1Dp4oCPNE20qhg5n5
eFzCREhZrXwvbxRcnN0E+dnIlxtp4+F4sSfMBXZxKV68Op8xb2JXs2W9n5m7
8dWvY7dorhRmktciab5GXzpF9GHQCiBGsTSB823hsMFL63aac+pMbI2HG9Gd
pr1qJrLm8ksnsU50hL2Vd5P138XJOcIhnXNNwj3L8U3eIiaXrkV0mvQdOexN
kjWAhProXid1eU58KezMRVcqb4i/sR/5iq19bucGf7JU56tV7MuROP02/ppv
ipkUm0qjHNs2x7kzgfiMHYvsfw0sSzKdmVsh3rn7tWEnIWnbJFB0nbPvQ3i4
5YfTEjlzdiwDPcRAhz4qqYhL/aTj6AVtTuB5oPMNLjq+1VzKbsIR1FyKGNeh
UqRchoGYU6/lthd2iIUb0KSZu4L+KAVduO8tkMc3ecUzlvo9memz6rZVCEWE
dYSB4gW99zoep+tQ6tB0NNmQQ95RJMNfcIqXNe68jObm0HXjU/2MTLNYHPTr
ysL3un6FtdQb0Gq+9SnEW+Z5mEIFgx9BJc5Na/1ycK3h+k1dte1Ff9EdOrFF
y+rSNZdxI9QgZhiXYZTu+Mmwg7jM2+ElfwzK/GUHwyjbQ+Ea+yfFRRpeiVL9
uvkJst446dr9iqTrsQAR1AHufhm66kcJiZykzGJRQkdL4TTGlNivxv3LueC+
iZlzHoUAUWq/JElZ2zUPXFhh95nhymrEsriNR1SE3uidHHPJOhN2R2jEX7Al
l1Icqde3+qJdXREpjQJ+vLS4OaS5g71twmGzZYIYfmakK0VmjIhJwRev8kDM
plFwXfgsZrtv+lqu4c79NSFQW/lbSMn2j0Z9vIYgWEL7SokVctNKT5HwunGr
U43LY3Gm+4vnlSxfTpSVEnzLILOOn7jZZCUVHBc+tMTw+EQAQ4iqiJg18umy
1yiS22YqSSYq6ewH3BFXWABfd2KNwe/epELdDadaU33ci34cflG+ifqfRE2K
Y9Wve/OZCuPD9K6Z4H64dUDp6KvGUdm6rT4Gq92QY0uMcIu/4f59r9AwrhWH
9++zRXeWdMMMDn00rhYngC7MksCXvoGtmAcWFXaWm2E5m1bhKef3jxoISBsr
d4Lwfty9pdsGmE9XvrSOCbl1hY8cAjkCZVE/Vhf3Y1V8+OtgsH/bMXEphah9
ndxFOnn2tb1wBk5V+cK+4+iI36zWR0OMOGPeI3qE2mQysdDquErSuFj1HvV5
dmg/Cz9B2vD0I5KozTa1v70t6fsv9Yw6i7qmynT6/fu1p01agg25NQaX99tE
ODr5tx2v8M1+gI7v7KZpDrsZtIPj9cv8461DWX7EbMT/Ah4SPDBDV4ilg8b4
G8UXwE221qVvVxPERGSJL+TLVmqwZRn33gVj+y6vCvaNk5lJvYWXWWfd27kZ
c27r+zx2ETvLPpKdufT1MPbtjKcPdsp63Ha+YQg5G2c38573GWPUSchLV6Sc
B9mWvte71W5H7hgQu3d84ALSomZnLHJ1c+IRcb8eNQYb8De1MuNU2kX+plys
F368jF/sFK2PosmdZbey/sG6cMQGfd/l//6MUI+ALfwG5tdd1B2tnHvOXRUT
BaDRklufVhQ184n0QRU9sZbG5VpN0OPx0MlNA0ndemkRbjkVXIZdS54fqX7s
a/cCbZZKNNOcZEL2/9PKp8X5WipEGJxFOZvN9ZbTaCBZ5ehDrZfhWwGgALIQ
Xkj+ICctFoMX8nEKHHKzfImyZFqZIp4iiPO75XYNrVpz0kOIOy0V3AM/vv6T
GSzLF9/WvwErVG3uOxmdaRVsUG+yGdixs4HGn3TWuWOfOQGX0XY7cVBbsbJY
wyH71FLf/MGxBaYSJNTEuMMnZ1Dtts0n5g7+Nj3phHN+4Kg+60ktl2AXWOSs
s4HepjemVAye8m2HOBxMVUZkco2/DCV/bQcHBxSosJBFeu+jLg4EaHdXDY1l
lvLtzJ1X+atUUxlhxJfCCNcm4BKDtkwiOOHCrSQLEqaK6LYwOHGkYunhBokU
mZqWhttesjls6nAamOmwkr4zVzszNmIvSATvPBZbxom1KaEWT6sAefs+EmB4
IKsR7EmBn95fDGwlMyFhZQhJUIu14A6r4BWwxrQt+TwijpgauYC+CRgg5PBd
OcwccxfdR8WI9e9ViWNipKm3GCogLxkL3Ul/WedzzSrrjBs+8ra3xG3VIZ7M
Nv4AjsitiP+rOaL3RKj7w0f38Kah8Ea+6T6Ib2Zdvtlnm9KS+RNoRx/KRxkF
t/PRBL4P5qODm26c1N3OB3mRv4qTygi/mpMG6pDukioDos2/jdtuwUXgtu5G
bvtbstn/Qra6leoEv9vY6kdyzy0sr88+b2FzZZfNQds/kAZmiPOdWK8CZVOV
6K/y+u52bal33L/OHnZOuzwZONxfZw8IvYmUxKN4N5O/O5v5dfYlt/KWh19n
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
H3cIQrK3AAEA

-->

</rfc>
