<?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.17 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-moq-catalogformat-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.22.0 -->
  <front>
    <title>Common Catalog Format for moq-transport</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-moq-catalogformat-01"/>
    <author fullname="Suhas Nandakumar">
      <organization>Cisco</organization>
      <address>
        <email>snandaku@cisco.com</email>
      </address>
    </author>
    <author fullname="Will Law">
      <organization>Akamai</organization>
      <address>
        <email>wilaw@akamai.com</email>
      </address>
    </author>
    <author fullname="Mo Zanaty">
      <organization>Cisco</organization>
      <address>
        <email>mzanaty@cisco.com</email>
      </address>
    </author>
    <date year="2024" month="July" day="08"/>
    <area>Applications and Real-Time</area>
    <workgroup>Media Over QUIC</workgroup>
    <keyword>moq</keyword>
    <keyword>warp</keyword>
    <keyword>catalog</keyword>
    <abstract>
      <?line 63?>

<t>This specification defines a Common Catalog specification for streaming formats
implementing the MOQ Transport Protocol <xref target="MoQTransport"/>. Media over QUIC
Transport (MOQT) defines a publish/subscribe based unified media delivery
protocol for delivering media for streaming and interactive applications over
QUIC. The catalog describes the content made available by a publisher, including
information necessary for subscribers to select, subscribe and initialize
tracks.</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/catalog-format/ draft-ietf-moq-catalogformat.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-moq-catalogformat/"/>.
      </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/catalog-format"/>.</t>
    </note>
  </front>
  <middle>
    <?line 73?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>MOQT <xref target="MoQTransport"/> defines a transport protocol that utilizes the QUIC network
protocol [QUIC] and WebTransport[WebTrans] to move objects between publishers,
subscribers and intermediaries. Tracks are identified using a tuple of the Track
Namespace and the Track Name. A MOQT Catalog is a specialized track which
captures details of all the tracks output by a publisher, including the
identities, media profiles, initialization data and inter-track relationships.
The mapping of media characteristics of objects with the tracks, as well as
relative prioritization of those objects, are captured in separate MoQ
Streaming Format specifications. This specification defines a JSON encoded
catalog.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC 2119 [RFC2119].</t>
    </section>
    <section anchor="catalog">
      <name>Catalog</name>
      <t>A Catalog is a MOQT Object that provides information about tracks from a given
publisher. A Catalog is used by 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>A special case of the catalog exists which describes other catalogs instead of
tracks. A catalog might describe tracks, or catalogs, but never both at the same
time.</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 MUST provide all mandatory fields and
one of either a 'tracks' field or a 'catalogs' field.  A producer MAY add
additional fields to the ones described in this draft. Custom field names MUST
NOT collide with field names described in this draft. To prevent custom field
name collisions with future versions, custom field names SHOULD be prefixed
using reverse domain name notation e.g "com.example-size". The order of field
names within the JSON document is not important. Any track or catalog field
declared at the root level is inherited by all tracks or catalogs. Any track or
catalog field declared within a track or catalog object overwrites any inherited
value.</t>
        <t>A parser MUST 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">Catalog version</td>
              <td align="left">version</td>
              <td align="left">
                <xref target="catalogversion"/></td>
            </tr>
            <tr>
              <td align="left">Streaming format</td>
              <td align="left">streamingFormat</td>
              <td align="left">
                <xref target="streamingformat"/></td>
            </tr>
            <tr>
              <td align="left">Streaming format version</td>
              <td align="left">streamingFormatVersion</td>
              <td align="left">
                <xref target="streamingformatversion"/></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">Common Track Fields</td>
              <td align="left">commonTrackFields</td>
              <td align="left">
                <xref target="commontrackfields"/></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">Catalogs</td>
              <td align="left">catalogs</td>
              <td align="left">
                <xref target="catalogs"/></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">Initialization track</td>
              <td align="left">initTrack</td>
              <td align="left">
                <xref target="inittrack"/></td>
            </tr>
            <tr>
              <td align="left">Selection parameters</td>
              <td align="left">selectionParams</td>
              <td align="left">
                <xref target="selectionparameters"/></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">RC</td>
              <td align="left">The Root or a Catalog object</td>
            </tr>
            <tr>
              <td align="left">TFC</td>
              <td align="left">A Track object, Common Track Fields object or Catalog object.</td>
            </tr>
            <tr>
              <td align="left">TF</td>
              <td align="left">A Track object or a Common Track Fields object</td>
            </tr>
            <tr>
              <td align="left">T</td>
              <td align="left">Track object</td>
            </tr>
            <tr>
              <td align="left">S</td>
              <td align="left">Selection Parameters object.</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="catalogversion">
        <name>Catalog version</name>
        <t>Location: R    Required: Yes    Json Type: String</t>
        <t>Versions of this catalog specification are defined using monotonically
increasing integers. There is no guarantee that future catalog versions are
backwards compatible and field definitions and interpretation may change between
versions. A subscriber MUST NOT attempt to parse a catalog version which it does
not understand.</t>
        <t>This document defines version 1.</t>
        <section anchor="streamingformat">
          <name>Streaming format</name>
          <t>Location: RC    Required: Yes    Json Type: String</t>
          <t>A number indicating the streaming format type. Every MoQ Streaming Format
normatively referencing this catalog format MUST register itself in the "MoQ
Streaming Format Type" table. See <xref target="ianaconsiderations"/> for additional details.</t>
        </section>
        <section anchor="streamingformatversion">
          <name>Streaming format version</name>
          <t>Location: RC    Required: Yes    Json Type: String</t>
          <t>A string indicating the version of the streaming format to which this catalog
applies. The structure of the version string is defined by the streaming format.</t>
        </section>
        <section anchor="supportsdeltaupdates">
          <name>Supports delta updates</name>
          <t>Location: RC    Required: Optional    Json Type: Boolean</t>
          <t>A boolean that if true indicates that the publisher MAY 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 MUST be present if its value is true, but may be omitted if the value is
false.</t>
        </section>
        <section anchor="commontrackfields">
          <name>Common track fields</name>
          <t>Location: R    Required: Optional    Json Type: Object</t>
          <t>An object holding a collection of Track Fields (objects with a location of TF
or TFC in table 1) which are to be inherited by all tracks. A field defined at
the Track object level always supercedes any value inherited from the Common
Track Fields object.</t>
        </section>
        <section anchor="tracks">
          <name>Tracks</name>
          <t>Location: R    Required: Optional    Json Type: Array</t>
          <t>An array of track objects <xref target="trackobject"/>. If the 'tracks' field is present
then the 'catalog' field MUST NOT be present.</t>
        </section>
        <section anchor="catalogs">
          <name>Catalogs</name>
          <t>Location: R    Required: Optional    Json Type: Array</t>
          <t>An array of catalog objects <xref target="catalogobject"/>. If the 'catalogs' field is
present then the 'tracks' field MUST NOT be present. A catalog MUST NOT list
itself in the catalog array.</t>
        </section>
        <section anchor="catalogobject">
          <name>Catalog object</name>
          <t>A catalog object is a collection of fields whose location is specified as 'RC'
or 'TFC' in Table 2.</t>
        </section>
        <section anchor="trackobject">
          <name>Tracks object</name>
          <t>A track object is a collection of fields whose location is specified as 'TFC',
'TF' or '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
the Common Track Fields object or within a track, then each track MUST inherit
the namespace of the catalog track. A namespace declared in a track object or
catalog object overwrites any inherited name space.</t>
        </section>
        <section anchor="trackname">
          <name>Track name</name>
          <t>Location: TFC    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 MUST be unique per namespace.</t>
        </section>
        <section anchor="packaging">
          <name>Packaging</name>
          <t>Location: TF    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">CMAF</td>
                <td align="left">"cmaf"</td>
                <td align="left">See <xref target="CMAF"/></td>
              </tr>
              <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 SHOULD 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 SHOULD 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="inittrack">
          <name>Initialization track</name>
          <t>Location: TF    Required: Optional   Json Type: String</t>
          <t>A string specifying the track name of another track which holds initialization
data for the current track. Initialization tracks MUST NOT be added to the
tracks array <xref target="tracks"/>. They are referenced only via the initialization track
field of the track which they initialize.</t>
        </section>
        <section anchor="selectionparameters">
          <name>Selection parameters</name>
          <t>Location: TF    Required: Optional   Json Type: Object</t>
          <t>An object holding a series of name/value pairs which a subscriber can use to
select tracks for subscription. If present, the selection parameters object
MUST NOT be empty. Any selection parameters declared at the root level are
inherited by all tracks. A selection parameters object may exist at both the
root and track level. Any declaration of a selection parameter at the track
level overrides the inherited root value.</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: S    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"/>. For CMAF packaged content, the
string codec registrations are defined in XXX.</t>
        </section>
        <section anchor="mimetype">
          <name>Mimetype</name>
          <t>Location: S    Required: Optional   Json Type: String</t>
          <t>A string defining the mime type <xref target="MIME"/> of the track. This parameter is typically
supplied with CMAF packaged content.</t>
        </section>
        <section anchor="framerate">
          <name>Framerate</name>
          <t>Location: S    Required: Optional   Json Type: Number</t>
          <t>A number defining the framerate of the track, expressed as frames per second.</t>
        </section>
        <section anchor="bitrate">
          <name>Bitrate</name>
          <t>Location: S    Required: Optional   Json Type: Number</t>
          <t>A number defining the bitrate of track, expressed in bits second.</t>
        </section>
        <section anchor="width">
          <name>Width</name>
          <t>Location: S    Required: Optional   Json Type: Number</t>
          <t>A number expressing the encoded width of the track content in pixels.</t>
        </section>
        <section anchor="height">
          <name>Height</name>
          <t>Location: S    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: S    Required: Optional   Json Type: Number</t>
          <t>The number of audio frame samples per second. This property SHOULD only
accompany audio codecs.</t>
        </section>
        <section anchor="channelconfiguration">
          <name>Channel configuration</name>
          <t>Location: S    Required: Optional   Json Type: String</t>
          <t>A string specifying the audio channel configuration. This property SHOULD 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: S    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: S    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: S    Required: Optional   Json Type: String</t>
          <t>A string defining the dominant language of the track. The string MUST 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 MUST 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,
  "streamingFormat": 1,
  "streamingFormatVersion": "0.2",
  "commonTrackFields": {
     "namespace": "conference.example.com/conference123/alice",
     "packaging": "loc",
     "renderGroup": 1
  },
  "tracks": [
    {
      "name": "video",
      "selectionParams":{"codec":"av01.0.08M.10.0.110.09","width":1920,
      "height":1080,"framerate":30,"bitrate":1500000}
    },
    {
      "name": "audio",
      "selectionParams":{"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,
  "streamingFormat": 1,
  "streamingFormatVersion": "0.2",
  "supportsDeltaUpdates": true,
  "commonTrackFields": {
     "renderGroup": 1,
     "packaging": "loc"
  },
  "tracks":[
    {
      "name": "hd",
      "selectionParams": {"codec":"av01","width":1920,"height":1080,
      "bitrate":5000000,"framerate":30},
      "altGroup":1
    },
    {
      "name": "md",
      "selectionParams": {"codec":"av01","width":720,"height":640,
      "bitrate":3000000,"framerate":30},
      "altGroup":1
    },
    {
      "name": "sd",
      "selectionParams": {"codec":"av01","width":192,"height":144,
      "bitrate":500000,"framerate":30},
      "altGroup":1
    },
    {
      "name": "audio",
      "selectionParams":{"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,
  "streamingFormat": 1,
  "streamingFormatVersion": "0.2",
  "supportsDeltaUpdates": true,
  "commonTrackFields": {
     "namespace": "conference.example.com/conference123/alice",
     "renderGroup": 1,
     "packaging": "loc"
  },
  "tracks":[
    {
      "name": "480p15",
      "selectionParams": {"codec":"av01.0.01M.10.0.110.09","width":640,
      "height":480,"bitrate":3000000,"framerate":15}
    },
    {
      "name": "480p30",
      "selectionParams": {"codec":"av01.0.04M.10.0.110.09","width":640,
      "height":480,"bitrate":3000000,"framerate":30},
      "depends": ["480p15"]
    },
    {
      "name": "1080p15",
      "selectionParams": {"codec":"av01.0.05M.10.0.110.09","width":1920,
      "height":1080,"bitrate":3000000,"framerate":15},
      "depends":["480p15"]
    },

    {
      "name": "1080p30",
      "selectionParams": {"codec":"av01.0.08M.10.0.110.09","width":1920,
      "height":1080,"bitrate":5000000,"framerate":30},
      "depends": ["480p30", "1080p15"]
    },
    {
      "name": "audio",
      "selectionParams":{"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",
            "selectionParams": {
                "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="cmaf-tracks-with-multiple-qualities-of-audio-and-video">
          <name>CMAF Tracks with multiple qualities of audio and video</name>
          <t>This example shows catalog for a sports broadcast sending time-aligned audio and
video tracks using CMAF packaging. Init segments are delivered as separate
tracks.</t>
          <sourcecode type="json"><![CDATA[
{
  "version": 1,
  "streamingFormat": 1,
  "streamingFormatVersion": "0.2",
  "supportsDeltaUpdates": true,
  "commonTrackFields": {
     "namespace": "sports.example.com/games/08-08-23/12345",
     "packaging": "cmaf",
     "renderGroup":1
  },
  "tracks": [
    {
      "name": "video_4k",
      "selectionParams":{"codec":"avc1.640033","mimeType":"video/mp4",
      "width":3840,"height":2160,"framerate":30,"bitrate":14931538},
      "initTrack":"init_video_4k",
      "altGroup": 1
    },
    {
      "name": "video_1080",
      "selectionParams":{"codec":"avc1.640028","mimeType":"video/mp4",
      "width":1920,"height":1080,"framerate":30,"bitrate":9914554},
      "initTrack":"init_video_1080",
      "altGroup": 1
    },
    {
      "name": "video_720",
      "selectionParams":{"codec":"avc1.64001f","mimeType":"video/mp4",
      "width":1280,"height":720,"framerate":30,"bitrate":4952892},
      "initTrack":"init_video_720",
      "altGroup": 1
    },
    {
      "name": "audio_aac",
      "selectionParams":{"codec":"mp4a.40.5","mimeType":"audio/mp4",
      "samplerate":48000,"channelConfig":"2","bitrate":67071},
      "initTrack":"init_audio_aac",
      "altGroup": 2
    },
    {
      "name": "audio_ec3",
      "selectionParms":{"codec":"ec-3","mimeType":"audio/mp4",
      "samplerate":48000,"channelConfig":"F801","bitrate":256000},
      "initTrack":"init_audio_ec3",
      "altGroup": 2
    }
   ]
}
]]></sourcecode>
        </section>
        <section anchor="mixed-format-example-cmaf-and-loc-packaging-in-the-same-catalog">
          <name>Mixed format example - CMAF and LOC packaging in the same catalog</name>
          <t>This example shows catalog describing a broadcast with CMAF packaged video and
LOC packaged audio.</t>
          <sourcecode type="json"><![CDATA[
{
  "version": 1,
  "streamingFormat": 1,
  "streamingFormatVersion": "0.2",
  "commonTrackFields": {
     "namespace": "output.example.com/event/12345",
     "renderGroup":1
  },
  "tracks": [
    {
      "name": "video0",
      "selectionParams":{"codec":"avc1.64001f","mimeType":"video/mp4",
      "width":1280,"height":720,"framerate":30,"bitrate":4952892},
      "initTrack":"init_video_720",
      "packaging":"cmaf"
    },
    {
      "name": "audio",
      "selectionParams":{"codec":"opus","samplerate":48000,"channelConfig":"2",
      "bitrate":32000},
      "packaging": "loc"
    }
   ]
}
]]></sourcecode>
        </section>
        <section anchor="cmaf-tracks-with-inband-init-segments">
          <name>CMAF Tracks with inband init segments</name>
          <t>This example shows catalog for a sports broadcast sending time-aligned audio and
video tracks using CMAF packaging. Init segments are delivered as inband data.
The data has been truncated for clarity.</t>
          <sourcecode type="json"><![CDATA[
{
  "version": 1,
  "streamingFormat": 1,
  "streamingFormatVersion": "0.2",
  "commonTrackFields": {
     "namespace": "sports.example.com/games/08-08-23/12345",
     "packaging": "cmaf",
     "renderGroup":1
  },
  "tracks": [
    {
      "name": "video_1080",
      "selectionParams":{"codec":"avc1.640028","mimeType":"video/mp4",
      "width":1920,"height":1080,"framerate":30,"bitrate":9914554},
      "initData":"AAAAGG...BAAAx"
    },
    {
      "name": "audio_aac",
      "selectionParams":{"codec":"mp4a.40.5","mimeType":"audio/mp4",
      "samplerate":48000,"channelConfig":"2","bitrate":67071},
      "initData":"AAAAGG...EAADE="
    }
   ]
}
]]></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,
  "streamingFormat": 1,
  "streamingFormatVersion": "0.2",
  "commonTrackFields": {
     "namespace": "conference.example.com/conference123/alice",
     "packaging": "loc",
     "renderGroup": 1
  },
  "tracks": [
    {
      "name": "video",
      "selectionParams":{"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",
      "selectionParams":{"codec":"opus","samplerate":48000,"channelConfig":"2",
      "bitrate":32000}
    }
   ]
}

]]></sourcecode>
        </section>
        <section anchor="a-catalog-referencing-catalogs-for-two-different-formats">
          <name>A catalog referencing catalogs for two different formats</name>
          <t>This example shows the catalog for a media producer that is outputting two
streaming formats simultaneously under different namespaces. Note that each
track name referenced points at another catalog object and that only the first
catalog supports incremental delta updates.</t>
          <sourcecode type="json"><![CDATA[
{
  "version": 1,
  "catalogs": [
    {
      "name": "catalog-for-format-one",
      "namespace": "sports.example.com/games/08-08-23/live",
      "streamingFormat":1,
      "streamingFormatVersion": "0.2",
      "supportsDeltaUpdates": true,
    },
    {
      "name": "catalog-for-format-five",
      "namespace": "chat.example.com/games/08-08-23/chat",
      "streamingFormat":5,
      "streamingFormatVersion": "1.6.2"
    }
  ]
}

]]></sourcecode>
        </section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The catalog contents MAY be encrypted. The mechanism of encryption and the
signaling of the keys are left to the Streaming Format referencing this catalog
format.</t>
    </section>
    <section anchor="ianaconsiderations">
      <name>IANA Considerations</name>
      <t>This section details how the MoQ Streaming Format Type and new fields can be
registered for inclusion in a catalog.</t>
      <section anchor="moq-streaming-format-type-registry">
        <name>MoQ Streaming Format Type Registry</name>
        <t>This document creates a new registry, "MoQ Streaming Format Type". This registry
is managed by the IANA according to the RFC Required  policy of <xref target="RFC5226"/>. The
Type value is 2 octets. The range is 0x0000-0xFFFF. The initial entry in the
registry is:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Type</th>
              <th align="left">Name</th>
              <th align="left">RFC</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x0000</td>
              <td align="left">Reserved</td>
              <td align="left">https://datatracker.ietf.org/doc/</td>
            </tr>
            <tr>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left">draft-wilaw-moq-catalogformat/</td>
            </tr>
          </tbody>
        </table>
        <t>No RFC is provided for the initial entry as it is reserved. Every MoQ
streaming format draft normatively referencing this catalog format MUST register
itself a unique type identifier. The type registry can be updated by
incrementally expanding by allocating and reserving new type identifiers.</t>
      </section>
      <section anchor="common-catalog-field-registry">
        <name>Common Catalog Field Registry</name>
        <t>This document creates a new IANA registry for the Common Catalog fields.  The
registry is called "MoQ Common Catalog Fields".  This registry is managed by
the IANA according to the Specification Required policy of <xref target="RFC5226"/>. The
initial entries in the registry are:</t>
        <t>Descriptive Name: Catalog version<br/>
Field Name: version<br/>
Required: yes<br/>
Location: R<br/>
JSON Type: String<br/>
Specification: <xref target="MoQCatalog"/><br/></t>
        <t>Descriptive Name: Streaming format<br/>
Field Name: streamingFormat<br/>
Required: yes<br/>
Location: RC<br/>
JSON Type: String<br/>
Specification: <xref target="MoQCatalog"/><br/></t>
        <t>Descriptive Name: Streaming format version<br/>
Field Name: streamingFormatVersion<br/>
Required: yes<br/>
Location: RC<br/>
JSON Type: String<br/>
Specification: <xref target="MoQCatalog"/><br/></t>
        <t>Descriptive Name: Tracks<br/>
Field Name: stracks<br/>
Required: opt<br/>
Location: R<br/>
JSON Type: Array<br/>
Specification: <xref target="MoQCatalog"/><br/></t>
        <t>Descriptive Name: Catalogs<br/>
Field Name: catalogs<br/>
Required: opt<br/>
Location: R<br/>
JSON Type: Array<br/>
Specification: <xref target="MoQCatalog"/><br/></t>
        <t>Descriptive Name: Track namespace<br/>
Field Name: namespace<br/>
Required: opt<br/>
Location: RTC<br/>
JSON Type: String<br/>
Specification: <xref target="MoQCatalog"/><br/></t>
        <t>Descriptive Name: Track name<br/>
Field Name: name<br/>
Required: yes<br/>
Location: TC<br/>
JSON Type: String<br/>
Specification: <xref target="MoQCatalog"/><br/></t>
        <t>Descriptive Name: Packaging<br/>
Field Name: packaging<br/>
Required: yes<br/>
Location: RT<br/>
JSON Type: String<br/>
Specification: <xref target="MoQCatalog"/><br/></t>
        <t>Descriptive Name: Track label<br/>
Field Name: label<br/>
Required: opt<br/>
Location: RT<br/>
JSON Type: String<br/>
Specification: <xref target="MoQCatalog"/><br/></t>
        <t>Descriptive Name: Render group<br/>
Field Name: renderGroup<br/>
Required: opt<br/>
Location: RT<br/>
JSON Type: Number<br/>
Specification: <xref target="MoQCatalog"/><br/></t>
        <t>Descriptive Name: Alternate group<br/>
Field Name: altGroup<br/>
Required: opt<br/>
Location: RT<br/>
JSON Type: Number<br/>
Specification: <xref target="MoQCatalog"/><br/></t>
        <t>Descriptive Name: Initialization data<br/>
Field Name: initData<br/>
Required: opt<br/>
Location: RT<br/>
JSON Type: String<br/>
Specification: <xref target="MoQCatalog"/><br/></t>
        <t>Descriptive Name: Initialization track<br/>
Field Name: initTrack<br/>
Required: opt<br/>
Location: RT<br/>
JSON Type: String<br/>
Specification: <xref target="MoQCatalog"/><br/></t>
        <t>Descriptive Name: Selection parameters<br/>
Field Name: selectionParams<br/>
Required: opt<br/>
Location: RT<br/>
JSON Type: Object<br/>
Specification: <xref target="MoQCatalog"/><br/></t>
        <t>Descriptive Name: Dependencies<br/>
Field Name: depends<br/>
Required: opt<br/>
Location: T<br/>
JSON Type: Array<br/>
Specification: <xref target="MoQCatalog"/><br/></t>
        <t>Descriptive Name: Temporal ID<br/>
Field Name: temporalId<br/>
Required: opt<br/>
Location: T<br/>
JSON Type: Number<br/>
Specification: <xref target="MoQCatalog"/><br/></t>
        <t>Descriptive Name: Spatial ID<br/>
Field Name: spatialId<br/>
Required: opt<br/>
Location: T<br/>
JSON Type: Number<br/>
Specification: <xref target="MoQCatalog"/><br/></t>
        <t>Descriptive Name: Codec<br/>
Field Name: codec<br/>
Required: opt<br/>
Location: S<br/>
JSON Type: String<br/>
Specification: <xref target="MoQCatalog"/><br/></t>
        <t>Descriptive Name: MIME type<br/>
Field Name: mimeType<br/>
Required: opt<br/>
Location: S<br/>
JSON Type: String<br/>
Specification: <xref target="MoQCatalog"/><br/></t>
        <t>Descriptive Name: Framerate<br/>
Field Name: framerate<br/>
Required: opt<br/>
Location: S<br/>
JSON Type: Number<br/>
Specification: <xref target="MoQCatalog"/><br/></t>
        <t>Descriptive Name: Bitrate<br/>
Field Name: bitrate<br/>
Required: opt<br/>
Location: S<br/>
JSON Type: Number<br/>
Specification: <xref target="MoQCatalog"/><br/></t>
        <t>Descriptive Name: Width<br/>
Field Name: width<br/>
Required: opt<br/>
Location: S<br/>
JSON Type: Number<br/>
Specification: <xref target="MoQCatalog"/><br/></t>
        <t>Descriptive Name: Height<br/>
Field Name: height<br/>
Required: opt<br/>
Location: S<br/>
JSON Type: Number<br/>
Specification: <xref target="MoQCatalog"/><br/></t>
        <t>Descriptive Name: Audio sample rate<br/>
Field Name: samplerate<br/>
Required: opt<br/>
Location: S<br/>
JSON Type: Number<br/>
Specification: <xref target="MoQCatalog"/><br/></t>
        <t>Descriptive Name: Channel configuration<br/>
Field Name: channelConfig<br/>
Required: opt<br/>
Location: S<br/>
JSON Type: String<br/>
Specification: <xref target="MoQCatalog"/><br/></t>
        <t>Descriptive Name: Display width<br/>
Field Name: displayWidth<br/>
Required: opt<br/>
Location: S<br/>
JSON Type: Number<br/>
Specification: <xref target="MoQCatalog"/><br/></t>
        <t>Descriptive Name: Display height<br/>
Field Name: displayHeight<br/>
Required: opt<br/>
Location: S<br/>
JSON Type: Number<br/>
Specification: <xref target="MoQCatalog"/><br/></t>
        <t>Descriptive Name: Language<br/>
Field Name: lang<br/>
Required: opt<br/>
Location: S<br/>
JSON Type: String<br/>
Specification: <xref target="MoQCatalog"/><br/></t>
        <t>Any registration for a new Field name MUST provide the following information:</t>
        <ul spacing="normal">
          <li>
            <t>Descriptive Name - a descriptive name for the field.</t>
          </li>
          <li>
            <t>Field Name - the JSON field name, as will be used inside the JSON catalog.</t>
          </li>
          <li>
            <t>Required - the string "yes" if the field is required in all catalogs and
"opt" if it is not.</t>
          </li>
          <li>
            <t>Location - a string defining the permissible locations for the field within
the catalog:
            </t>
            <ul spacing="normal">
              <li>
                <t>'R' - the field is located in the Root of the JSON object.</t>
              </li>
              <li>
                <t>'RC' - the field may be located in either the Root or a Catalog object.</t>
              </li>
              <li>
                <t>'RTC' - the field may be located in either the Root, or a Track object
or a Catalog object.</t>
              </li>
              <li>
                <t>'TC' - the field may be located in either a Track object or a Catalog
object.</t>
              </li>
              <li>
                <t>'RT' - the field may be located in either the Root or a Track object.</t>
              </li>
              <li>
                <t>'T' - the field is located in a Track object.</t>
              </li>
              <li>
                <t>'S' - the field is located in the Selection Parameters object.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>JSON Type  - the JSON type of the field value, which must be one of
String, Array, Number, Object or Boolean.</t>
          </li>
          <li>
            <t>Specification - a URL to the specification which defines the usage of the
field within the catalog, per the Specification Required policy of <xref target="RFC5226"/>.</t>
          </li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <ul spacing="normal">
        <li>
          <t>Suhas Nandakumar &amp; Mo Zanaty - this <eref target="https://github.com/suhasHere/moq-drafts/tree/master/moq-catalog">draft</eref>.</t>
        </li>
        <li>
          <t>The IETF MoQ mailing lists and discussion groups.</t>
        </li>
      </ul>
    </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="MoQCatalog">
        <front>
          <title>Common Catalog Format for moq-transport</title>
          <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
            <organization>Cisco</organization>
          </author>
          <author fullname="Will Law" initials="W." surname="Law">
            <organization>Akamai</organization>
          </author>
          <author fullname="Mo Zanaty" initials="M." surname="Zanaty">
            <organization>Cisco</organization>
          </author>
          <date day="17" month="June" year="2024"/>
          <abstract>
            <t>   This specification defines a Common Catalog specification for
   streaming formats implementing the MOQ Transport Protocol
   [MoQTransport].  Media over QUIC Transport (MOQT) defines a publish/
   subscribe based unified media delivery protocol for delivering media
   for streaming and interactive applications over QUIC.  The catalog
   describes the content made available by a publisher, including
   information necessary for subscribers to select, subscribe and
   initialize tracks.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-moq-catalogformat-00"/>
      </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="2023" month="July"/>
        </front>
      </reference>
      <reference anchor="CMAF">
        <front>
          <title>Information technology -- Multimedia application format (MPEG-A) -- Part 19: Common media application format (CMAF) for segmented media</title>
          <author>
            <organization/>
          </author>
          <date year="2020" month="March"/>
        </front>
      </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="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="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>
    </references>
  </back>
  <!-- ##markdown-source:
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
IF6NAAA=

-->

</rfc>
