<?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.34 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-lcurley-compressed-mp4-00" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.32.0 -->
  <front>
    <title abbrev="cmp4">Compressed MP4</title>
    <seriesInfo name="Internet-Draft" value="draft-lcurley-compressed-mp4-00"/>
    <author fullname="Luke Curley">
      <organization/>
      <address>
        <email>kixelated@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="March" day="17"/>
    <area>wit</area>
    <workgroup>moq</workgroup>
    <abstract>
      <?line 28?>

<t>Fragmented MP4 (fMP4) is widely used for live streaming, but the ISO Base Media File Format (ISOBMFF) box structure imposes significant per-fragment overhead.
Each box header requires 8 bytes (4-byte size + 4-byte type), and payload fields use fixed-width integers (u32/u64).
For low-latency streaming with single-frame fragments, this overhead can exceed the media payload itself.</t>
      <t>This document defines a compression scheme for ISO BMFF that replaces box headers with compact varint-encoded identifiers and sizes, and defines compressed variants of commonly used boxes with varint payload fields.
The scheme reduces per-fragment overhead from ~100 bytes to ~20 bytes while preserving the full box hierarchy.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Media Over QUIC Working Group mailing list (moq@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/moq/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/kixelated/moq-drafts"/>.</t>
    </note>
  </front>
  <middle>
    <?line 37?>

<section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>Fragmented MP4 (fMP4) is the dominant container format for low-latency live streaming.
Each fragment consists of a <tt>moof</tt> (movie fragment) box followed by an <tt>mdat</tt> (media data) box.
The <tt>moof</tt> box contains metadata describing the media samples in <tt>mdat</tt>.</t>
      <t>For a typical single-frame video fragment, the overhead looks like this:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Box</th>
            <th align="right">Header</th>
            <th align="right">Payload</th>
            <th align="right">Total</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">moof</td>
            <td align="right">8</td>
            <td align="right">0</td>
            <td align="right">8</td>
          </tr>
          <tr>
            <td align="left">mfhd</td>
            <td align="right">8</td>
            <td align="right">4</td>
            <td align="right">12</td>
          </tr>
          <tr>
            <td align="left">traf</td>
            <td align="right">8</td>
            <td align="right">0</td>
            <td align="right">8</td>
          </tr>
          <tr>
            <td align="left">tfhd</td>
            <td align="right">8</td>
            <td align="right">8</td>
            <td align="right">16</td>
          </tr>
          <tr>
            <td align="left">tfdt</td>
            <td align="right">8</td>
            <td align="right">12</td>
            <td align="right">20</td>
          </tr>
          <tr>
            <td align="left">trun</td>
            <td align="right">8</td>
            <td align="right">16</td>
            <td align="right">24</td>
          </tr>
          <tr>
            <td align="left">mdat</td>
            <td align="right">8</td>
            <td align="right">0</td>
            <td align="right">8</td>
          </tr>
          <tr>
            <td align="left">
              <strong>Total</strong></td>
            <td align="right">
              <strong>56</strong></td>
            <td align="right">
              <strong>40</strong></td>
            <td align="right">
              <strong>96</strong></td>
          </tr>
        </tbody>
      </table>
      <t>This 96 bytes of overhead is substantial when a single encoded video frame might only be 100-500 bytes at low bitrates or high frame rates.
Audio frames are even smaller, often 4-20 bytes for Opus at low bitrates, making the container overhead several times larger than the payload.</t>
      <t>This document defines two layers of compression:</t>
      <ol spacing="normal" type="1"><li>
          <t><strong>Header Compression</strong>: A compression table (<tt>cmpd</tt>) maps varint IDs to box type names. All boxes after the <tt>moov</tt> use compressed headers: <tt>[varint ID][varint size]</tt> instead of <tt>[u32 size][4-char type]</tt>.</t>
        </li>
        <li>
          <t><strong>Payload Compression</strong>: Compressed variants of common boxes (<tt>cmfh</tt>, <tt>cfhd</tt>, <tt>cfdt</tt>, <tt>crun</tt>) replace fixed-width payload fields with varints.</t>
        </li>
      </ol>
      <t>Together, these reduce the per-fragment overhead to approximately 20 bytes.</t>
    </section>
    <section anchor="variable-length-integer-encoding">
      <name>Variable-Length Integer Encoding</name>
      <t>This document uses the variable-length integer encoding from QUIC <xref target="RFC9000"/>, Section 16.
The first two bits of the first byte indicate the encoding length:</t>
      <table>
        <thead>
          <tr>
            <th align="left">2MSB</th>
            <th align="right">Length</th>
            <th align="right">Usable Bits</th>
            <th align="left">Range</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">00</td>
            <td align="right">1</td>
            <td align="right">6</td>
            <td align="left">0-63</td>
          </tr>
          <tr>
            <td align="left">01</td>
            <td align="right">2</td>
            <td align="right">14</td>
            <td align="left">0-16383</td>
          </tr>
          <tr>
            <td align="left">10</td>
            <td align="right">4</td>
            <td align="right">30</td>
            <td align="left">0-1073741823</td>
          </tr>
          <tr>
            <td align="left">11</td>
            <td align="right">8</td>
            <td align="right">62</td>
            <td align="left">0-4611686018427387903</td>
          </tr>
        </tbody>
      </table>
      <t>In the message formats below, fields marked with <tt>(i)</tt> use this variable-length integer encoding.</t>
    </section>
    <section anchor="compression-table-cmpd">
      <name>Compression Table (cmpd)</name>
      <t>The <tt>cmpd</tt> box is a standard ISO BMFF box placed inside the <tt>moov</tt> box.
It defines a mapping from compact varint IDs to 4-character box type names.</t>
      <artwork><![CDATA[
cmpd {
  Count (i),
  Compressed Box Entry (..) ...,
}

Compressed Box Entry {
  ID (i),
  Name (32),
}
]]></artwork>
      <t><strong>Count</strong>: The number of entries in the compression table.</t>
      <t><strong>ID</strong>: A varint identifier assigned to this box type. IDs <bcp14>SHOULD</bcp14> be assigned starting from 0 to minimize encoding size.</t>
      <t><strong>Name</strong>: The 4-character ISO BMFF box type name (e.g., <tt>moof</tt>, <tt>mdat</tt>, <tt>traf</tt>).</t>
      <t>The <tt>cmpd</tt> box itself uses a standard ISO BMFF header since it appears inside the <tt>moov</tt> before compressed encoding takes effect.</t>
      <t>A typical compression table for live video streaming:</t>
      <table>
        <thead>
          <tr>
            <th align="right">ID</th>
            <th align="left">Name</th>
            <th align="left">Description</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="right">0</td>
            <td align="left">moof</td>
            <td align="left">Movie Fragment</td>
          </tr>
          <tr>
            <td align="right">1</td>
            <td align="left">mdat</td>
            <td align="left">Media Data</td>
          </tr>
          <tr>
            <td align="right">2</td>
            <td align="left">mfhd</td>
            <td align="left">Movie Fragment Header</td>
          </tr>
          <tr>
            <td align="right">3</td>
            <td align="left">traf</td>
            <td align="left">Track Fragment</td>
          </tr>
          <tr>
            <td align="right">4</td>
            <td align="left">tfhd</td>
            <td align="left">Track Fragment Header</td>
          </tr>
          <tr>
            <td align="right">5</td>
            <td align="left">tfdt</td>
            <td align="left">Track Fragment Decode Time</td>
          </tr>
          <tr>
            <td align="right">6</td>
            <td align="left">trun</td>
            <td align="left">Track Run</td>
          </tr>
        </tbody>
      </table>
      <t>With 7 entries using IDs 0-6, each ID fits in a single varint byte.
Header compression alone reduces the 56 bytes of box headers (7 boxes x 8 bytes) to 14 bytes (7 boxes x 2 bytes), saving 42 bytes per fragment.</t>
    </section>
    <section anchor="compressed-box-header">
      <name>Compressed Box Header</name>
      <t>The presence of a <tt>cmpd</tt> box in the <tt>moov</tt> signals that all top-level boxes following the <tt>moov</tt> use compressed box headers.</t>
      <t>A standard ISO BMFF box header is:</t>
      <artwork><![CDATA[
Standard Box Header {
  Size (32),
  Type (32),
}
]]></artwork>
      <t>This is replaced with:</t>
      <artwork><![CDATA[
Compressed Box Header {
  ID (i),
  Size (i),
}
]]></artwork>
      <t><strong>ID</strong>: The varint identifier from the compression table. The receiver looks up the corresponding 4-character box type name in the <tt>cmpd</tt> table.</t>
      <t><strong>Size</strong>: A varint containing the size of the box payload in bytes. Unlike standard ISO BMFF where the size field includes the header itself, the compressed size field contains only the payload length. This avoids the need for extended size fields since varints natively handle large values.</t>
      <t>The box hierarchy (nesting) is preserved exactly as in standard ISO BMFF.
Container boxes (e.g., <tt>moof</tt>, <tt>traf</tt>) contain nested boxes whose sizes sum to the parent's payload size.
The receiver <bcp14>MUST</bcp14> be able to reconstruct the original uncompressed ISO BMFF structure by reversing the ID-to-name mapping and adjusting size fields.</t>
    </section>
    <section anchor="compressed-box-variants">
      <name>Compressed Box Variants</name>
      <t>This section defines compressed variants of commonly used fMP4 boxes.
These variants replace fixed-width integer fields with varints, further reducing overhead.</t>
      <t>An encoder <bcp14>MAY</bcp14> use the standard box (with a compressed header) OR the compressed variant for any given box.
The compression table determines which box type is used.</t>
      <section anchor="cmfh-compressed-movie-fragment-header">
        <name>cmfh — Compressed Movie Fragment Header</name>
        <t>Replaces <tt>mfhd</tt> (Movie Fragment Header).</t>
        <artwork><![CDATA[
cmfh {
  Sequence Number (i),
}
]]></artwork>
        <t><strong>Sequence Number</strong>: The fragment sequence number (varint instead of u32).</t>
        <t>Standard <tt>mfhd</tt> uses 4 bytes for the sequence number.
With <tt>cmfh</tt>, a sequence number under 64 requires only 1 byte.</t>
      </section>
      <section anchor="cfhd-compressed-track-fragment-header">
        <name>cfhd — Compressed Track Fragment Header</name>
        <t>Replaces <tt>tfhd</tt> (Track Fragment Header).</t>
        <artwork><![CDATA[
cfhd {
  Track ID (i),
  Flags (i),
  Base Data Offset (i),              ; present if flags & 0x01
  Sample Description Index (i),      ; present if flags & 0x02
  Default Sample Duration (i),       ; present if flags & 0x08
  Default Sample Size (i),           ; present if flags & 0x10
  Default Sample Flags (i),          ; present if flags & 0x20
}
]]></artwork>
        <t><strong>Track ID</strong>: Identifies the track (varint instead of u32).</t>
        <t><strong>Flags</strong>: A varint encoding the optional field presence flags. The flag values match the standard <tt>tfhd</tt> tf_flags semantics but are renumbered for compact varint encoding:</t>
        <table>
          <thead>
            <tr>
              <th align="right">Flag</th>
              <th align="left">Field</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x01</td>
              <td align="left">base-data-offset-present</td>
            </tr>
            <tr>
              <td align="right">0x02</td>
              <td align="left">sample-description-index-present</td>
            </tr>
            <tr>
              <td align="right">0x08</td>
              <td align="left">default-sample-duration-present</td>
            </tr>
            <tr>
              <td align="right">0x10</td>
              <td align="left">default-sample-size-present</td>
            </tr>
            <tr>
              <td align="right">0x20</td>
              <td align="left">default-sample-flags-present</td>
            </tr>
          </tbody>
        </table>
        <t>Standard <tt>tfhd</tt> uses 4 bytes for version/flags and 4 bytes for track ID (minimum 8 bytes).
With <tt>cfhd</tt>, a single-track stream with no optional fields requires as few as 2 bytes.</t>
      </section>
      <section anchor="cfdt-compressed-track-fragment-decode-time">
        <name>cfdt — Compressed Track Fragment Decode Time</name>
        <t>Replaces <tt>tfdt</tt> (Track Fragment Decode Time).</t>
        <artwork><![CDATA[
cfdt {
  Base Decode Time (i),
}
]]></artwork>
        <t><strong>Base Decode Time</strong>: The decode timestamp of the first sample in this fragment (varint instead of u32/u64).</t>
        <t>Standard <tt>tfdt</tt> uses 4 bytes for version/flags plus 4 or 8 bytes for the timestamp (8-12 bytes total).
With <tt>cfdt</tt>, small timestamps require as few as 1 byte.</t>
      </section>
      <section anchor="crun-compressed-track-run">
        <name>crun — Compressed Track Run</name>
        <t>Replaces <tt>trun</tt> (Track Run).</t>
        <artwork><![CDATA[
crun {
  Sample Count (i),
  Flags (i),
  Data Offset (i),                   ; present if flags & 0x01
  First Sample Flags (i),            ; present if flags & 0x04
  Per-Sample Fields (..) ...,
}

Per-Sample Fields {
  Sample Duration (i),               ; present if flags & 0x100
  Sample Size (i),                   ; present if flags & 0x200
  Sample Flags (i),                  ; present if flags & 0x400
  Sample Composition Time Offset (i),; present if flags & 0x800
}
]]></artwork>
        <t><strong>Sample Count</strong>: The number of samples in this run (varint instead of u32).</t>
        <t><strong>Flags</strong>: A varint encoding which optional fields are present. The flag values match the standard <tt>trun</tt> tr_flags semantics:</t>
        <table>
          <thead>
            <tr>
              <th align="right">Flag</th>
              <th align="left">Field</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x001</td>
              <td align="left">data-offset-present</td>
            </tr>
            <tr>
              <td align="right">0x004</td>
              <td align="left">first-sample-flags-present</td>
            </tr>
            <tr>
              <td align="right">0x100</td>
              <td align="left">sample-duration-present</td>
            </tr>
            <tr>
              <td align="right">0x200</td>
              <td align="left">sample-size-present</td>
            </tr>
            <tr>
              <td align="right">0x400</td>
              <td align="left">sample-flags-present</td>
            </tr>
            <tr>
              <td align="right">0x800</td>
              <td align="left">sample-composition-time-offset-present</td>
            </tr>
          </tbody>
        </table>
        <t>Standard <tt>trun</tt> uses 4 bytes for version/flags, 4 bytes for sample count, and 4 bytes per optional field.
With <tt>crun</tt>, a single-sample run with only sample-size typically requires 4-5 bytes instead of 16.</t>
      </section>
    </section>
    <section anchor="example">
      <name>Example</name>
      <t>This section provides a concrete byte-level comparison for a single-frame video fragment.</t>
      <section anchor="standard-fmp4">
        <name>Standard fMP4</name>
        <t>A typical single-frame fragment with sequence number 42, track ID 1, decode time 3840, and a 200-byte sample:</t>
        <artwork><![CDATA[
moof (size=80)                           8 bytes
  mfhd (size=16)                         8 bytes
    version=0, flags=0                   4 bytes
    sequence_number=42                   4 bytes
  traf (size=56)                         8 bytes
    tfhd (size=16)                       8 bytes
      version=0, flags=0x020000          4 bytes
      track_id=1                         4 bytes
    tfdt (size=20)                       8 bytes
      version=1, flags=0                 4 bytes
      base_decode_time=3840              8 bytes
    trun (size=20)                       8 bytes
      version=0, flags=0x000200          4 bytes
      sample_count=1                     4 bytes
      sample_size=200                    4 bytes
mdat (size=208)                          8 bytes
  <200 bytes of media data>
]]></artwork>
        <t><strong>Total overhead: 96 bytes</strong> (excluding media data).</t>
      </section>
      <section anchor="compressed-fmp4">
        <name>Compressed fMP4</name>
        <t>The same fragment using compressed encoding, with the compression table from the example in Section 4:</t>
        <artwork><![CDATA[
moof (id=0, size=11)                     2 bytes
  cmfh (id=2, size=1)                    2 bytes
    sequence_number=42                   1 byte
  traf (id=3, size=6)                    2 bytes
    cfhd (id=4, size=1)                  2 bytes
      track_id=1                         1 byte
      flags=0                            0 bytes (no optional fields)
    cfdt (id=5, size=2)                  2 bytes
      base_decode_time=3840              2 bytes
    crun (id=6, size=3)                  2 bytes
      sample_count=1                     1 byte
      flags=0x200                        2 bytes
      sample_size=200                    2 bytes
mdat (id=1, size=200)                    2 bytes
  <200 bytes of media data>
]]></artwork>
        <t><strong>Total overhead: ~21 bytes</strong> (excluding media data).</t>
        <t>This represents a <strong>78% reduction</strong> in per-fragment overhead (from 96 bytes to ~21 bytes).</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document registers the following ISO BMFF box types:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Box Type</th>
            <th align="left">Description</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">cmpd</td>
            <td align="left">Compression Table</td>
          </tr>
          <tr>
            <td align="left">cmfh</td>
            <td align="left">Compressed Movie Fragment Header</td>
          </tr>
          <tr>
            <td align="left">cfhd</td>
            <td align="left">Compressed Track Fragment Header</td>
          </tr>
          <tr>
            <td align="left">cfdt</td>
            <td align="left">Compressed Track Fragment Decode Time</td>
          </tr>
          <tr>
            <td align="left">crun</td>
            <td align="left">Compressed Track Run</td>
          </tr>
        </tbody>
      </table>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="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>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="ISOBMFF" target="https://www.iso.org/standard/83102.html">
          <front>
            <title>Information technology — Coding of audio-visual objects — Part 12: ISO base media file format</title>
            <author>
              <organization/>
            </author>
            <date year="2022"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 347?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This draft was generated with the assistance of AI (Claude).</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
