<?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.24 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-moq-warp-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.0 -->
  <front>
    <title>WARP Streaming Format</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-moq-warp-00"/>
    <author fullname="Will Law">
      <organization>Akamai</organization>
      <address>
        <email>wilaw@akamai.com</email>
      </address>
    </author>
    <author fullname="Luke Curley">
      <organization>Twitch</organization>
      <address>
        <email>kixelated@gmail.com</email>
      </address>
    </author>
    <author fullname="Victor Vasiliev">
      <organization>Google</organization>
      <address>
        <email>vasilvv@google.com</email>
      </address>
    </author>
    <author fullname="Suhas Nandakumar">
      <organization>Cisco</organization>
      <address>
        <email>snandaku@cisco.com</email>
      </address>
    </author>
    <author fullname="Kirill Pugin">
      <organization>Meta</organization>
      <address>
        <email>ikir@meta.com</email>
      </address>
    </author>
    <date year="2025" month="March" day="16"/>
    <area>Applications and Real-Time</area>
    <workgroup>Media Over QUIC</workgroup>
    <keyword>MoQ</keyword>
    <keyword>MoQTransport</keyword>
    <keyword>WARP</keyword>
    <abstract>
      <?line 67?>

<t>This document specifies the WARP Streaming Format, designed to operate on Media Over QUIC Transport.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://moq-wg.github.io/warp-streaming-format/ draft-ietf-moq-warp.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-moq-warp/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Media Over QUIC Working Group mailing list (<eref target="mailto:moq@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/moq/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/moq/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/moq-wg/warp-streaming-format"/>.</t>
    </note>
  </front>
  <middle>
    <?line 72?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>WARP Streaming Format (WARP) is a media format designed to deliver LOC <xref target="LOC"/>
compliant media content over Media Over QUIC Transport (MOQT) <xref target="MoQTransport"/>.
WARP works by fragmenting the bitstream into objects that can be independently
transmitted. WARP leverages a catalog format to describe the output of the
original publisher. WARP specifies how content should be packaged and signaled,
defines how the catalog communicates the content, specifies prioritization
strategies for real-time and workflows for beginning and terminating broadcasts.
WARP also details how end-subscribers may perform adaptive bitrate switching.
WARP is targeted at real-time and interactive levels of live latency.</t>
      <t>This document describes version 1 of the streaming format.</t>
    </section>
    <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?>

<t>This document uses the conventions detailed in Section 1.3 of <xref target="RFC9000"/> when
describing the binary encoding.</t>
    </section>
    <section anchor="mediapackaging">
      <name>Media packaging</name>
      <t>WARP delivers LOC <xref target="LOC"/> packaged media bitstreams.</t>
      <section anchor="loc-packaging">
        <name>LOC packaging</name>
        <t>This specification references Low Overhead Container (LOC) <xref target="LOC"/> to define how
audio and video content is packaged. With this packaging mode, each
EncodedAudioChunk or EncodedVideoChunk sample is placed in a separate MOQT
Object. Samples that belong to the same Group of Pictures (GOP) <bcp14>MUST</bcp14> be placed
within the same MOQT Group.</t>
        <t>When LOC packaging is used for a track, the catalog packaging attribute
(<xref target="packaging"/>) <bcp14>MUST</bcp14> be present and it <bcp14>MUST</bcp14> be populated with a value of "loc".</t>
      </section>
      <section anchor="timealignment">
        <name>Time-alignment</name>
        <t>WARP Tracks <bcp14>MAY</bcp14> be time-aligned. Those that are, are subject to the following
requirements:</t>
        <ul spacing="normal">
          <li>
            <t>Time-aligned tracks <bcp14>MUST</bcp14> be advertised in the catalog as belonging to a common
render group.</t>
          </li>
          <li>
            <t>The render duration of the first media object of each equally numbered MOQT
Group, after decoding, <bcp14>MUST</bcp14> have overlapping presentation time.</t>
          </li>
        </ul>
        <t>A consequence of this restriction is that a WARP receiver <bcp14>SHOULD</bcp14> be able to
cleanly switch between time-aligned media tracks at group boundaries.</t>
      </section>
      <section anchor="contentprotection">
        <name>Content protection and encryption</name>
        <t>ToDo - content protection for LOC-packaged content.</t>
      </section>
    </section>
    <section anchor="catalog">
      <name>Catalog</name>
      <t>A Catalog is a MOQT Track that provides information about the other tracks being
produced by a WARP publisher. A Catalog is used by WARP publishers for
advertising their output and for subscribers in consuming that output. The
payload of the Catalog object is opaque to Relays and can be end-to-end
encrypted. The Catalog provides the names and namespaces of the tracks being
produced, along with therelationship between tracks, properties of the tracks
that consumers may use for selection and any relevant initialization data.</t>
      <t>The catalog track <bcp14>MUST</bcp14> have a case-sensitive Track Name of "catalog".</t>
      <t>A catalog object <bcp14>MAY</bcp14> be independent of other catalog objects or it <bcp14>MAY</bcp14> represent
a delta update of a prior catalog object. The first catalog object published
within a new group <bcp14>MUST</bcp14> be independent.  A catalog object <bcp14>SHOULD</bcp14> only be
published only when the availability of tracks changes.</t>
      <t>Each catalog update <bcp14>MUST</bcp14> be mapped to a discreet MOQT Object.</t>
      <section anchor="catalog-fields">
        <name>Catalog Fields</name>
        <t>A catalog is a JSON <xref target="JSON"/> document, comprised of a series of mandatory and
optional fields. At a minimum, a catalog <bcp14>MUST</bcp14> provide all mandatory fields and
a 'tracks' field. A producer <bcp14>MAY</bcp14> add additional fields to the ones described in
this draft. Custom field names <bcp14>MUST NOT</bcp14> collide with field names described in
this draft. The order of field names within the JSON document is not important.</t>
        <t>A parser <bcp14>MUST</bcp14> ignore fields it does not understand.</t>
        <t>Table 1 provides an overview of all fields defined by this document.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Name</th>
              <th align="left">Definition</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">WARP version</td>
              <td align="left">version</td>
              <td align="left">
                <xref target="warpversion"/></td>
            </tr>
            <tr>
              <td align="left">Supports delta updates</td>
              <td align="left">supportsDeltaUpdates</td>
              <td align="left">
                <xref target="supportsdeltaupdates"/></td>
            </tr>
            <tr>
              <td align="left">Tracks</td>
              <td align="left">tracks</td>
              <td align="left">
                <xref target="tracks"/></td>
            </tr>
            <tr>
              <td align="left">Track namespace</td>
              <td align="left">namespace</td>
              <td align="left">
                <xref target="tracknamespace"/></td>
            </tr>
            <tr>
              <td align="left">Track name</td>
              <td align="left">name</td>
              <td align="left">
                <xref target="trackname"/></td>
            </tr>
            <tr>
              <td align="left">Packaging</td>
              <td align="left">packaging</td>
              <td align="left">
                <xref target="packaging"/></td>
            </tr>
            <tr>
              <td align="left">Track label</td>
              <td align="left">label</td>
              <td align="left">
                <xref target="tracklabel"/></td>
            </tr>
            <tr>
              <td align="left">Render group</td>
              <td align="left">renderGroup</td>
              <td align="left">
                <xref target="rendergroup"/></td>
            </tr>
            <tr>
              <td align="left">Alternate group</td>
              <td align="left">altGroup</td>
              <td align="left">
                <xref target="altgroup"/></td>
            </tr>
            <tr>
              <td align="left">Initialization data</td>
              <td align="left">initData</td>
              <td align="left">
                <xref target="initdata"/></td>
            </tr>
            <tr>
              <td align="left">Dependencies</td>
              <td align="left">depends</td>
              <td align="left">
                <xref target="dependencies"/></td>
            </tr>
            <tr>
              <td align="left">Temporal ID</td>
              <td align="left">temporalId</td>
              <td align="left">
                <xref target="temporalid"/></td>
            </tr>
            <tr>
              <td align="left">Spatial ID</td>
              <td align="left">spatialId</td>
              <td align="left">
                <xref target="spatialid"/></td>
            </tr>
            <tr>
              <td align="left">Codec</td>
              <td align="left">codec</td>
              <td align="left">
                <xref target="codec"/></td>
            </tr>
            <tr>
              <td align="left">Mime type</td>
              <td align="left">mimeType</td>
              <td align="left">
                <xref target="mimetype"/></td>
            </tr>
            <tr>
              <td align="left">Framerate</td>
              <td align="left">framerate</td>
              <td align="left">
                <xref target="framerate"/></td>
            </tr>
            <tr>
              <td align="left">Bitrate</td>
              <td align="left">bitrate</td>
              <td align="left">
                <xref target="bitrate"/></td>
            </tr>
            <tr>
              <td align="left">Width</td>
              <td align="left">width</td>
              <td align="left">
                <xref target="width"/></td>
            </tr>
            <tr>
              <td align="left">Height</td>
              <td align="left">height</td>
              <td align="left">
                <xref target="height"/></td>
            </tr>
            <tr>
              <td align="left">Audio sample rate</td>
              <td align="left">samplerate</td>
              <td align="left">
                <xref target="audiosamplerate"/></td>
            </tr>
            <tr>
              <td align="left">Channel configuration</td>
              <td align="left">channelConfig</td>
              <td align="left">
                <xref target="channelconfiguration"/></td>
            </tr>
            <tr>
              <td align="left">Display width</td>
              <td align="left">displayWidth</td>
              <td align="left">
                <xref target="displaywidth"/></td>
            </tr>
            <tr>
              <td align="left">Display height</td>
              <td align="left">displayHeight</td>
              <td align="left">
                <xref target="displayheight"/></td>
            </tr>
            <tr>
              <td align="left">Language</td>
              <td align="left">lang</td>
              <td align="left">
                <xref target="language"/></td>
            </tr>
          </tbody>
        </table>
        <t>Table 2 defines the allowed locations for these fields within the document</t>
        <table>
          <thead>
            <tr>
              <th align="left">Location</th>
              <th align="left">Allowed locations for the field</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">R</td>
              <td align="left">The Root of the JSON object</td>
            </tr>
            <tr>
              <td align="left">T</td>
              <td align="left">Track object</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="warpversion">
        <name>WARP version</name>
        <t>Location: R    Required: Yes    JSON Type: Number</t>
        <t>Specifies the version of WARP referenced by this catalog. There is no guarantee
that future catalog versions are backwards compatible and field definitions and
interpretation may change between versions. A subscriber <bcp14>MUST NOT</bcp14> attempt to
parse a catalog version which it does not understand.</t>
        <section anchor="supportsdeltaupdates">
          <name>Supports delta updates</name>
          <t>Location: R    Required: Optional    JSON Type: Boolean</t>
          <t>A Boolean that if true indicates that the publisher <bcp14>MAY</bcp14> issue incremental
(delta) updates - see <xref target="patch"/>. If false or absent, then the publisher
guarantees that they will NOT issue any incremental updates and that any
future updates to the catalog will be independent. The default value is
false. This field <bcp14>MUST</bcp14> be present if its value is true, but may be omitted
if the value is false.</t>
        </section>
        <section anchor="tracks">
          <name>Tracks</name>
          <t>Location: R    Required: Yes    JSON Type: Array</t>
          <t>An array of track objects <xref target="trackobject"/>.</t>
        </section>
        <section anchor="trackobject">
          <name>Tracks object</name>
          <t>A track object is a collection of fields whose location is specified 'T' in
Table 2.</t>
        </section>
        <section anchor="tracknamespace">
          <name>Track namespace</name>
          <t>Location: TFC    Required: Optional    JSON Type: String</t>
          <t>The name space under which the track name is defined. See section 2.3 of
<xref target="MoQTransport"/>. The track namespace is optional. If it is not declared within
a track, then each track <bcp14>MUST</bcp14> inherit the namespace of the catalog track. A
namespace declared in a track object overwrites any inherited name space.</t>
        </section>
        <section anchor="trackname">
          <name>Track name</name>
          <t>Location: T    Required: Yes   JSON Type: String</t>
          <t>A string defining the name of the track. See section 2.3 of <xref target="MoQTransport"/>.
Within the catalog, track names <bcp14>MUST</bcp14> be unique per namespace.</t>
        </section>
        <section anchor="packaging">
          <name>Packaging</name>
          <t>Location: T    Required: Yes   JSON Type: String</t>
          <t>A string defining the type of payload encapsulation. Allowed values are strings
as defined in Table 3.</t>
          <t>Table 3: Allowed packaging values</t>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="left">Value</th>
                <th align="left">Draft</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">LOC</td>
                <td align="left">"loc"</td>
                <td align="left">See RFC XXXX</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="tracklabel">
          <name>Track label</name>
          <t>Location: TF    Required: Optional   JSON Type: String</t>
          <t>A string defining a human-readable label for the track. Examples might be
"Overhead camera view" or "Deutscher Kommentar". Note that the <xref target="JSON"/> spec
requires UTF-8 support by decoders.</t>
        </section>
        <section anchor="rendergroup">
          <name>Render group</name>
          <t>Location: TF    Required: Optional   JSON Type: Number</t>
          <t>An integer specifying a group of tracks which are designed to be rendered
together. Tracks with the same group number <bcp14>SHOULD</bcp14> be rendered simultaneously,
are usually time-aligned and are designed to accompany one another. A common
example would be tying together audio and video tracks.</t>
        </section>
        <section anchor="altgroup">
          <name>Alternate group</name>
          <t>Location: TF    Required: Optional   JSON Type: Number</t>
          <t>An integer specifying a group of tracks which are alternate versions of
one-another. Alternate tracks represent the same media content, but differ in
their selection properties. Alternate tracks <bcp14>SHOULD</bcp14> have matching framerate
<xref target="framerate"/> and media time sequences. A subscriber typically subscribes to
one track from a set of tracks specifying the same alternate group number. A
common example would be a set video tracks of the same content offered in
alternate bitrates.</t>
        </section>
        <section anchor="initdata">
          <name>Initialization data</name>
          <t>Location: TF    Required: Optional   JSON Type: String</t>
          <t>A string holding Base64 <xref target="BASE64"/> encoded initialization data for the track.</t>
        </section>
        <section anchor="dependencies">
          <name>Dependencies</name>
          <t>Location: T    Required: Optional   JSON Type: Array</t>
          <t>Certain tracks may depend on other tracks for decoding. Dependencies holds an
array of track names <xref target="trackname"/> on which the current track is dependent.
Since only the track name is signaled, the namespace of the dependencies is
assumed to match that of the track declaring the dependencies.</t>
        </section>
        <section anchor="temporalid">
          <name>Temporal ID</name>
          <t>Location: T    Required: Optional   JSON Type: Number</t>
          <t>A number identifying the temporal layer/sub-layer encoding of the track,
starting with 0 for the base layer, and increasing with higher temporal
fidelity.</t>
        </section>
        <section anchor="spatialid">
          <name>Spatial ID</name>
          <t>Location: T    Required: Optional   JSON Type: Number</t>
          <t>A number identifying the spatial layer encoding of the track, starting with 0
for the base layer, and increasing with higher fidelity.</t>
        </section>
        <section anchor="codec">
          <name>Codec</name>
          <t>Location: T    Required: Optional   JSON Type: String</t>
          <t>A string defining the codec used to encode the track.
For LOC packaged content, the string codec registrations are defined in Sect 3
and Section 4 of <xref target="WEBCODECS-CODEC-REGISTRY"/>.</t>
        </section>
        <section anchor="mimetype">
          <name>Mimetype</name>
          <t>Location: T    Required: Optional   JSON Type: String</t>
          <t>A string defining the mime type <xref target="MIME"/> of the track.</t>
        </section>
        <section anchor="framerate">
          <name>Framerate</name>
          <t>Location: T    Required: Optional   JSON Type: Number</t>
          <t>A number defining the video framerate of the track, expressed as frames per
second.</t>
        </section>
        <section anchor="bitrate">
          <name>Bitrate</name>
          <t>Location: T    Required: Optional   JSON Type: Number</t>
          <t>A number defining the bitrate of track, expressed in bits per second.</t>
        </section>
        <section anchor="width">
          <name>Width</name>
          <t>Location: T    Required: Optional   JSON Type: Number</t>
          <t>A number expressing the encoded width of the video frames in pixels.</t>
        </section>
        <section anchor="height">
          <name>Height</name>
          <t>Location: T    Required: Optional   JSON Type: Number</t>
          <t>A number expressing the encoded height of the video frames in pixels.</t>
        </section>
        <section anchor="audiosamplerate">
          <name>Audio sample rate</name>
          <t>Location: T    Required: Optional   JSON Type: Number</t>
          <t>The number of audio frame samples per second. This property <bcp14>SHOULD</bcp14> only
accompany audio codecs.</t>
        </section>
        <section anchor="channelconfiguration">
          <name>Channel configuration</name>
          <t>Location: T    Required: Optional   JSON Type: String</t>
          <t>A string specifying the audio channel configuration. This property <bcp14>SHOULD</bcp14> only
accompany audio codecs. A string is used in order to provide the flexibility to
describe complex channel configurations for multi-channel and Next Generation
Audio schemas.</t>
        </section>
        <section anchor="displaywidth">
          <name>Display width</name>
          <t>Location: T    Required: Optional   JSON Type: Number</t>
          <t>A number expressing the intended display width of the track content in pixels.</t>
        </section>
        <section anchor="displayheight">
          <name>Display height</name>
          <t>Location: T    Required: Optional   JSON Type: Number</t>
          <t>A number expressing the intended display height of the track content in pixels.</t>
        </section>
        <section anchor="language">
          <name>Language</name>
          <t>Location: T    Required: Optional   JSON Type: String</t>
          <t>A string defining the dominant language of the track. The string <bcp14>MUST</bcp14> be one of
the standard Tags for Identifying Languages as defined by <xref target="LANG"/>.</t>
        </section>
      </section>
      <section anchor="patch">
        <name>Catalog Patch</name>
        <t>A catalog update might contain incremental changes. This is a useful property if
many tracks may be initially declared but then there are small changes to a
subset of tracks. The producer can issue a patch to describe these small
changes. Changes are described incrementally, meaning that a patch can itself
modify a prior patch. Patching leverages JSON PATCH <xref target="JSON-PATCH"/> to modify the
catalog.   JSON Patch is a format for expressing a sequence of operations to
apply to a target JSON document.</t>
        <t>The following rules <bcp14>MUST</bcp14> be followed in processing patches:</t>
        <ul spacing="normal">
          <li>
            <t>The target JSON to be modified is the JSON document described by the preceding
<xref target="MoQTransport"/> Object in the Catalog track, post any patching that may have
been applied to that Object.</t>
          </li>
          <li>
            <t>A Catalog Patch is identified by having a single array at the root level,
holding a series of JSON objects, each object representing a single operation
to be applied to the target JSON document.</t>
          </li>
          <li>
            <t>Operations are applied sequentially in the order they appear in the array.
Each operation in the sequence is applied to the target document; the
resulting document becomes the target of the next operation.  Evaluation
continues until all operations are successfully applied or until an error
condition is encountered.</t>
          </li>
          <li>
            <t>Track namespaces and track names may not be changed across patch updates
To change either namespace or name, remove the track and then add a new track
with matching properties and the new namespace and name.</t>
          </li>
          <li>
            <t>Contents of the track selection properties object may not be varied across
updates. To adjust a track selection property, the track must first be removed
and then added with the new selection properties and a different name.</t>
          </li>
        </ul>
      </section>
      <section anchor="catalog-examples">
        <name>Catalog Examples</name>
        <t>The following section provides non-normative JSON examples of various catalogs
compliant with this draft.</t>
        <section anchor="time-aligned-audiovideo-tracks-with-single-quality">
          <name>Time-aligned Audio/Video Tracks with single quality</name>
          <t>This example shows catalog for a media producer capable of sending LOC packaged,
time-aligned audio and video tracks.</t>
          <sourcecode type="json"><![CDATA[
{
  "version": 1,
  "tracks": [
    {
      "name": "video",
      "namespace": "conference.example.com/conference123/alice",
      "packaging": "loc",
      "renderGroup": 1,
      "codec":"av01.0.08M.10.0.110.09",
      "width":1920,
      "height":1080,
      "framerate":30,
      "bitrate":1500000
    },
    {
      "name": "audio",
      "namespace": "conference.example.com/conference123/alice",
      "packaging": "loc",
      "renderGroup": 1,
      "codec":"opus",
      "samplerate":48000,
      "channelConfig":"2",
      "bitrate":32000
    }
   ]
}

]]></sourcecode>
        </section>
        <section anchor="simulcast-video-tracks-3-alternate-qualities-along-with-audio">
          <name>Simulcast video tracks - 3 alternate qualities along with audio</name>
          <t>This example shows catalog for a media producer capable of sending 3
time-aligned video tracks for high definition, low definition and medium
definition video qualities, along with an audio track. In this example the
namespace is absent, which infers that each track must inherit the namespace
of the catalog. Additionally this example shows the presence of the
supportsDeltaUpdates flag.</t>
          <sourcecode type="json"><![CDATA[
{
  "version": 1,
  "supportsDeltaUpdates": true,
  "tracks":[
    {
      "name": "hd",
      "renderGroup": 1,
      "packaging": "loc",
      "codec":"av01",
      "width":1920,
      "height":1080,
      "bitrate":5000000,
      "framerate":30,
      "altGroup":1
    },
    {
      "name": "md",
      "renderGroup": 1,
      "packaging": "loc",
      "codec":"av01",
      "width":720,
      "height":640,
      "bitrate":3000000,
      "framerate":30,
      "altGroup":1
    },
    {
      "name": "sd",
      "renderGroup": 1,
      "packaging": "loc",
      "codec":"av01",
      "width":192,
      "height":144,
      "bitrate":500000,
      "framerate":30,
      "altGroup":1
    },
    {
      "name": "audio",
      "renderGroup": 1,
      "packaging": "loc",
      "codec":"opus",
      "samplerate":48000,
      "channelConfig":"2",
      "bitrate":32000
    }
   ]
}
]]></sourcecode>
        </section>
        <section anchor="svc-video-tracks-with-2-spatial-and-2-temporal-qualities">
          <name>SVC video tracks with 2 spatial and 2 temporal qualities</name>
          <t>This example shows catalog for a media producer capable
of sending scalable video codec with 2 spatial and 2 temporal
layers with a dependency relation as shown below:</t>
          <sourcecode type="ascii-figure"><![CDATA[
                  +----------+
     +----------->|  S1T1    |
     |            | 1080p30  |
     |            +----------+
     |                  ^
     |                  |
+----------+            |
|  S1TO    |            |
| 1080p15  |            |
+----------+      +-----+----+
      ^           |  SOT1    |
      |           | 480p30   |
      |           +----------+
      |               ^
+----------+          |
|  SOTO     |         |
| 480p15    |---------+
+----------+
]]></sourcecode>
          <t>The corresponding catalog uses "depends" attribute to
express the track relationships.</t>
          <sourcecode type="json"><![CDATA[
{
  "version": 1,
  "supportsDeltaUpdates": true,
  "tracks":[
    {
      "name": "480p15",
      "namespace": "conference.example.com/conference123/alice",
      "renderGroup": 1,
      "packaging": "loc",
      "codec":"av01.0.01M.10.0.110.09",
      "width":640,
      "height":480,
      "bitrate":3000000,
      "framerate":15
    },
    {
      "name": "480p30",
      "namespace": "conference.example.com/conference123/alice",
      "renderGroup": 1,
      "packaging": "loc",
      "codec":"av01.0.04M.10.0.110.09",
      "width":640,
      "height":480,
      "bitrate":3000000,
      "framerate":30,
      "depends": ["480p15"]
    },
    {
      "name": "1080p15",
      "namespace": "conference.example.com/conference123/alice",
      "renderGroup": 1,
      "packaging": "loc",
      "codec":"av01.0.05M.10.0.110.09",
      "width":1920,
      "height":1080,
      "bitrate":3000000,
      "framerate":15,
      "depends":["480p15"]
    },

    {
      "name": "1080p30",
      "namespace": "conference.example.com/conference123/alice",
      "renderGroup": 1,
      "packaging": "loc",
      "codec":"av01.0.08M.10.0.110.09",
      "width":1920,
      "height":1080,
      "bitrate":5000000,
      "framerate":30,
      "depends": ["480p30", "1080p15"]
    },
    {
      "name": "audio",
      "namespace": "conference.example.com/conference123/alice",
      "renderGroup": 1,
      "packaging": "loc",
      "codec":"opus",
      "samplerate":48000,
      "channelConfig":"2",
      "bitrate":32000
    }
   ]
}
]]></sourcecode>
        </section>
        <section anchor="patch-update-adding-a-track">
          <name>Patch update adding a track</name>
          <t>This example shows catalog for the media producer adding a slide track to an
established video conference.</t>
          <sourcecode type="json"><![CDATA[
[
    {
        "op": "add",
        "path": "/tracks/-",
        "value": {
            "name": "slides",
            "codec": "av01.0.08M.10.0.110.09",
            "width": 1920,
            "height": 1080,
            "framerate": 15,
            "bitrate": 750000,
            "renderGroup": 1
        }
    }
]


]]></sourcecode>
        </section>
        <section anchor="patch-update-removing-a-track">
          <name>Patch update removing a track</name>
          <t>This example shows patch catalog update for a media producer removing the track
from an established video conference.</t>
          <sourcecode type="json"><![CDATA[
[
  { "op": "remove", "path": "/tracks/2"}
]
]]></sourcecode>
        </section>
        <section anchor="patch-update-removing-all-tracks-and-terminating-the-broadcast">
          <name>Patch update removing all tracks and terminating the broadcast</name>
          <t>This example shows a patch catalog update for a media producer removing all
tracks and terminating the broadcast.</t>
          <sourcecode type="json"><![CDATA[
[
  { "op": "remove", "path": "/tracks/2"},
  { "op": "remove", "path": "/tracks/1"},
  { "op": "remove", "path": "/tracks/0"},
]

]]></sourcecode>
        </section>
        <section anchor="time-aligned-audiovideo-tracks-with-custom-field-values">
          <name>Time-aligned Audio/Video Tracks with custom field values</name>
          <t>This example shows catalog for a media producer capable of sending LOC packaged,
time-aligned audio and video tracks along with custom fields in each track
description.</t>
          <sourcecode type="json"><![CDATA[
{
  "version": 1,
  "tracks": [
    {
      "name": "video",
      "namespace": "conference.example.com/conference123/alice",
      "packaging": "loc",
      "renderGroup": 1,
      "codec":"av01.0.08M.10.0.110.09",
      "width":1920,
      "height":1080,
      "framerate":30,
      "bitrate":1500000,
      "com.example-billing-code": 3201,
      "com.example-tier": "premium",
      "com.example-debug": "h349835bfkjfg82394d945034jsdfn349fns"
    },
    {
      "name": "audio",
      "namespace": "conference.example.com/conference123/alice",
      "packaging": "loc",
      "renderGroup": 1,
      "codec":"opus",
      "samplerate":48000,
      "channelConfig":"2",
      "bitrate":32000
    }
   ]
}

]]></sourcecode>
        </section>
      </section>
    </section>
    <section anchor="media-transmission">
      <name>Media transmission</name>
      <t>The MOQT Groups and MOQT Objects need to be mapped to MOQT Streams. Irrespective
of the <xref target="mediapackaging"/> in place, each MOQT Object <bcp14>MUST</bcp14> be mapped to a new
MOQT Stream.</t>
    </section>
    <section anchor="timeline-track">
      <name>Timeline track</name>
      <t>The timeline track provides data about the previously published groups and their
relationship to wallclock time, media time and associated timed-metadata.
Timeline tracks allow players to seek to precise points behind the live head in
a live broadcast, or for random access in a VOD asset. A timeline track may also
be used to insert events at media times which do not correlate with Object
boundaries. Timeline tracks are optional. Multiple timeline tracks <bcp14>MAY</bcp14> exist
inside a catalog.</t>
      <section anchor="timeline-track-payload">
        <name>Timeline track payload</name>
        <t>The payload of a timeline track is a UTF-8 encoded CSV text file. This payload
is formatted according to RFC4180 "Common Format and MIME Type for
Comma-Separated Values (CSV)" Files <xref target="RFC4180"/>. The separator is a comma and
each line is separated by a carriage return. The mime-type of a timeline track
<bcp14>MUST</bcp14> be specified as "text/csv" in the catalog.</t>
        <t>Each timeline track begins with a header row of MEDIA_PTS,GROUP_ID,OBJECT_ID,
WALLCLOCK,METADATA. This row defines the 5 columns of data within each record.</t>
        <ul spacing="normal">
          <li>
            <t>MEDIA_PTS: a media timestamp rounded to the nearest millisecond. This entry
<bcp14>MUST</bcp14> not be empty. If the Object ID entry is present, then this value <bcp14>MUST</bcp14>
match the media presentation timestamp of the first media sample in the
referenced Object.</t>
          </li>
          <li>
            <t>GROUP_ID: the MOQT Group ID. This entry <bcp14>MAY</bcp14> be empty.</t>
          </li>
          <li>
            <t>OBJECT_ID: the MOQT Object ID. This entry <bcp14>MAY</bcp14> be empty.</t>
          </li>
          <li>
            <t>WALLCLOCK: the wallclock time at which the media was encoded, expressed as
the number of milliseconds that have elapsed since January 1, 1970
(midnight UTC/GMT). For VOD assets, or if the wallclock time is not known,
the value <bcp14>SHOULD</bcp14> be 0.</t>
          </li>
          <li>
            <t>METADATA: a flexible field holding arbitrary string metadata. This field may
be empty. If not empty, it <bcp14>MUST</bcp14> be enclosed in double quotes. A double-quote
appearing inside this field <bcp14>MUST</bcp14> be escaped by preceding it with another
double quote.</t>
          </li>
        </ul>
      </section>
      <section anchor="timeline-catalog-requirements">
        <name>Timeline Catalog requirements</name>
        <t>A timeline track <bcp14>MUST</bcp14> carry a 'type' identifier in the Catalog with a value of
"timeline". A timeline track <bcp14>MUST</bcp14> carry a 'dependencies' attribute which
contains an array of all track names to which the timeline track applies.</t>
      </section>
      <section anchor="timeline-track-updating">
        <name>Timeline track updating.</name>
        <t>The publisher <bcp14>MUST</bcp14> publish a complete timeline in the first MOQT Object of each
MOQT Group. The publisher <bcp14>MAY</bcp14> publish incremental updates in the second and
subsequent Objects within each GROUP. Incremental updates only contain timeline
events since the last timeline Object. Group duration <bcp14>SHOULD</bcp14> not exceed 30
seconds.</t>
      </section>
    </section>
    <section anchor="workflow">
      <name>Workflow</name>
      <t>A WARP publisher <bcp14>MUST</bcp14> publish a catalog track object before publishing any media
track objects.</t>
      <t>At the completion of a session, a publisher <bcp14>MUST</bcp14> publish a catalog update that
removes all currently active tracks.  This action <bcp14>SHOULD</bcp14> be interpreted by
receivers to mean that the publish session is complete.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>ToDo</t>
    </section>
    <section anchor="IANA">
      <name>IANA Considerations</name>
      <t>This document creates a new entry in the "MoQ Streaming Format" Registry
(see <xref target="MoQTransport"/> Sect 8).  The type value is 0x001, the name is
"WARP Streaming Format" and the RFC is XXX.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="MoQTransport">
        <front>
          <title>Media over QUIC Transport</title>
          <author fullname="Luke Curley" initials="L." surname="Curley">
            <organization>Discord</organization>
          </author>
          <author fullname="Kirill Pugin" initials="K." surname="Pugin">
            <organization>Meta</organization>
          </author>
          <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>
          <date day="8" month="July" year="2024"/>
          <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-05"/>
      </reference>
      <reference anchor="LOC">
        <front>
          <title>Low Overhead Media Container</title>
          <author fullname="Mo Zanaty" initials="M." surname="Zanaty">
            <organization>Cisco</organization>
          </author>
          <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
            <organization>Cisco</organization>
          </author>
          <author fullname="Peter Thatcher" initials="P." surname="Thatcher">
            <organization>Microsoft</organization>
          </author>
          <date day="4" month="March" year="2024"/>
          <abstract>
            <t>   This specification describes a media container format for encoded and
   encrypted audio and video media data to be used primarily for
   interactive Media over QUIC transport (MOQ), with the goal of it
   being a low-overhead format.  It also defines the LOC Streaming
   Format for the MOQ Common Catalog format for publishers to annouce
   and describe their LOC tracks and for subscribers to consume them.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-mzanaty-moq-loc-03"/>
      </reference>
      <reference anchor="BASE64">
        <front>
          <title>The Base16, Base32, and Base64 Data Encodings</title>
          <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
          <date month="October" year="2006"/>
          <abstract>
            <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="4648"/>
        <seriesInfo name="DOI" value="10.17487/RFC4648"/>
      </reference>
      <reference anchor="JSON">
        <front>
          <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
          <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
          <date month="December" year="2017"/>
          <abstract>
            <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
            <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="90"/>
        <seriesInfo name="RFC" value="8259"/>
        <seriesInfo name="DOI" value="10.17487/RFC8259"/>
      </reference>
      <reference anchor="LANG">
        <front>
          <title>Tags for Identifying Languages</title>
          <author fullname="A. Phillips" initials="A." role="editor" surname="Phillips"/>
          <author fullname="M. Davis" initials="M." role="editor" surname="Davis"/>
          <date month="September" year="2009"/>
          <abstract>
            <t>This document describes the structure, content, construction, and semantics of language tags for use in cases where it is desirable to indicate the language used in an information object. It also describes how to register values for use in language tags and the creation of user-defined extensions for private interchange. 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="47"/>
        <seriesInfo name="RFC" value="5646"/>
        <seriesInfo name="DOI" value="10.17487/RFC5646"/>
      </reference>
      <reference anchor="MIME">
        <front>
          <title>Media Type Specifications and Registration Procedures</title>
          <author fullname="N. Freed" initials="N." surname="Freed"/>
          <author fullname="J. Klensin" initials="J." surname="Klensin"/>
          <author fullname="T. Hansen" initials="T." surname="Hansen"/>
          <date month="January" year="2013"/>
          <abstract>
            <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="13"/>
        <seriesInfo name="RFC" value="6838"/>
        <seriesInfo name="DOI" value="10.17487/RFC6838"/>
      </reference>
      <reference anchor="JSON-PATCH">
        <front>
          <title>JavaScript Object Notation (JSON) Patch</title>
          <author fullname="P. Bryan" initials="P." role="editor" surname="Bryan"/>
          <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
          <date month="April" year="2013"/>
          <abstract>
            <t>JSON Patch defines a JSON document structure for expressing a sequence of operations to apply to a JavaScript Object Notation (JSON) document; it is suitable for use with the HTTP PATCH method. The "application/json-patch+json" media type is used to identify such patch documents.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6902"/>
        <seriesInfo name="DOI" value="10.17487/RFC6902"/>
      </reference>
      <reference anchor="RFC5226">
        <front>
          <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
          <author fullname="T. Narten" initials="T." surname="Narten"/>
          <author fullname="H. Alvestrand" initials="H." surname="Alvestrand"/>
          <date month="May" year="2008"/>
          <abstract>
            <t>Many protocols make use of identifiers consisting of constants and other well-known values. Even after a protocol has been defined and deployment has begun, new values may need to be assigned (e.g., for a new option type in DHCP, or a new encryption or authentication transform for IPsec). To ensure that such quantities have consistent values and interpretations across all implementations, their assignment must be administered by a central authority. For IETF protocols, that role is provided by the Internet Assigned Numbers Authority (IANA).</t>
            <t>In order for IANA to manage a given namespace prudently, it needs guidelines describing the conditions under which new values can be assigned or when modifications to existing values can be made. If IANA is expected to play a role in the management of a namespace, IANA must be given clear and concise instructions describing that role. This document discusses issues that should be considered in formulating a policy for assigning values to a namespace and provides guidelines for authors on the specific text that must be included in documents that place demands on IANA.</t>
            <t>This document obsoletes RFC 2434. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5226"/>
        <seriesInfo name="DOI" value="10.17487/RFC5226"/>
      </reference>
      <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="RFC4180">
        <front>
          <title>Common Format and MIME Type for Comma-Separated Values (CSV) Files</title>
          <author fullname="Y. Shafranovich" initials="Y." surname="Shafranovich"/>
          <date month="October" year="2005"/>
          <abstract>
            <t>This RFC documents the format used for Comma-Separated Values (CSV) files and registers the associated MIME type "text/csv". This memo provides information for the Internet community.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="4180"/>
        <seriesInfo name="DOI" value="10.17487/RFC4180"/>
      </reference>
      <reference anchor="WEBCODECS-CODEC-REGISTRY" target="https://www.w3.org/TR/webcodecs-codec-registry/">
        <front>
          <title>WebCodecs Codec Registry</title>
          <author>
            <organization/>
          </author>
          <date year="2024" month="September"/>
        </front>
      </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 777?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <ul spacing="normal">
        <li>
          <t>the MoQ Workgroup and mailing lists.</t>
        </li>
      </ul>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
