<?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.11 (Ruby 3.2.4) -->
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-moq-transport-04" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.21.0 -->
  <front>
    <title abbrev="moq-transport">Media over QUIC Transport</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-04"/>
    <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="priority-congestion"/> covers protocol considerations on
prioritization schemes and congestion response overall.</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>Producer:</dt>
          <dd>
            <t>An endpoint sending media over the network.</t>
          </dd>
          <dt>Consumer:</dt>
          <dd>
            <t>An endpoint receiving media over the network.</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 producer and consumer. 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 sender 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 consumer issues a subscription request.  A subscriber
can request to receive individual tracks starting at a group boundary,
including any new objects pushed by the producer 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 sender or receiver. 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="priority-congestion">
      <name>Prioritization and Congestion Response</name>
      <t>TODO: This is a placeholder section to capture details on how the MOQT
protocol deals with prioritization and congestion overall.</t>
      <t>This section is expected to cover details on:</t>
      <ul spacing="normal">
        <li>
          <t>Prioritization Schemes.</t>
        </li>
        <li>
          <t>Congestion Algorithms and impacts.</t>
        </li>
        <li>
          <t>Mapping considerations for one object per stream vs multiple objects
per stream.</t>
        </li>
        <li>
          <t>Considerations for merging multiple streams across domains onto single
connection and interactions with specific prioritization schemes.</t>
        </li>
      </ul>
      <section anchor="order-priorities-and-options">
        <name>Order Priorities and Options</name>
        <t>At the point of this writing, the working group has not reached
consensus on several important goals, such as:</t>
        <ul spacing="normal">
          <li>
            <t>Ensuring that objects are delivered in the order intended by the
emitter</t>
          </li>
          <li>
            <t>Allowing nodes and relays to skip or delay some objects to deal with
congestion</t>
          </li>
          <li>
            <t>Ensuring that emitters can accurately predict the behavior of relays</t>
          </li>
          <li>
            <t>Ensuring that when relays have to skip and delay objects belonging to
different tracks that they do it in a predictable way if tracks are
explicitly coordinated and in a fair way if they are not.</t>
          </li>
        </ul>
        <t>The working group has been considering two alternatives: marking objects
belonging to a track with an explicit "send order"; and, defining
algorithms combining tracks, priorities and object order within a
group. The two proposals are listed in <xref target="send-order"/> and
<xref target="ordering-by-priorities"/>.  We expect further work before a consensus
is reached.</t>
        <section anchor="send-order">
          <name>Proposal - Send Order</name>
          <t>Media is produced with an intended order, both in terms of when media
should be presented (PTS) and when media should be decoded (DTS).  As
stated in the introduction, the network is unable to maintain this
ordering during congestion without increasing latency.</t>
          <t>The encoder determines how to behave during congestion by assigning each
object a numeric send order.  The send order <bcp14>SHOULD</bcp14> be followed when
possible, to ensure that the most important media is delivered when
throughput is limited.  Note that the contents within each object are
still delivered in order; this send order only applies to the ordering
between objects.</t>
          <t>A sender <bcp14>MUST</bcp14> send each object over a dedicated stream.  The library
should support prioritization (<xref target="priority-congestion"/>) such that
streams are transmitted in send order.</t>
          <t>A receiver <bcp14>MUST NOT</bcp14> assume that objects will be received in send order,
for the following reasons:</t>
          <ul spacing="normal">
            <li>
              <t>Newly encoded objects can have a smaller send order than outstanding
objects.</t>
            </li>
            <li>
              <t>Packet loss or flow control can delay the send of individual streams.</t>
            </li>
            <li>
              <t>The sender might not support stream prioritization.</t>
            </li>
          </ul>
          <t>TODO: Refer to Congestion Response and Prioritization Section for
further details on various proposals.</t>
        </section>
        <section anchor="ordering-by-priorities">
          <name>Proposal - Ordering by Priorities</name>
          <t>Media is produced as a set of layers, such as for example low definition
and high definition, or low frame rate and high frame rate. Each object
belonging to a track and a group has two attributes: the object-id, and
the priority (or layer).</t>
          <t>When nodes or relays have to choose which object to send next, they
apply the following rules:</t>
          <ul spacing="normal">
            <li>
              <t>within the same group, objects with a lower priority number (e.g. P1)
are always sent before objects with a numerically greater priority
number (e.g., P2)</t>
            </li>
            <li>
              <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.</t>
            </li>
            <li>
              <t>objects from later groups are normally always sent before objects of
previous groups.</t>
            </li>
          </ul>
          <t>The latter rule is generally agreed as a way to ensure freshness, and to
recover quickly if queues and delays accumulate during a congestion
period. However, there may be cases when finishing the transmission of
an ongoing group results in better user experience than strict adherence
to the freshness rule. We expect that that the working group will
eventually reach consensus and define meta data that controls this
behavior.</t>
          <t>There have been proposals to allow emitters to coordinate the allocation
of layer priorities across multiple coordinated tracks. At this point,
these proposals have not reached consensus.</t>
        </section>
      </section>
    </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>
      <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="congestion-response-at-relays">
        <name>Congestion Response at Relays</name>
        <t>TODO: Refer to <xref target="priority-congestion"/>. Add details to describe relay
behavior when merging or splitting streams and interactions with
congestion response.</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 streams (<xref target="priority-congestion"/>) based on the send
order/priority.</t>
        <t>A sender <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">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 receiver 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),
  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>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 receiver 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.</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),
  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>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>Object Send Order: An integer indicating the object send order
<xref target="send-order"/> or priority <xref target="ordering-by-priorities"/> value.</t>
            </li>
            <li>
              <t>Object Forwarding Preference: An enumeration indicating how a sender 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 the consumer 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 publishers
<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),
  Object Send Order (i),
  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 receiver <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),
  Object Send Order (i),
  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 sender <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),
  Object Send Order (i),
}
]]></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 sender <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)
  Object Send Order (i)
}
]]></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 sender <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
  Object Send Order = 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
  Object Send Order = 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 = 2
  Track Alias = 2
  Group ID = 0
  Object ID = 1
  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),
  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>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 receiver <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 sender 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 producer prioritizes and transmits streams out of order.  Streams
might be starved indefinitely during congestion.  The producer and
consumer <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:
H4sIAAAAAAAAA81963bcRpLm/3wKDP1Dl1NVlmS3p5s9nm5aomxOS6RapOyd
cfuYqCqQxKgKKAMoUmy19ln2WfbJNr645AWFIiVZnm2fM9MiCsiMjIyMe0SO
x2PXld2i2M12nhfzMs/qy6LJ/vrq4HF20uRVu6qbbsfl02lTXO5my/qXcWeP
3byeVfmSPp03+Vk3LovubJy8MX7wpZvnHb3x9sneyf47N6M/zuvmejdru7lz
5arZzbpm3XaPHjz4w4NHLm+KfDfbW60WJb1a1lWb5dU8e1nki/FJuSxcu54u
y7alX06uVzTuwf7JU3dVN6/Pm3q92s2eH/3VvS6u6cmcfqy6oqmKbvwE8DnX
djTYz/mirujL66J17TJvup9/Wddd0e5mVe1W5W72Y1fPRllL4DfFWUv/ul7K
P2i5y3y1Kqvzn5zL191F3ey6LBvT/2VZWdEIzybZ43WzKK75keDm2fp1ET+t
m/O8Kv/Oq9vNnpTtjGDlX4plXi52s9flm2JBeJr/+RwPJrN66dJp/jLJXqzP
yyqa5S9lUy4W0eN0mudFl8dzlK/L5s9Lejgw+vEkOyQ85a/XhJ1oiuP1Rd72
f0qneYzVxPO0lbz+5xl+GZjs+0n2fd6Wi7K4jKb6vpx1dZP+ks70bV2fL4p4
qku8fHn553P+ZWCqg0l2fFV0XTTPQV5Fz26boSSqxsvxFPi5qXF86PAQzM5V
dbOkIS4L0AbO0W728unjPzx48ID+/qGY+lNF04+fTPjQXBVTPjPji65bfUHn
ojoLo7jxeJzl05bemBERn1yULUhxvSyqLpsXZ2VVtFl3UWRESEU2LS7yy5KQ
RyNkW0+0u0sH5eTeKMuzJb/jj2y2amo6APWChm7L86qYZ12d1auiIZKMhqJ9
dfFqRtnVRTm7yGj2ImvLZbnICYZ1NQM280XZXU9wOE+yfLGor+hYY6L5ekbj
1WdOgaiz1Xq6KNuLjLhGzkefxys7WlzV0pLn2SW9SFygnTXlCmNn0+ssd8v1
oivBNWgiGjArqvmqLquunWQHHb2/AowtEQJxBJ6sA77oL+CwJNyW0zVGc8Qu
wE6E7wDThgXg86I8v8jaWb4o+GdaSIaTWs2uk0EmsmfLcj4nCnLuM3AiXi1P
4WRbjja3JZNtwbx52IjuIu/wqKb1Lsu/F3MHWLDj/LV/7+1b/P3u3SgrSvq1
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
s/8iWuzw6g+gw2f5lft/Hw/sGfv8AAA=

-->

</rfc>
