<?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.19 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-law-moq-warpstreamingformat-03" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.2 -->
  <front>
    <title>WARP Streaming Format</title>
    <seriesInfo name="Internet-Draft" value="draft-law-moq-warpstreamingformat-03"/>
    <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="2024" month="October" 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://wilaw.github.io/MoQ/draft-law-moq-warpmedia.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-law-moq-warpstreamingformat/"/>.
      </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/wilaw/MoQ"/>.</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>Table 2 provides values for the catalog "packaging" field with LOC packaging.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Packaging field value</th>
              <th align="left">Condition</th>
              <th align="left">Explanation</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">loc</td>
              <td align="left">
                <xref target="LOC"/> packagin is active</td>
              <td align="left">Each EncodedAudioChunk or EncodedVideoChunk sample is placed in a separate MOQT Object</td>
            </tr>
          </tbody>
        </table>
      </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 presentation time of the first media sample contained within the first MOQT Object of each equally numbered MOQT Group <bcp14>MUST</bcp14> be identical.</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 the
relationship 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
gaurantees 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="CMAFpackaging">
        <front>
          <title>CMAF Packaging for moq-transport</title>
          <author fullname="Will Law" initials="W." surname="Law">
            <organization>Akamai</organization>
          </author>
          <author fullname="Luke Curley" initials="L." surname="Curley">
         </author>
          <date day="21" month="July" year="2024"/>
          <abstract>
            <t>   Packaging CMAF content for use with MoQ Transport [MoQTransport]

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-wilaw-moq-cmafpackaging-01"/>
      </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 736?>

<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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
Dt9P1UlKecEJ/rmA6H8BNDPy1mxoAAA=

-->

</rfc>
