<?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.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-lcurley-moq-lite-01" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.0 -->
  <front>
    <title abbrev="moql">Media over QUIC - Lite</title>
    <seriesInfo name="Internet-Draft" value="draft-lcurley-moq-lite-01"/>
    <author fullname="Luke Curley">
      <organization/>
      <address>
        <email>kixelated@gmail.com</email>
      </address>
    </author>
    <date year="2025" month="July" day="22"/>
    <area>wit</area>
    <workgroup>moq</workgroup>
    <abstract>
      <?line 24?>

<t>moq-lite is designed to fanout live content from publishers to any number of subscribers across the internet.
Liveliness is achieved by using QUIC to prioritize the most important content, potentially starving or dropping other content, to avoid head-of-line blocking while respecting encoding dependencies.
While designed for media, it is an agnostic transport, allowing relays and CDNs to forward content without knowledge of codecs, containers, or encryption keys.</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/kixelated/moq-drafts"/>.</t>
    </note>
  </front>
  <middle>
    <?line 30?>

<section anchor="conventions-and-definitions">
      <name>Conventions 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?>

</section>
    <section anchor="rationale">
      <name>Rationale</name>
      <t>This draft is based on MoqTransport <xref target="moqt"/>.
The concepts, motivations, and terminology are very similar and when in doubt, refer to the upstream draft.
However, a few things have been renamed because I think they make the concepts clearer (and I couldn't help myself).</t>
      <t>I absolutely believe in the motivation and potential of Media over QUIC.
The layering is phenomenal and addresses many of the problems with current live media protocols.
I fully support the goals of the working group and the IETF process.
But it's been difficult to design such an experimental protocol via committee.</t>
      <t>MoqTransport has become too complicated.
There are too many messages, optional modes, and half-baked features.
Too many hypotheses, too many potential use-cases, too many diametrically opposed opinions.
This is expected (and even desired) as compromise gives birth to a standard.</t>
      <t>But the specification has become a distraction and I think it impedes progress.
I believe that MoQ is an experiment that needs to be proven before it can be cemented.
We should spend more time building an <em>actual</em> application and less time arguing about a hypothetical one.
I can't waste any more time on FETCH and other fringe functionality.</t>
      <t>moq-lite is the bare minimum needed for a real-time conferencing application <em>only</em>.
Every feature from MoqTransport that is not necessary (or has not been implemented yet) has been removed for simplicity.
This includes many great ideas (ex. group order) that are just not worth implementing at the moment.
This draft is the current state, not the end state.</t>
    </section>
    <section anchor="concepts">
      <name>Concepts</name>
      <t>moq-lite consists of:</t>
      <ul spacing="normal">
        <li>
          <t><strong>Session</strong>: An established QUIC connection between a client and server.</t>
        </li>
        <li>
          <t><strong>Broadcast</strong>: A collection of Tracks from a single publisher.</t>
        </li>
        <li>
          <t><strong>Track</strong>: An series of Groups, each of which can be delivered and decoded <em>out-of-order</em>.</t>
        </li>
        <li>
          <t><strong>Group</strong>: An series of Frames, each of which must be delivered and decoded <em>in-order</em>.</t>
        </li>
        <li>
          <t><strong>Frame</strong>: A sized payload of bytes representing a single moment in time.</t>
        </li>
      </ul>
      <t>The application determines how to split data into broadcast, tracks, groups, and frames.
The moq-lite layer provides fanout, prioritization, and caching even for latency sensitive applications.</t>
      <section anchor="session">
        <name>Session</name>
        <t>A Session consists of a connection between a QUIC client and server.</t>
        <t>A session is established after the necessary QUIC, WebTransport, and moq-lite handshakes.
The moq-lite handshake consists of version and extension negotiation.</t>
        <t>The intent is that sessions are transparently chained together via relays.
A broadcaster could establish a session with an CDN ingest edge while the viewers establish separate sessions to CDN distribution edges.
A moq-lite session is hop-by-hop, but the application should be designed end-to-end.</t>
      </section>
      <section anchor="broadcast">
        <name>Broadcast</name>
        <t>A Broadcast is a collection of Tracks from a single publisher.
This corresponds to a MoqTransport "track namespace".</t>
        <t>A publisher may produce multiple broadcasts.
The available broadcasts are advertised via an ANNOUNCE message and a subscriber can discover available broadcasts via an ANNOUNCE_PLEASE message.
These announcements are live and can change over time, allowing for dynamic origin discovery.</t>
        <t>A broadcast consists of any number of Tracks.
These tracks are related by name only and there's no requirement that they have the same content.
Tracks are not advertised as part of a broadcast; they must be discovered via an out-of-band mechanism.
For example, a "catalog" file or track that describes the broadcast.</t>
      </section>
      <section anchor="track">
        <name>Track</name>
        <t>A Track is a series of Groups identified by a unique name within a Broadcast.</t>
        <t>A track consists of a single active Group at any moment.
When a new Group is started, the previous Group is closed and any unconsumed content may be dropped.</t>
        <t>Each subscription is scoped to a single Track.
A subscription will always start at the latest Group and continues until either the publisher or subscriber cancels the subscription.
The publisher closes a Group when a new Group is started.</t>
        <t>A subscriber chooses the priority of each subscription, hinting to the publisher which Track should arrive first during congestion.
This enables the most important content to arrive during network degradation while still respecting encoding dependencies.</t>
      </section>
      <section anchor="group">
        <name>Group</name>
        <t>A Group is an ordered stream of Frames within a Track.</t>
        <t>Each group consists of a sequence number and an appendable set of Frames.
The sequence number is an increasing integer for each new group in the same Track.
Different tracks may use the same group sequence number for alignment purposes; it's up to the application to handle this.</t>
        <t>A Group is served by a dedicated QUIC stream which is closed on completion, reset by the publisher, or cancelled by the subscriber.
The Frames within a Group will arrive reliably and in order thanks to the QUIC stream.
In contrast, Groups may temporarily arrive out of order due to network congestion and the application should be prepared to handle this.</t>
      </section>
      <section anchor="frame">
        <name>Frame</name>
        <t>A Frame is a payload of bytes within a Group.</t>
        <t>A frame is used to represent a chunk of data with a known size.
A frame should represent a single moment in time and avoid any buffering that would increase latency.</t>
      </section>
    </section>
    <section anchor="flow">
      <name>Flow</name>
      <t>This section outlines the flow of messages within a moq-lite session.
See the section for Messages section for the specific encoding.</t>
      <section anchor="connection">
        <name>Connection</name>
        <t>moq-lite runs on top of WebTransport.
WebTransport is a layer on top of QUIC and HTTP/3, required for web support.
The API is nearly identical to QUIC, however notably lacks stream IDs and has fewer available error codes.</t>
        <t>How the WebTransport connection is established is out-of-scope for this draft.
For example, a service <bcp14>MAY</bcp14> use the WebTransport handshake to perform authentication via the URL.</t>
      </section>
      <section anchor="termination">
        <name>Termination</name>
        <t>QUIC bidirectional streams have an independent send and receive direction.
Rather than deal with half-open states, moq-lite combines both sides.
If an endpoint closes the send direction of a stream, the peer <bcp14>MUST</bcp14> also close the send direction.</t>
        <t>moq-lite contains many long-lived transactions, such as subscriptions and announcements.
These are terminated when the underlying QUIC stream is terminated.</t>
        <t>To terminate a stream, an endpoint may:
- close the send direction (STREAM with FIN) to gracefully terminate (all messages are flushed).
- reset the send direction (RESET_STREAM) to immediately terminate.</t>
        <t>After resetting the send direction, an endpoint <bcp14>MAY</bcp14> close the recv direction (STOP_SENDING).
However, it is ultimately the other peer's responsibility to close their send direction.</t>
      </section>
      <section anchor="handshake">
        <name>Handshake</name>
        <t>After a connection is established, the client opens a Session Stream and sends a SESSION_CLIENT message, to which the server replies with a SESSION_SERVER message.
The session is active until either endpoint closes or resets the Session Stream.</t>
        <t>This session handshake is used to negotiate the moq-lite version and any extensions.
See the Extension section for more information.</t>
      </section>
    </section>
    <section anchor="streams">
      <name>Streams</name>
      <t>moq-lite uses a bidirectional stream for each transaction.
If the stream is closed, potentially with an error, the transaction is terminated.</t>
      <section anchor="bidirectional-streams">
        <name>Bidirectional Streams</name>
        <t>Bidirectional streams are used for control streams.
There's a 1-byte STREAM_TYPE at the beginning of each stream.</t>
        <table>
          <thead>
            <tr>
              <th align="right">ID</th>
              <th align="left">Stream</th>
              <th align="left">Creator</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x0</td>
              <td align="left">Session</td>
              <td align="left">Client</td>
            </tr>
            <tr>
              <td align="right">0x1</td>
              <td align="left">Announce</td>
              <td align="left">Subscriber</td>
            </tr>
            <tr>
              <td align="right">0x2</td>
              <td align="left">Subscribe</td>
              <td align="left">Subscriber</td>
            </tr>
          </tbody>
        </table>
        <section anchor="session-1">
          <name>Session</name>
          <t>There is a single Session Stream per WebTransport session.</t>
          <t>The client <bcp14>MUST</bcp14> open a single Session Stream immediately
After establishing the QUIC/WebTransport session, the client opens a Session Stream.
There <bcp14>MUST</bcp14> be only one Session Stream per WebTransport session and its closure by either endpoint indicates the moq-lite session is closed.</t>
          <t>The client sends a SESSION_CLIENT message indicating the supported versions and extensions.
If the server does not support any of the client's versions, it <bcp14>MUST</bcp14> close the stream with an error code and <bcp14>MAY</bcp14> close the connection.
Otherwise, the server replies with a SESSION_SERVER message to complete the handshake.</t>
          <t>Afterwards, both endpoints <bcp14>SHOULD</bcp14> send SESSION_UPDATE messages, such as after a significant change in the session bitrate.</t>
          <t>This draft's version is combined with the constant <tt>0xff0dad00</tt>.
For example, moq-lite-draft-04 is identified as <tt>0xff0dad04</tt>.</t>
        </section>
        <section anchor="announce">
          <name>Announce</name>
          <t>A subscriber can open a Announce Stream to discover broadcasts matching a prefix.
This is <bcp14>OPTIONAL</bcp14> and the application can determine track paths out-of-band.</t>
          <t>The subscriber creates the stream with a ANNOUNCE_PLEASE message.
The publisher replies with an ANNOUNCE_INIT message containing all currently active broadcasts that currently match the prefix, followed by ANNOUNCE messages for any changes.</t>
          <t>The ANNOUNCE_INIT message contains an array of all currently active broadcast paths encoded as a suffix.
Each path in ANNOUNCE_INIT can be treated as if it were an ANNOUNCE message with status <tt>active</tt>.</t>
          <t>After ANNOUNCE_INIT, the publisher sends ANNOUNCE messages for any changes also encoded as a suffix.
Each ANNOUNCE message contains one of the following statuses:</t>
          <ul spacing="normal">
            <li>
              <t><tt>active</tt>: a matching broadcast is available.</t>
            </li>
            <li>
              <t><tt>ended</tt>: a previously <tt>active</tt> broadcast is no longer available.</t>
            </li>
          </ul>
          <t>Each broadcast starts as <tt>ended</tt> (unless included in ANNOUNCE_INIT) and <bcp14>MUST</bcp14> alternate between <tt>active</tt> and <tt>ended</tt>.
The subscriber <bcp14>MUST</bcp14> reset the stream if it receives a duplicate status, such as two <tt>active</tt> statuses in a row or an <tt>ended</tt> without <tt>active</tt>.
When the stream is closed, the subscriber <bcp14>MUST</bcp14> assume that all broadcasts are now <tt>ended</tt>.</t>
          <t>Path prefix matching and equality is done on a byte-by-byte basis.
There <bcp14>MAY</bcp14> be multiple Announce Streams, potentially containing overlapping prefixes, that get their own ANNOUNCE_INIT and ANNOUNCE messages.</t>
        </section>
      </section>
      <section anchor="subscribe">
        <name>Subscribe</name>
        <t>A subscriber can open a Subscribe Stream to request a Track.</t>
        <t>The subscriber <bcp14>MUST</bcp14> start a Subscribe Stream with a SUBSCRIBE message followed by any number of SUBSCRIBE_UPDATE messages.
The publisher <bcp14>MUST</bcp14> reply with an SUBSCRIBE_OK message.</t>
        <t>The publisher <bcp14>SHOULD</bcp14> close the stream after the track has ended.
Either endpoint <bcp14>MAY</bcp14> reset/cancel the stream at any time.</t>
      </section>
      <section anchor="unidirectional-streams">
        <name>Unidirectional Streams</name>
        <t>Unidirectional streams are used for data transmission.</t>
        <table>
          <thead>
            <tr>
              <th align="right">ID</th>
              <th align="left">Stream</th>
              <th align="left">Creator</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x0</td>
              <td align="left">Group</td>
              <td align="left">Publisher</td>
            </tr>
          </tbody>
        </table>
        <section anchor="group-1">
          <name>Group</name>
          <t>A publisher creates Group Streams in response to a Subscribe Stream.</t>
          <t>A Group Stream <bcp14>MUST</bcp14> start with a GROUP message and <bcp14>MAY</bcp14> be followed by any number of FRAME messages.
A Group <bcp14>MAY</bcp14> contain zero FRAME messages, potentially indicating a gap in the track.
A frame <bcp14>MAY</bcp14> contain an empty payload, potentially indicating a gap in the group.</t>
          <t>Both the publisher and subscriber <bcp14>MAY</bcp14> reset the stream at any time.</t>
        </section>
      </section>
    </section>
    <section anchor="encoding">
      <name>Encoding</name>
      <t>This section covers the encoding of each message.</t>
      <section anchor="message-length">
        <name>Message Length</name>
        <t>Most messages are prefixed with a variable-length integer indicating the number of bytes in the message payload that follows.
This length field does not include the length of the varint length itself.</t>
        <t>An implementation <bcp14>SHOULD</bcp14> close the connection with a PROTOCOL_VIOLATION if it receives a message with an unexpected length.
The version and extensions should be used to support new fields, not the message length.</t>
      </section>
      <section anchor="streamtype">
        <name>STREAM_TYPE</name>
        <t>All streams start with a short header indicating the stream type.</t>
        <artwork><![CDATA[
STREAM_TYPE {
  Stream Type (i)
}
]]></artwork>
        <t>The stream ID depends on if it's a bidirectional or unidirectional stream, as indicated in the Streams section.
A receiver <bcp14>MUST</bcp14> close the session if it receives an unknown stream type.</t>
      </section>
      <section anchor="sessionclient">
        <name>SESSION_CLIENT</name>
        <t>The client initiates the session by sending a SESSION_CLIENT message.</t>
        <artwork><![CDATA[
SESSION_CLIENT Message {
  Message Length (i)
  Supported Versions Count (i)
  Supported Version (i)
  Extension Count (i)
  [
    Extension ID (i)
    Extension Payload (b)
  ]...
}
]]></artwork>
      </section>
      <section anchor="sessionserver">
        <name>SESSION_SERVER</name>
        <t>The server responds with the selected version and any extensions.</t>
        <artwork><![CDATA[
SESSION_SERVER Message {
  Message Length (i)
  Selected Version (i)
  Extension Count (i)
  [
    Extension ID (i)
    Extension Payload (b)
  ]...
}
]]></artwork>
      </section>
      <section anchor="sessionupdate">
        <name>SESSION_UPDATE</name>
        <artwork><![CDATA[
SESSION_UPDATE Message {
  Message Length (i)
  Session Bitrate (i)
}
]]></artwork>
        <t><strong>Session Bitrate</strong>:
The estimated bitrate of the QUIC connection in bits per second.
This <bcp14>SHOULD</bcp14> be sourced directly from the QUIC congestion controller.
A value of 0 indicates that this information is not available.</t>
      </section>
      <section anchor="announceplease">
        <name>ANNOUNCE_PLEASE</name>
        <t>A subscriber sends an ANNOUNCE_PLEASE message to indicate it wants to receive an ANNOUNCE message for any broadcasts with a path that starts with the requested prefix.</t>
        <artwork><![CDATA[
ANNOUNCE_PLEASE Message {
  Message Length (i)
  Broadcast Path Prefix (s),
}
]]></artwork>
        <t><strong>Broadcast Path Prefix</strong>:
Indicate interest for any broadcasts with a path that starts with this prefix.</t>
        <t>The publisher <bcp14>MUST</bcp14> respond with an ANNOUNCE_INIT message containing any matching and active broadcasts, followed by ANNOUNCE messages for any updates.
Implementations <bcp14>SHOULD</bcp14> consider reasonable limits on the number of matching broadcasts to prevent resource exhaustion.</t>
      </section>
      <section anchor="announceinit">
        <name>ANNOUNCE_INIT</name>
        <t>A publisher sends an ANNOUNCE_INIT message immediately after receiving an ANNOUNCE_PLEASE to communicate all currently active broadcasts that match the requested prefix.
Only the suffixes are encoded on the wire, as the full path can be constructed by prepending the requested prefix.</t>
        <t>This message is useful to avoid race conditions, as ANNOUNCE_INIT does not trickle in like ANNOUNCE messages.
For example, an API server that wants to list the current participants could issue an ANNOUNCE_PLEASE and immediately return the ANNOUNCE_INIT response.
Without ANNOUNCE_INIT, the API server would have use a timer to wait until ANNOUNCE to guess when all ANNOUNCE messages have been received.</t>
        <artwork><![CDATA[
ANNOUNCE_INIT Message {
  Message Length (i)
  Suffix Count (i),
  [
    Broadcast Path Suffix (s),
  ]...
}
]]></artwork>
        <t><strong>Suffix Count</strong>:
The number of active broadcast path suffixes that follow.
This can be 0.
A publisher <bcp14>MUST NOT</bcp14> include duplicate suffixes in a single ANNOUNCE_INIT message.</t>
        <t><strong>Broadcast Path Suffix</strong>:
Each suffix is combined with the broadcast path prefix from ANNOUNCE_PLEASE to form the full broadcast path.
This includes all currently active broadcasts matching the prefix.</t>
      </section>
      <section anchor="announce-1">
        <name>ANNOUNCE</name>
        <t>A publisher sends an ANNOUNCE message to advertise a change in broadcast availability.
Only the suffix is encoded on the wire, as the full path can be constructed by prepending the requested prefix.</t>
        <t>The status is relative to the ANNOUNCE_INIT and all prior ANNOUNCE messages combined.
A client <bcp14>MUST</bcp14> ONLY alternate between status values (from active to ended or vice versa).</t>
        <artwork><![CDATA[
ANNOUNCE Message {
  Message Length (i)
  Announce Status (i),
  Broadcast Path Suffix (s),
}
]]></artwork>
        <t><strong>Announce Status</strong>:
A flag indicating the announce status.</t>
        <ul spacing="normal">
          <li>
            <t><tt>ended</tt> (0): A path is no longer available.</t>
          </li>
          <li>
            <t><tt>active</tt> (1): A path is now available.</t>
          </li>
        </ul>
        <t><strong>Broadcast Path Suffix</strong>:
This is combined with the broadcast path prefix to form the full broadcast path.</t>
      </section>
      <section anchor="subscribe-1">
        <name>SUBSCRIBE</name>
        <t>SUBSCRIBE is sent by a subscriber to start a subscription.</t>
        <artwork><![CDATA[
SUBSCRIBE Message {
  Message Length (i)
  Subscribe ID (i)
  Broadcast Path (s)
  Track Name (s)
  Subscriber Priority (i)
}
]]></artwork>
        <t><strong>Subscribe ID</strong>:
A unique identifier chosen by the subscriber.
A Subscribe ID <bcp14>MUST NOT</bcp14> be reused within the same session, even if the prior subscription has been closed.</t>
        <t><strong>Subscriber Priority</strong>:
The transmission priority of the subscription relative to all other active subscriptions within the session.
The publisher <bcp14>SHOULD</bcp14> transmit <em>higher</em> values first during congestion.
If there is a tie, a publisher <bcp14>MAY</bcp14> use the Publisher Priority as a tiebreaker.</t>
      </section>
      <section anchor="subscribeupdate">
        <name>SUBSCRIBE_UPDATE</name>
        <t>A subscriber can modify a subscription with a SUBSCRIBE_UPDATE message.</t>
        <artwork><![CDATA[
SUBSCRIBE_UPDATE Message {
  Message Length (i)
  Subscriber Priority (i)
}
]]></artwork>
        <t><strong>Subscriber Priority</strong>:
The new subscriber priority; see SUBSCRIBE.</t>
      </section>
      <section anchor="subscribeok">
        <name>SUBSCRIBE_OK</name>
        <t>The SUBSCRIBE_OK is sent in response to a SUBSCRIBE.
It contains information about the subscription</t>
        <artwork><![CDATA[
SUBSCRIBE_OK Message {
  Message Length (i)
  Publisher Priority (i)
}
]]></artwork>
        <t><strong>Publisher Priority</strong>:
The priority of the subscription as indicated by the publisher.
This <bcp14>SHOULD</bcp14> be used as a tiebreaker when the Subscriber Priority is the same.</t>
        <t><strong>Meta</strong>: This field isn't super useful and could have been removed, but we should encode <em>something</em> to acknowledge the subscription.</t>
      </section>
      <section anchor="group-2">
        <name>GROUP</name>
        <t>The GROUP message contains information about a Group, as well as a reference to the subscription being served.</t>
        <artwork><![CDATA[
GROUP Message {
  Message Length (i)
  Subscribe ID (i)
  Group Sequence (i)
}
]]></artwork>
        <t><strong>Subscribe ID</strong>:
The corresponding Subscribe ID.
This ID is used to distinguish between multiple subscriptions for the same track.</t>
        <t><strong>Group Sequence</strong>:
The sequence number of the group.
This <bcp14>SHOULD</bcp14> increase by 1 for each new group.</t>
      </section>
      <section anchor="frame-1">
        <name>FRAME</name>
        <t>The FRAME message is a payload at a specific point of time.</t>
        <artwork><![CDATA[
FRAME Message {
  Message Length (i)
  Payload (b)
}
]]></artwork>
        <t><strong>Payload</strong>:
An application specific payload.
A generic library or relay <bcp14>MUST NOT</bcp14> inspect or modify the contents unless otherwise negotiated.</t>
      </section>
    </section>
    <section anchor="appendix-a-changelog">
      <name>Appendix A: Changelog</name>
      <section anchor="moq-lite-01">
        <name>moq-lite-01</name>
        <ul spacing="normal">
          <li>
            <t>Added ANNOUNCE_INIT.</t>
          </li>
          <li>
            <t>Added Message Length (i) to all messages.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="appendix-b-upstream-differences">
      <name>Appendix B: Upstream Differences</name>
      <t>A quick comparison of moq-lite and moq-transport-10:</t>
      <section anchor="deleted-messages">
        <name>Deleted Messages</name>
        <ul spacing="normal">
          <li>
            <t>GOAWAY</t>
          </li>
          <li>
            <t>MAX_SUBSCRIBE_ID</t>
          </li>
          <li>
            <t>SUBSCRIBES_BLOCKED</t>
          </li>
          <li>
            <t>SUBSCRIBE_ERROR</t>
          </li>
          <li>
            <t>UNSUBSCRIBE</t>
          </li>
          <li>
            <t>SUBSCRIBE_DONE</t>
          </li>
          <li>
            <t>FETCH</t>
          </li>
          <li>
            <t>FETCH_OK</t>
          </li>
          <li>
            <t>FETCH_ERROR</t>
          </li>
          <li>
            <t>FETCH_CANCEL</t>
          </li>
          <li>
            <t>TRACK_STATUS_REQUEST</t>
          </li>
          <li>
            <t>TRACK_STATUS</t>
          </li>
          <li>
            <t>ANNOUNCE_OK</t>
          </li>
          <li>
            <t>ANNOUNCE_ERROR</t>
          </li>
          <li>
            <t>ANNOUNCE_CANCEL</t>
          </li>
          <li>
            <t>SUBSCRIBE_ANNOUNCES_OK</t>
          </li>
          <li>
            <t>SUBSCRIBE_ANNOUNCES_ERROR</t>
          </li>
          <li>
            <t>UNSUBSCRIBE_ANNOUNCES</t>
          </li>
          <li>
            <t>FETCH_HEADER</t>
          </li>
          <li>
            <t>OBJECT_DATAGRAM</t>
          </li>
          <li>
            <t>OBJECT_DATAGRAM_STATUS</t>
          </li>
        </ul>
      </section>
      <section anchor="deleted-fields">
        <name>Deleted Fields</name>
        <t>Some of these fields occur in multiple messages.</t>
        <ul spacing="normal">
          <li>
            <t>Track Alias</t>
          </li>
          <li>
            <t>Group Order</t>
          </li>
          <li>
            <t>Filter Type</t>
          </li>
          <li>
            <t>StartGroup</t>
          </li>
          <li>
            <t>StartObject</t>
          </li>
          <li>
            <t>EndGroup</t>
          </li>
          <li>
            <t>Expires</t>
          </li>
          <li>
            <t>ContentExists</t>
          </li>
          <li>
            <t>Largest Group ID</t>
          </li>
          <li>
            <t>Largest Object ID</t>
          </li>
          <li>
            <t>Subscribe Parameters</t>
          </li>
          <li>
            <t>Announce Parameters</t>
          </li>
          <li>
            <t>Subgroup ID</t>
          </li>
          <li>
            <t>Object ID</t>
          </li>
          <li>
            <t>Object Status</t>
          </li>
          <li>
            <t>Extension Headers</t>
          </li>
        </ul>
      </section>
      <section anchor="misc-changes">
        <name>Misc Changes</name>
        <ul spacing="normal">
          <li>
            <t>Messages include a varint length prefix.</t>
          </li>
          <li>
            <t>Track Namespace (renamed to Broadcast Path) is a string, not an array of bytes.</t>
          </li>
          <li>
            <t>Track Name is a string, not bytes.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="moqt">
        <front>
          <title>Media over QUIC Transport</title>
          <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
            <organization>Cisco</organization>
          </author>
          <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
            <organization>Google</organization>
          </author>
          <author fullname="Ian Swett" initials="I." surname="Swett">
            <organization>Google</organization>
          </author>
          <author fullname="Alan Frindell" initials="A." surname="Frindell">
            <organization>Meta</organization>
          </author>
          <date day="7" month="July" year="2025"/>
          <abstract>
            <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>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-13"/>
      </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>
    </references>
    <?line 568?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
WjERd04AAA==

-->

</rfc>
