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

<t>moq-lite is designed to fanout live content 1-&gt;N across the internet.
It leverages QUIC to prioritize important content, avoiding head-of-line blocking while respecting encoding dependencies.
While primarily designed for media, the transport is payload agnostic and can be proxied by relays/CDNs 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 31?>

<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 existing MoqTransport literature.
A few things have been renamed (ex. object -&gt; frame) to better align with media terminology.</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.</t>
      <t>But it's been difficult to design such an experimental protocol via committee.
MoqTransport has become too complicated.</t>
      <t>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 I believe the standardization process is hindering practical experimentation.
The ideas behind MoQ can be proven now before being cemented as an RFC.
We should spend more time building an <em>actual</em> application and less time arguing about a hypothetical one.</t>
      <t>moq-lite is the bare minimum needed for a real-time application aiming to replace WebRTC.
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 may be added as they are needed.
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>: A series of Groups, each of which can be delivered and decoded <em>out-of-order</em>.</t>
        </li>
        <li>
          <t><strong>Group</strong>: A 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 within a Group.</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 client and a server.
There is currently no P2P support within QUIC so it's out of scope for moq-lite.</t>
        <t>The moq-lite version identifier is <tt>moq-lite-xx</tt> where <tt>xx</tt> is the two-digit draft version.
For bare QUIC, this is negotiated as an ALPN token during the QUIC handshake.
For WebTransport over HTTP/3, the QUIC ALPN remains <tt>h3</tt> and the moq-lite version is advertised via the <tt>WT-Available-Protocols</tt> and <tt>WT-Protocol</tt> CONNECT headers.</t>
        <t>The session is active immediately after the QUIC/WebTransport connection is established.
Extensions are negotiated via stream probing: an endpoint opens a stream with an unknown type and the peer resets it if unsupported.</t>
        <t>While moq-lite is a point-to-point protocol, it's intended to work end-to-end via relays.
Each client establishes a session with a CDN edge server, ideally the closest one.
Any broadcasts and subscriptions are transparently proxied by the CDN behind the scenes.</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's "track namespace".</t>
        <t>A publisher may produce multiple broadcasts, each of which is advertised via an ANNOUNCE message.
The subscriber uses the ANNOUNCE_INTEREST message to discover available broadcasts.
These announcements are live and can change over time, allowing for dynamic origin discovery.</t>
        <t>A broadcast consists of any number of Tracks.
The contents, relationships, and encoding of tracks are determined by the application.</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, called the "latest group".
When a new Group is started, the previous Group is closed and may be dropped for any reason.
The duration before an incomplete group is dropped is determined by the application and the publisher/subscriber's latency target.</t>
        <t>Every subscription is scoped to a single Track.
A subscription starts at a configurable Group (defaulting to the latest) and continues until a configurable end Group or until either the publisher or subscriber cancels the subscription.</t>
        <t>The subscriber and publisher both indicate their delivery preference:
- <tt>Priority</tt> indicates if Track A should be transmitted instead of Track B.
- <tt>Ordered</tt> indicates if the Groups within a Track should be transmitted in order.
- <tt>Max Latency</tt> indicates the maximum duration before a Group is abandoned.</t>
        <t>The combination of these preferences 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 an append-only list of Frames.
A Group is served by a dedicated QUIC stream which is closed on completion, reset by the publisher, or cancelled by the subscriber.
This ensures that all Frames within a Group arrive reliably and in order.</t>
        <t>In contrast, Groups may arrive out of order due to network congestion and prioritization.
The application <bcp14>SHOULD</bcp14> process or buffer groups out of order to avoid blocking on flow control.</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 an upfront size.
The contents are opaque to the moq-lite layer.</t>
      </section>
    </section>
    <section anchor="flow">
      <name>Flow</name>
      <t>This section outlines the flow of messages within a moq-lite session.
See the 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 with the exception of stream IDs.</t>
        <t>How the WebTransport connection is authenticated is out-of-scope for this draft.</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 their 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>See the <xref target="session"/> section for ALPN negotiation and session activation details.</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">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>
            <tr>
              <td align="right">0x3</td>
              <td align="left">Fetch</td>
              <td align="left">Subscriber</td>
            </tr>
            <tr>
              <td align="right">0x4</td>
              <td align="left">Probe</td>
              <td align="left">Subscriber</td>
            </tr>
            <tr>
              <td align="right">0x5</td>
              <td align="left">Goaway</td>
              <td align="left">Either</td>
            </tr>
          </tbody>
        </table>
        <section anchor="announce">
          <name>Announce</name>
          <t>A subscriber can open an Announce Stream to discover broadcasts matching a prefix.</t>
          <t>The subscriber creates the stream with a ANNOUNCE_INTEREST message.
The publisher replies with ANNOUNCE messages for any matching broadcasts and any future changes.
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> 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 messages.</t>
        </section>
        <section anchor="subscribe">
          <name>Subscribe</name>
          <t>A subscriber opens Subscribe Streams 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 replies with a SUBSCRIBE_OK message followed by any number of SUBSCRIBE_DROP and additional SUBSCRIBE_OK messages.
The first message on the response stream <bcp14>MUST</bcp14> be a SUBSCRIBE_OK; it is not valid to send a SUBSCRIBE_DROP before SUBSCRIBE_OK.</t>
          <t>The publisher closes the stream (FIN) when every group from start to end has been accounted for, either via a GROUP stream (completed or reset) or a SUBSCRIBE_DROP message.
Unbounded subscriptions (no end group) stay open until the publisher closes the stream to indicate the track has ended, or either endpoint resets.
Either endpoint <bcp14>MAY</bcp14> reset/cancel the stream at any time.</t>
        </section>
        <section anchor="fetch">
          <name>Fetch</name>
          <t>A subscriber opens a Fetch Stream (0x3) to request a single Group from a Track.</t>
          <t>The subscriber sends a FETCH message containing the broadcast path, track name, priority, and group sequence.
Unlike Group Streams (which <bcp14>MUST</bcp14> start with a GROUP message), the publisher responds with FRAME messages directly on the same bidirectional stream — there is no preceding GROUP header.
The Subscribe ID and Group Sequence for the returned FRAME messages are implicit, taken from the original FETCH request.
The publisher FINs the stream after the last frame, or resets the stream on error.</t>
          <t>Fetch behaves like HTTP: a single request/response per stream.</t>
        </section>
        <section anchor="probe">
          <name>Probe</name>
          <t>A subscriber opens a Probe Stream (0x4) to measure the available bitrate of the connection.</t>
          <t>The subscriber sends a PROBE message with a target bitrate on the bidirectional stream.
The subscriber <bcp14>MAY</bcp14> send additional PROBE messages on the same stream to update the target bitrate; the publisher <bcp14>MUST</bcp14> treat each PROBE as a new target to attempt.
The publisher <bcp14>SHOULD</bcp14> pad the connection to achieve the most recent target bitrate.
The publisher periodically replies with PROBE messages on the same bidirectional stream containing the current estimated bitrate and smoothed RTT.</t>
          <t>If the publisher does not support PROBE (e.g., congestion controller is not exposed), it <bcp14>MUST</bcp14> reset the stream.</t>
        </section>
        <section anchor="goaway">
          <name>Goaway</name>
          <t>Either endpoint can open a Goaway Stream (0x5) to initiate a graceful session shutdown.</t>
          <t>The sender sends a GOAWAY message containing an optional new session URI.
If the URI is non-empty, the peer <bcp14>SHOULD</bcp14> establish a new session at the provided URI and migrate any active subscriptions.
The peer <bcp14>MUST NOT</bcp14> open new streams on the current session after receiving a GOAWAY.</t>
          <t>The sender closes the stream (FIN) when it is ready to terminate the session.
The peer <bcp14>SHOULD</bcp14> close all streams and the session after migrating or when it no longer needs the session.</t>
        </section>
      </section>
    </section>
    <section anchor="delivery">
      <name>Delivery</name>
      <t>The most important concept in moq-lite is how to deliver a subscription.
QUIC can only improve the user experience if data is delivered out-of-order during congestion.
This is the sole reason why data is divided into Broadcasts, Tracks, Groups, and Frames.</t>
      <t>moq-lite consists of multiple groups being transmitted in parallel across separate streams.
How these streams get transmitted over the network is very important, and yet has been distilled down into a few simple properties:</t>
      <section anchor="prioritization">
        <name>Prioritization</name>
        <t>The Publisher and Subscriber both exchange <tt>Priority</tt> and <tt>Ordered</tt> values:
- <tt>Priority</tt> determines which Track should be transmitted next.
- <tt>Ordered</tt> determines which Group within the Track should be transmitted next.</t>
        <t>A publisher <bcp14>SHOULD</bcp14> attempt to transmit streams based on these fields.
This depends on the QUIC implementation and it may not be possible to get fine-grained control.</t>
        <section anchor="priority">
          <name>Priority</name>
          <t>The <tt>Subscriber Priority</tt> is scoped to the connection.
The <tt>Publisher Priority</tt> <bcp14>SHOULD</bcp14> be used to resolve conflicts or ties.</t>
          <t>A conflict can occur when a relay tries to serve multiple downstream subscriptions from a single upstream subscription.
Any upstream subscription <bcp14>SHOULD</bcp14> use the publisher priority, not some combination of different subscriber priorities.</t>
          <t>Rather than try to explain everything, here's an example:</t>
          <t><strong>Example:</strong>
There are two people in a conference call, Ali and Bob.</t>
          <t>We subscribe to both of their audio tracks with priority 2 and video tracks with priority 1.
This will cause equal priority for <tt>Ali</tt> and <tt>Bob</tt> while prioritizing audio.
<tt>
ali/audio + bob/audio: subscriber_priority=2 publisher_priority=2
ali/video + bob/video: subscriber_priority=1 publisher_priority=1
</tt></t>
          <t>If Bob starts actively speaking, they can bump their publisher priority via a SUBSCRIBE_OK message.
This would cause tracks be delivered in this order:
<tt>
bob/audio: subscriber_priority=2 publisher_priority=3
ali/audio: subscriber_priority=2 publisher_priority=2
bob/video: subscriber_priority=1 publisher_priority=2
ali/video: subscriber_priority=1 publisher_priority=1
</tt></t>
          <t>The subscriber priority takes precedence, so we could override it if we decided to full-screen Ali's window:
<tt>
ali/audio subscriber_priority=4 publisher_priority=2
ali/video subscriber_priority=3 publisher_priority=1
bob/audio subscriber_priority=2 publisher_priority=3
bob/video subscriber_priority=1 publisher_priority=2
</tt></t>
        </section>
        <section anchor="ordered">
          <name>Ordered</name>
          <t>The <tt>Subscriber Ordered</tt> field signals if older (0x1) or newer (0x0) groups should be transmitted first within a Track.
The <tt>Publisher Ordered</tt> field <bcp14>MAY</bcp14> likewise be used to resolve conflicts.</t>
          <t>An application <bcp14>SHOULD</bcp14> use <tt>ordered</tt> when it wants to provide a VOD-like experience, preferring to buffer old groups rather than skip them.
An application <bcp14>SHOULD NOT</bcp14> use <tt>ordered</tt> when it wants to provide a live experience, preferring to skip old groups rather than buffer them.</t>
          <t>Note that <xref target="expiration"/> is not affected by <tt>ordered</tt>.
An old group may still be cancelled/skipped if it exceeds <tt>max_latency</tt> set by either peer.
An application <bcp14>MUST</bcp14> support gaps and out-of-order delivery even when <tt>ordered</tt> is true.</t>
        </section>
      </section>
      <section anchor="expiration">
        <name>Expiration</name>
        <t>The Publisher and Subscriber both transmit a <tt>Max Latency</tt> value, indicating the maximum duration before a group is expired.</t>
        <t>It is not crucial to aggressively expire groups thanks to <xref target="prioritization"/>.
However, a lower priority group will still consume RAM, bandwidth, and potentially flow control.
It is <bcp14>RECOMMENDED</bcp14> that an application set conservative limits and only resort to expiration when data is absolutely no longer needed.</t>
        <t>A subscriber <bcp14>SHOULD</bcp14> expire groups based on the <tt>Subscriber Max Latency</tt> in SUBSCRIBE/SUBSCRIBE_UPDATE.
A publisher <bcp14>SHOULD</bcp14> expire groups based on the <tt>Publisher Max Latency</tt> in SUBSCRIBE_OK.
An implementation <bcp14>MAY</bcp14> use the minimum of both when determining when to expire a group.</t>
        <t>Group age is computed relative to the latest group by sequence number.
A group is never expired until at least the next group (by sequence number) has been received or queued.
Once a newer group exists, a group is considered expired if the time between its arrival and the latest group's arrival exceeds <tt>Max Latency</tt>.
The arrival time is when the first byte of a group is received (subscriber) or queued (publisher).
An expired group <bcp14>SHOULD</bcp14> be reset at the QUIC level to avoid consuming flow control.</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.
This is not a fatal error and the session remains active.
The subscriber <bcp14>MAY</bcp14> cache the error and potentially retry later.</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> reset the stream if it receives an unknown stream type.
Unknown stream types <bcp14>MUST NOT</bcp14> be treated as fatal; this enables extension negotiation via stream probing.</t>
      </section>
      <section anchor="announceinterest">
        <name>ANNOUNCE_INTEREST</name>
        <t>A subscriber sends an ANNOUNCE_INTEREST 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_INTEREST Message {
  Message Length (i)
  Broadcast Path Prefix (s),
  Exclude Hop (i),
}
]]></artwork>
        <t><strong>Broadcast Path Prefix</strong>:
Indicate interest for any broadcasts with a path that starts with this prefix.</t>
        <t><strong>Exclude Hop</strong>:
If non-zero, the publisher <bcp14>SHOULD</bcp14> skip ANNOUNCE messages for broadcasts whose Hop ID entries contain this value.
This is used by relays to avoid routing loops in a cluster.</t>
        <t>The publisher <bcp14>MUST</bcp14> respond with ANNOUNCE messages for any matching and active broadcasts, followed by ANNOUNCE messages for any future updates.
Implementations <bcp14>SHOULD</bcp14> consider reasonable limits on the number of matching broadcasts to prevent resource exhaustion.</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 all prior ANNOUNCE messages on the same stream.
A publisher <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),
  Hop Count (i),
  Hop ID (i) ...,
}
]]></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>
        <t><strong>Hop Count</strong>:
The number of Hop ID entries that follow.
A value of 0 means no Hop ID entries are present, indicating a fully unknown path (e.g. the announcement originated locally or was received from a peer that does not support hop tracking).
A receiver <bcp14>MUST</bcp14> close the stream with a PROTOCOL_VIOLATION if the Hop Count does not match the number of subsequent Hop ID entries.</t>
        <t><strong>Hop ID</strong>:
A unique identifier for each relay in the path from the origin publisher.
Each relay <bcp14>MUST</bcp14> append its own Hop ID and increment the Hop Count when forwarding an announcement, even if no prior Hop ID entries are present (e.g. when receiving from an older protocol version).
The Hop Count is used as a tiebreaker when there are multiple paths to the same broadcast.
A Hop ID value of 0 indicates an unknown or bridged relay hop (e.g. when bridging from an older protocol version that does not assign Hop IDs); the Hop Count still reflects the total number of entries including unknown hops.</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 (8)
  Subscriber Ordered (8)
  Subscriber Max Latency (i)
  Start Group (i)
  End Group (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 priority of the subscription within the session, represented as a u8.
The publisher <bcp14>SHOULD</bcp14> transmit <em>higher</em> values first during congestion.
See the <xref target="prioritization"/> section for more information.</t>
        <t><strong>Subscriber Ordered</strong>:
A single byte representing whether groups are transmitted in ascending (0x1) or descending (0x0) order.
The publisher <bcp14>SHOULD</bcp14> transmit <em>older</em> groups first during congestion if true.
See the <xref target="prioritization"/> section for more information.</t>
        <t><strong>Subscriber Max Latency</strong>:
This value is encoded in milliseconds and represents the maximum age of a group relative to the latest group.
The publisher <bcp14>SHOULD</bcp14> reset old group streams when the difference in arrival time between the group and the latest group exceeds this duration.
See the <xref target="expiration"/> section for more information.</t>
        <t><strong>Start Group</strong>:
The first group to deliver.
A value of 0 means the latest group (default).
A non-zero value is the absolute group sequence + 1.</t>
        <t><strong>End Group</strong>:
The last group to deliver (inclusive).
A value of 0 means unbounded (default).
A non-zero value is the absolute group sequence + 1.</t>
      </section>
      <section anchor="subscribeupdate">
        <name>SUBSCRIBE_UPDATE</name>
        <t>A subscriber can modify a subscription with a SUBSCRIBE_UPDATE message.
A subscriber <bcp14>MAY</bcp14> send multiple SUBSCRIBE_UPDATE messages to update the subscription.
The start and end group can be changed in either direction (growing or shrinking).</t>
        <artwork><![CDATA[
SUBSCRIBE_UPDATE Message {
  Message Length (i)
  Subscriber Priority (8)
  Subscriber Ordered (8)
  Subscriber Max Latency (i)
  Start Group (i)
  End Group (i)
}
]]></artwork>
        <t>See <xref target="subscribe"/> for information about each field.</t>
      </section>
      <section anchor="subscribeok">
        <name>SUBSCRIBE_OK</name>
        <t>A SUBSCRIBE_OK message is sent in response to a SUBSCRIBE.
The publisher <bcp14>MAY</bcp14> send multiple SUBSCRIBE_OK messages to update the subscription.
The first message on the response stream <bcp14>MUST</bcp14> be a SUBSCRIBE_OK; a SUBSCRIBE_DROP <bcp14>MUST NOT</bcp14> precede it.</t>
        <artwork><![CDATA[
SUBSCRIBE_OK Message {
  Type (i) = 0x0
  Message Length (i)
  Publisher Priority (8)
  Publisher Ordered (8)
  Publisher Max Latency (i)
  Start Group (i)
  End Group (i)
}
]]></artwork>
        <t><strong>Type</strong>:
Set to 0x0 to indicate a SUBSCRIBE_OK message.</t>
        <t><strong>Start Group</strong>:
The resolved absolute start group sequence.
A value of 0 means the start group is not yet known; the publisher <bcp14>MUST</bcp14> send a subsequent SUBSCRIBE_OK with a resolved value.
A non-zero value is the absolute group sequence + 1.</t>
        <t><strong>End Group</strong>:
The resolved absolute end group sequence (inclusive).
A value of 0 means unbounded.
A non-zero value is the absolute group sequence + 1.</t>
        <t>See <xref target="subscribe"/> for information about the other fields.</t>
      </section>
      <section anchor="subscribedrop">
        <name>SUBSCRIBE_DROP</name>
        <t>A SUBSCRIBE_DROP message is sent by the publisher on the Subscribe Stream when groups cannot be served.</t>
        <artwork><![CDATA[
SUBSCRIBE_DROP Message {
  Type (i) = 0x1
  Message Length (i)
  Start Group (i)
  End Group (i)
  Error Code (i)
}
]]></artwork>
        <t><strong>Type</strong>:
Set to 0x1 to indicate a SUBSCRIBE_DROP message.</t>
        <t><strong>Start Group</strong>:
The first absolute group sequence in the dropped range.</t>
        <t><strong>End Group</strong>:
The last absolute group sequence in the dropped range (inclusive).</t>
        <t><strong>Error Code</strong>:
An application-specific error code.
A value of 0 indicates no error; the groups are simply unavailable.</t>
      </section>
      <section anchor="fetch-1">
        <name>FETCH</name>
        <t>FETCH is sent by a subscriber to request a single group from a track.</t>
        <artwork><![CDATA[
FETCH Message {
  Message Length (i)
  Broadcast Path (s)
  Track Name (s)
  Subscriber Priority (8)
  Group Sequence (i)
}
]]></artwork>
        <t><strong>Broadcast Path</strong>:
The broadcast path of the track to fetch from.</t>
        <t><strong>Track Name</strong>:
The name of the track to fetch from.</t>
        <t><strong>Subscriber Priority</strong>:
The priority of the fetch within the session, represented as a u8.
See the <xref target="prioritization"/> section for more information.</t>
        <t><strong>Group Sequence</strong>:
The sequence number of the group to fetch.</t>
        <t>The publisher responds with FRAME messages on the same stream.
The publisher FINs the stream after the last frame, or resets on error.</t>
      </section>
      <section anchor="probe-1">
        <name>PROBE</name>
        <t>PROBE is used to measure the available bitrate of the connection.</t>
        <artwork><![CDATA[
PROBE Message {
  Message Length (i)
  Bitrate (i)
  RTT (i)
}
]]></artwork>
        <t><strong>Bitrate</strong>:
When sent by the subscriber (stream opener): the target bitrate in bits per second that the publisher should pad up to.
When sent by the publisher (responder): the current estimated bitrate in bits per second.
A value of 0 means unknown.</t>
        <t><strong>RTT</strong>:
The smoothed round-trip time in milliseconds, as defined in <xref target="RFC9002"/>.
A value of 0 means unknown.</t>
        <ul empty="true">
          <li>
            <t>NOTE: RTT is included in the PROBE message because not all QUIC implementations and browser WebTransport APIs expose RTT statistics directly. This field may be deprecated once RTT is universally available via the underlying transport API.</t>
          </li>
        </ul>
      </section>
      <section anchor="goaway-1">
        <name>GOAWAY</name>
        <t>A GOAWAY message is sent to initiate a graceful session shutdown with an optional redirect.</t>
        <artwork><![CDATA[
GOAWAY Message {
  Message Length (i)
  New Session URI (s)
}
]]></artwork>
        <t><strong>New Session URI</strong>:
A URI for the peer to reconnect to.
An empty string indicates no redirect; the peer should simply close the session.
A recipient <bcp14>MUST</bcp14> validate the URI against local policy before reconnecting, including verifying the scheme, authority, and port are permitted.
If validation fails, the recipient <bcp14>MUST</bcp14> close the session without reconnecting.</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.
A subscriber <bcp14>MUST</bcp14> handle gaps, potentially caused by congestion.</t>
      </section>
      <section anchor="frame-1">
        <name>FRAME</name>
        <t>The FRAME message is a payload within a group.</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-04">
        <name>moq-lite-04</name>
        <ul spacing="normal">
          <li>
            <t>Renamed ANNOUNCE_PLEASE to ANNOUNCE_INTEREST.</t>
          </li>
          <li>
            <t>ANNOUNCE <tt>Hops</tt> count replaced with explicit <tt>Hop ID</tt> list for loop detection.</t>
          </li>
          <li>
            <t>Added <tt>Exclude Hop</tt> to ANNOUNCE_INTEREST for relay loop avoidance.</t>
          </li>
          <li>
            <t>Added GOAWAY stream for graceful session shutdown and migration.</t>
          </li>
          <li>
            <t>Added RTT to PROBE message. Bitrate and RTT use 0 for unknown.</t>
          </li>
        </ul>
      </section>
      <section anchor="moq-lite-03">
        <name>moq-lite-03</name>
        <ul spacing="normal">
          <li>
            <t>Version negotiated via ALPN (<tt>moq-lite-xx</tt>) instead of SETUP messages.</t>
          </li>
          <li>
            <t>Removed Session, SessionCompat streams and SESSION_CLIENT/SESSION_SERVER/SESSION_UPDATE messages.</t>
          </li>
          <li>
            <t>Unknown stream types reset instead of fatal; enables extension negotiation via stream probing.</t>
          </li>
          <li>
            <t>Added FETCH stream for single group download.</t>
          </li>
          <li>
            <t>Added Start Group and End Group to SUBSCRIBE, SUBSCRIBE_UPDATE, and SUBSCRIBE_OK.</t>
          </li>
          <li>
            <t>Added SUBSCRIBE_DROP on Subscribe stream.</t>
          </li>
          <li>
            <t>Subscribe stream closed (FIN) when all groups accounted for.</t>
          </li>
          <li>
            <t>Added PROBE stream replacing SESSION_UPDATE bitrate.</t>
          </li>
          <li>
            <t>Removed ANNOUNCE_INIT message.</t>
          </li>
          <li>
            <t>Added <tt>Hops</tt> to ANNOUNCE.</t>
          </li>
          <li>
            <t>Added <tt>Subscriber Max Latency</tt> and <tt>Subscriber Ordered</tt> to SUBSCRIBE and SUBSCRIBE_UPDATE.</t>
          </li>
          <li>
            <t>Added <tt>Publisher Priority</tt>, <tt>Publisher Max Latency</tt>, and <tt>Publisher Ordered</tt> to SUBSCRIBE_OK.</t>
          </li>
          <li>
            <t>SUBSCRIBE_OK may be sent multiple times.</t>
          </li>
        </ul>
      </section>
      <section anchor="moq-lite-02">
        <name>moq-lite-02</name>
        <ul spacing="normal">
          <li>
            <t>Added SessionCompat stream.</t>
          </li>
          <li>
            <t>Editorial stuff.</t>
          </li>
        </ul>
      </section>
      <section anchor="moq-lite-01">
        <name>moq-lite-01</name>
        <ul spacing="normal">
          <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-14:</t>
      <ul spacing="normal">
        <li>
          <t>Streams instead of request IDs.</t>
        </li>
        <li>
          <t>Pull only: No unsolicited publishing.</t>
        </li>
        <li>
          <t>FETCH is HTTP-like (single request/response) vs MoqTransport FETCH (multiple groups).</t>
        </li>
        <li>
          <t>Extensions negotiated via stream probing instead of parameters.</t>
        </li>
        <li>
          <t>Both moq-lite and MoqTransport use ALPN for version identification.</t>
        </li>
        <li>
          <t>Names use utf-8 strings instead of byte arrays.</t>
        </li>
        <li>
          <t>Track Namespace is a string, not an array of any array of bytes.</t>
        </li>
        <li>
          <t>Subscriptions default to the latest group, not the latest object.</t>
        </li>
        <li>
          <t>No subgroups</t>
        </li>
        <li>
          <t>No group/object ID gaps</t>
        </li>
        <li>
          <t>No object properties</t>
        </li>
        <li>
          <t>No datagrams</t>
        </li>
        <li>
          <t>No paused subscriptions (forward=0)</t>
        </li>
      </ul>
      <section anchor="deleted-messages">
        <name>Deleted Messages</name>
        <ul spacing="normal">
          <li>
            <t>MAX_SUBSCRIBE_ID</t>
          </li>
          <li>
            <t>REQUESTS_BLOCKED</t>
          </li>
          <li>
            <t>SUBSCRIBE_ERROR</t>
          </li>
          <li>
            <t>UNSUBSCRIBE</t>
          </li>
          <li>
            <t>PUBLISH_DONE</t>
          </li>
          <li>
            <t>PUBLISH</t>
          </li>
          <li>
            <t>PUBLISH_OK</t>
          </li>
          <li>
            <t>PUBLISH_ERROR</t>
          </li>
          <li>
            <t>FETCH_OK</t>
          </li>
          <li>
            <t>FETCH_ERROR</t>
          </li>
          <li>
            <t>FETCH_CANCEL</t>
          </li>
          <li>
            <t>FETCH_HEADER</t>
          </li>
          <li>
            <t>TRACK_STATUS</t>
          </li>
          <li>
            <t>TRACK_STATUS_OK</t>
          </li>
          <li>
            <t>TRACK_STATUS_ERROR</t>
          </li>
          <li>
            <t>PUBLISH_NAMESPACE</t>
          </li>
          <li>
            <t>PUBLISH_NAMESPACE_OK</t>
          </li>
          <li>
            <t>PUBLISH_NAMESPACE_ERROR</t>
          </li>
          <li>
            <t>PUBLISH_NAMESPACE_CANCEL</t>
          </li>
          <li>
            <t>SUBSCRIBE_NAMESPACE_OK</t>
          </li>
          <li>
            <t>SUBSCRIBE_NAMESPACE_ERROR</t>
          </li>
          <li>
            <t>UNSUBSCRIBE_NAMESPACE</t>
          </li>
          <li>
            <t>OBJECT_DATAGRAM</t>
          </li>
        </ul>
      </section>
      <section anchor="renamed-messages">
        <name>Renamed Messages</name>
        <ul spacing="normal">
          <li>
            <t>SUBSCRIBE_NAMESPACE -&gt; ANNOUNCE_INTEREST</t>
          </li>
          <li>
            <t>SUBGROUP_HEADER -&gt; GROUP</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>Request ID</t>
          </li>
          <li>
            <t>Track Alias</t>
          </li>
          <li>
            <t>Group Order</t>
          </li>
          <li>
            <t>Filter Type</t>
          </li>
          <li>
            <t>StartObject</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>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>
    <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="2" month="March" year="2026"/>
          <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-17"/>
      </reference>
      <reference anchor="RFC9002">
        <front>
          <title>QUIC Loss Detection and Congestion Control</title>
          <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
          <author fullname="I. Swett" initials="I." role="editor" surname="Swett"/>
          <date month="May" year="2021"/>
          <abstract>
            <t>This document describes loss detection and congestion control mechanisms for QUIC.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9002"/>
        <seriesInfo name="DOI" value="10.17487/RFC9002"/>
      </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 781?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA719/XIbR5Ln/3iKPukPk1yAEm1vrJfe8R5EQhLPFMkhoZlz
OCbEBroA9qnRDXc3RGLGntiHuAe4Z7lHuSe5/GVmfTUAUvLsnWNiRDSqq7Ky
8vujMBgMem3eFuY4efbOZHmaVJ9Mnfzx/dlJMkjO89Y866WTSW0+0YBF9Uvx
rDdNWzOv6vVxkpezqtfLqmmZLmiCrE5n7aCYrurCrAc0eFDQ+4OX3/aa1WSR
N01ele16SSPPRuPXSfI8SYumonnzMjNLQ/9Xts/6yTMCo63qPC3w4Wz4iv6p
avrrevz6Wa9cLSamPu5lBMVxj6D6ppfWJj1O7vO2d1/VH+d1tVoeJ7R8r5eu
2ruKBieDXkL/zVZFIaCerz6a5IQB5W/MIs2L4+Rj/mAKmjj7r3M8OJxWi16v
rOpF2uafaLkE07YE/+D0MDftjDfZ1mnZLKu6pa+vX5/868uXXx/3esCNe683
GAySdNLQ0Gnb61nUJHmTZKbJ56XJkrZKZmlZrdqkoHeSKeGK8JEcDX64SNJp
XTVN0t7RK/S4Lk172DujkYYOK52bRg6MpljWOaGuzf9KIxcAKqU5dK5+kn6q
8iwv58mdSbNBNSMoSpNMimr6EU/v7/LCJLVplmba4oEppxWPt+czzU1z2Psz
j6OlFmmdF2u/B9pysgAV9RlWhxlsdJmuiyrNknReVk2bT5O0zJJpWiYTTFU9
5PT+ZE2rF+m6eXFyetHgSO+AkI9ldV+YbG6Sakabycy06fOmUgK/bpg8CLZ6
vWyJxJKPZk1AMs4XeZYVptd7npxU5SfCAX3f8MqnZpaXOX/ujQlWeikh8ska
4oP3N2OQHv5NLi757+sRYfh6dIq/b94Oz8/dHz0dcfP28v35qf/Lv3ly+e7d
6OJUXqanSfSo9+zd8Cf6BkA9u7wan11eDM+f0TkTCkEf1XS1ACEQleOAJ0oC
y9oQnSZp0yPsT+t8Qh/onVcnV//7fx19m/ztb/+FaPHro6N//e03/fDd0b98
Sx/u70wpq1UlnZ18pNNa99Ll0qQ1ZkmLgo5mmbfEoDS2SZq76r4kqqkNIfbg
Z2DmL8fJv02my6Nvf9AH2HD00OIsesg423yy8bIgccujLcs4bEbPO5iO4R3+
FH22eA8e/tu/M3MMjr779x96PZDQdQpySYmexnwyEHeg7EnaGGAzeVf9MnYk
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
wP8FZmdxs0p4AAA=

-->

</rfc>
