<?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.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-gregoire-moq-msfts-02" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="MOQT MPEG-2 TS Packaging">MPEG-2 Transport Stream Packaging for MOQT</title>
    <seriesInfo name="Internet-Draft" value="draft-gregoire-moq-msfts-02"/>
    <author fullname="Paul Gregoire">
      <organization>Red5</organization>
      <address>
        <email>paul@red5.net</email>
      </address>
    </author>
    <author fullname="Gwendal Simon">
      <organization>Quortex</organization>
      <address>
        <email>gwendal.simon@quortex.io</email>
      </address>
    </author>
    <date year="2026" month="October" day="14"/>
    <area>Applications and Real-Time</area>
    <workgroup>Media Over QUIC</workgroup>
    <keyword>MOQ</keyword>
    <keyword>MOQTransport</keyword>
    <keyword>MPEG-2 Transport Stream</keyword>
    <keyword>M2TS</keyword>
    <keyword>MSF</keyword>
    <abstract>
      <?line 79?>

<t>This document extends the MOQT Streaming Format (MSF) with the "mpeg2ts"
packaging, which carries the packets of an MPEG-2 Transport Stream over MOQT.
It defines the catalog fields that describe such a track, and the rules that a
publisher and a subscriber follow to carry the packet stream.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://mondain.github.io/msfts/draft-gregoire-moq-msfts.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-gregoire-moq-msfts/"/>.
      </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/mondain/msfts"/>.</t>
    </note>
  </front>
  <middle>
    <?line 86?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>MPEG-2 Transport Stream MOQT Streaming Format (MSFTS) is an extension of the
MOQT Streaming Format (MSF) <xref target="MSF"/> that delivers MPEG-2 Transport Stream (TS)
<xref target="ISO138181"/> content over MOQT <xref target="MOQTransport"/>. MSFTS keeps the catalog, the
timelines, and the alternate rendition switching of MSF.</t>
      <t>An MSFTS track carries whole TS source packets, either 188 or 192 octets
each. It serves a subscriber that feeds equipment expecting a transport
stream, for example an Integrated Receiver Decoder (IRD).</t>
      <t>This document describes version 3 of the MSFTS packaging format.</t>
    </section>
    <section anchor="msf-extension">
      <name>MSF Extension</name>
      <t>The requirements and terminology of <xref target="MSF"/> apply to this extension unless
this document says otherwise. This document defines the Object payload of an
mpeg2ts track (<xref target="object-payload-format"/>) and the catalog fields that describe
the track (<xref target="catalog"/>).</t>
      <t>This document uses two unrelated version numbers. The catalog <tt>version</tt> field
carries the MSF revision. The MSFTS format version given in <xref target="introduction"/>
identifies this packaging specification and never appears in a catalog. A
catalog conforming to this document <bcp14>MUST</bcp14> set <tt>version</tt> as <xref target="MSF"/> requires.</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 following abbreviations from <xref target="ISO138181"/>: Elementary
Stream (ES), Packet Identifier (PID), Program Association Table (PAT), Program
Map Table (PMT), Conditional Access Table (CAT), Program Clock Reference
(PCR), Program Specific Information (PSI), Presentation Time Stamp (PTS), and
Decoding Time Stamp (DTS).</t>
      <t>This document uses the following terms:</t>
      <dl>
        <dt>TS packet:</dt>
        <dd>
          <t>A 188-octet MPEG-2 Transport Stream packet as defined by <xref target="ISO138181"/>.</t>
        </dd>
        <dt>M2TS source packet:</dt>
        <dd>
          <t>A 192-octet packet made of a four-octet prefix and a 188-octet TS packet.
<xref target="mpeg2ts-timestamp-mode"/> defines the prefix.</t>
        </dd>
        <dt>Source packet:</dt>
        <dd>
          <t>Either a TS packet or an M2TS source packet. The catalog signals which of
the two a track carries.</t>
        </dd>
        <dt>Subscriber:</dt>
        <dd>
          <t>The MOQT endpoint that subscribes to a track and receives its Objects, as
defined by <xref target="MOQTransport"/>. A subscriber operates on MOQT Objects and
produces the reconstructed packet stream.</t>
        </dd>
        <dt>Receiver:</dt>
        <dd>
          <t>The equipment or software that consumes the reconstructed packet stream. A
receiver operates on source packets and needs no knowledge of MOQT.
Receivers differ in how strictly they check the timing of the stream. An IRD
recovers its clock from packet arrival and expects a stream that conforms
to <xref target="ISO138181"/>. A software player can tolerate irregular delivery.</t>
        </dd>
        <dt>Random access point:</dt>
        <dd>
          <t>A point in the packet stream at which a receiver can begin decoding after
receiving the PAT, the PMT, and the decoder initialization.</t>
        </dd>
        <dt>Single-program transport stream:</dt>
        <dd>
          <t>A transport stream whose PAT lists exactly one program.</t>
        </dd>
        <dt>Multi-program transport stream:</dt>
        <dd>
          <t>A transport stream whose PAT lists two or more programs.</t>
        </dd>
      </dl>
    </section>
    <section anchor="scope">
      <name>Scope</name>
      <t>MSFTS carries an MPEG-2 Transport Stream over <xref target="MOQTransport"/> as TS packets,
either unchanged or filtered by the publisher. Interoperability requires three
properties:</t>
      <ul spacing="normal">
        <li>
          <t>An original publisher can map an incoming transport stream into MOQT Objects
and Groups, describe it in an MSF catalog, and announce it to an MOQT relay.</t>
        </li>
        <li>
          <t>An MOQT relay can cache and propagate the tracks without parsing the
transport stream.</t>
        </li>
        <li>
          <t>An end subscriber can parse the catalog, subscribe to the tracks it needs,
reconstruct the packet stream, and pass it to a receiver.</t>
        </li>
      </ul>
      <t>A subscriber needs to know how the publisher produced each track: the size of
its packets, how the publisher derived the track, which program or elementary
stream it carries, and which track carries the PCR. MSFTS defines the catalog
signaling that carries those decisions from the publisher to the subscriber.</t>
      <t>Demultiplexed carriage, where each elementary stream travels without its TS
packets, is out of scope. <xref target="MOQMPEGTS"/> addresses it. Error correction is out
of scope as well. A loss that remains after error correction appears to a
subscriber as missing Objects or Groups.</t>
      <t>This document specifies the content of the Objects, the Groups, and the
catalog. The output that a subscriber builds for a receiver is out of scope.
The standards that govern the receiver apply, for example <xref target="TR101290"/> for a
Digital Video Broadcasting (DVB) deployment.</t>
    </section>
    <section anchor="media-packaging">
      <name>Media Packaging</name>
      <t>A track whose Objects carry TS source packets <bcp14>MUST</bcp14> set the MSF <tt>packaging</tt>
field to "mpeg2ts". Such a track carries a single ordered stream of source
packets.</t>
      <section anchor="object-payload-format">
        <name>Object Payload Format</name>
        <t>The payload of each MOQT Object is a sequence of whole source packets:</t>
        <figure>
          <name>Object payload of an mpeg2ts track</name>
          <artwork type="ascii-art"><![CDATA[
+===============+===============+=====+===============+
| source packet | source packet | ... | source packet |
+===============+===============+=====+===============+
]]></artwork>
        </figure>
        <t>Every source packet on a track has the same size, either 188 or 192 octets, as
<tt>mpeg2tsPacketSize</tt> (<xref target="mpeg2ts-packet-size"/>) declares. An Object payload <bcp14>MUST</bcp14>
contain only whole source packets, so its length is always a multiple of
<tt>mpeg2tsPacketSize</tt>. A subscriber <bcp14>MUST</bcp14> reject an Object that breaks this rule.</t>
        <t>A subscriber reconstructs the packet stream by concatenating the source
packets from received Objects in ascending Group ID and Object ID order. When
a subscriber skips or does not receive an Object, the reconstructed packet
stream has a gap. The Location of the missing Object identifies the gap
exactly. The continuity counters of the source packets after the gap can show
it, but a loss of 16 packets on a PID, or of any multiple of 16, leaves them
unchanged.</t>
        <t>Object boundaries are packaging boundaries. Continuity counters, adaptation
fields, PCR, PTS, DTS, PSI, and other TS syntax remain inside the source
packets.</t>
        <t>Object boundaries leave the delivery schedule of the stream unchanged. The PCR
values give the time at which each TS byte is meant to reach the receiver.
Section 2.4.2 of <xref target="ISO138181"/> expresses the buffer constraints of a reference
decoder against that schedule. <xref target="ISO138189"/> gives the tolerance within which
a delivered stream matches it. <xref target="TR101290"/> defines the limits that a DVB
deployment must meet. <xref target="pcr-timing"/> covers how MOQT delivery relates to the
schedule.</t>
      </section>
      <section anchor="group-boundaries">
        <name>Group Boundaries and Joining</name>
        <t>On a live single-program track, a publisher <bcp14>SHOULD</bcp14> start each MOQT Group at a
random access point.</t>
        <t>On a track carrying a whole multiplex, a publisher <bcp14>MAY</bcp14> align Group boundaries
to the random access points of the reference program
(<xref target="unmodified-multiplex-carriage"/>).</t>
        <t>When <tt>mpeg2tsRandomAccess</tt> (<xref target="mpeg2ts-random-access"/>) is true, the first
Object of every Group contains the first TS packet of a random access point. A
subscriber that joins a live track at the beginning of a Group can then decode
from the first Object. The Group <bcp14>SHOULD</bcp14> carry the PAT and the PMT. A publisher
<bcp14>SHOULD</bcp14> also provide the PAT and the PMT in the catalog (<xref target="init-data"/>), so
that a joining subscriber can pass them to the receiver before the first
Object.</t>
      </section>
      <section anchor="carriage-modes">
        <name>Source Handling and Carriage Modes</name>
        <t>The required <tt>mpeg2tsMode</tt> field (<xref target="mpeg2ts-mode"/>) names what a track carries
and how the publisher derived it. The sections that follow define its four
values.</t>
        <section anchor="unmodified-program-carriage">
          <name>Unmodified Program</name>
          <t>The publisher <bcp14>MUST</bcp14> forward the source packets of a single-program transport
stream without modification. The source is the packet stream as the publisher
receives it. The publisher <bcp14>MUST NOT</bcp14> select a program, remap a PID, rewrite the
PAT or the PMT, change a continuity counter, or insert or remove a null
packet. A subscriber then reconstructs the source stream byte-for-byte.</t>
          <t>A publisher <bcp14>SHOULD</bcp14> verify that its pipeline preserves every source packet
before it declares this mode.</t>
          <t>The catalog does not need to describe the program, because the PAT and PMT
reach the subscriber unaltered within one PSI repetition cycle.</t>
        </section>
        <section anchor="unmodified-multiplex-carriage">
          <name>Unmodified Multiplex</name>
          <t>The publisher forwards every source packet of a multi-program transport stream
under the rules of <xref target="unmodified-program-carriage"/>. The publisher selects no
program. It <bcp14>MAY</bcp14> name a reference program in <tt>mpeg2tsProgramNumber</tt> and its PCR
PID in <tt>mpeg2tsPcrPid</tt>. The reference program gives a subscriber a PCR on
which to pace the multiplex. <tt>mpeg2tsRandomAccess</tt> then refers to the random
access points of that program. A publisher <bcp14>MUST NOT</bcp14> use this mode when the PAT
of the source lists one program.</t>
        </section>
        <section anchor="per-program-carriage">
          <name>Per-Program</name>
          <t>The publisher carries one program that it derived from the source.</t>
          <t>A publisher deriving a per-program track <bcp14>SHOULD</bcp14> drop every source packet
except:</t>
          <ul spacing="normal">
            <li>
              <t>PAT packets (PID 0x0000), rewritten to list only the program present in
this track.</t>
            </li>
            <li>
              <t>PMT packets for the selected program, on the PID that the rewritten PAT
lists.</t>
            </li>
            <li>
              <t>Packets on any PID that the current PMT of the selected program lists,
including the PCR PID, the PIDs of all elementary streams, and the PIDs that
any CA_descriptor references.</t>
            </li>
            <li>
              <t>Packets carrying the service information (SI) tables that the publisher
retains, if any.</t>
            </li>
            <li>
              <t>Conditional access packets, including the CAT on PID 0x0001.</t>
            </li>
          </ul>
          <t>The publisher <bcp14>MAY</bcp14> retain the null packets (PID 0x1FFF). Removing them changes
the byte spacing that constant-bit-rate receivers use to recover the mux
clock. A publisher that removes null packets <bcp14>SHOULD</bcp14> declare a rate in
<tt>mpeg2tsMuxRate</tt> (<xref target="mpeg2ts-mux-rate"/>).</t>
          <t>A publisher that rewrites a table (the PAT, the PMT, the CAT, or an SI table)
<bcp14>SHOULD</bcp14> emit it at least as often as the source stream did. The publisher sets
the <tt>version_number</tt> of the rewritten table independently of the source table.
It <bcp14>MUST</bcp14> increment the version when the content of the rewritten table changes,
and it <bcp14>MUST NOT</bcp14> increment the version otherwise. When the source PAT stops
listing the carried program, the publisher <bcp14>SHOULD</bcp14> end the track.</t>
          <t>A publisher filtering a scrambled transport stream <bcp14>MUST</bcp14> retain the conditional
access packets required for descrambling. Conditional access integration is
application-specific and outside the scope of this document. A CAT carried
from a multi-program source lists the CA systems of every program in the
multiplex. A publisher <bcp14>SHOULD</bcp14> rewrite it to keep only the CA_descriptors whose
CA_system_ID appears in a CA_descriptor of the PMT of the carried program.</t>
          <t>The <tt>mpeg2tsProgramNumber</tt> field (<xref target="mpeg2ts-program-number"/>) <bcp14>SHOULD</bcp14> be
present on per-program tracks to identify the program carried.</t>
          <t>A track without SI has no service identity, no event schedule, and no
broadcast time. A publisher targeting broadcast or IRD reception <bcp14>SHOULD</bcp14> retain
the SI tables that the target standard requires. A publisher that retains SI
tables <bcp14>SHOULD</bcp14> list their PIDs in <tt>mpeg2tsSiPids</tt> (<xref target="mpeg2ts-si-pids"/>) and
<bcp14>SHOULD</bcp14> rewrite them to leave only the entries for the carried program.</t>
        </section>
        <section anchor="es-level-carriage">
          <name>ES-Packets</name>
          <t>An ES-level track holds the packets of one PID of a program: an elementary
stream or a signaling table. <tt>mpeg2tsEsPid</tt> (<xref target="mpeg2ts-es-pid"/>) identifies
the PID. The track <bcp14>MUST NOT</bcp14> contain null packets.</t>
          <t>A publisher using ES-level carriage <bcp14>SHOULD</bcp14> publish the PAT and the PMT of the
program as two further tracks (<xref target="mpeg2ts-es-pid"/>). The catalog gives no
stream type for an elementary stream. A subscriber needs the PMT track to
rebuild a conformant PMT. The publisher <bcp14>SHOULD</bcp14> rewrite the PAT to list only
the program.</t>
          <t>The track whose <tt>mpeg2tsEsPid</tt> equals <tt>mpeg2tsPcrPid</tt> holds the PCR of the
program. <xref target="pcr-timing"/> applies to that track. The order of the packets within
each track does not give their position in the multiplex. Arrival times
(<xref target="mpeg2ts-timestamp-mode"/>) give that position only when one clock stamps all
the tracks of a program.</t>
          <t>An ES-level track has no CAT, so it does not link a scrambled elementary
stream to the streams that hold its keys. A publisher also cannot find random
access points in a payload that it cannot decrypt, so it cannot set
<tt>mpeg2tsRandomAccess</tt> to true. A publisher <bcp14>SHOULD</bcp14> use an unmodified or
per-program mode for a scrambled source.</t>
        </section>
      </section>
      <section anchor="pcr-timing">
        <name>PCR and Timing</name>
        <t>The PCR travels in the adaptation fields of the TS packets (<xref target="ISO138181"/>).
MOQT Object and Group boundaries do not affect its continuity within a track.</t>
        <t>A publisher <bcp14>MUST NOT</bcp14> introduce a PCR discontinuity within a single MOQT Group.
A publisher that introduces a PCR discontinuity between consecutive MOQT
Groups <bcp14>MUST</bcp14> signal it by setting the discontinuity_indicator bit
(<xref target="ISO138181"/>, Section 2.4.3.5) in the adaptation field of the first TS
packet carrying PCR in the new Group. These rules apply to the discontinuities
that a publisher introduces. In the unmodified modes, a discontinuity in the
source, such as a loss before the publisher, reaches the subscriber unchanged.
The PCR base wraps every 2^33 ticks of its 90 kHz clock, about 26.5 hours. A
wrap is not a discontinuity. A publisher <bcp14>MUST NOT</bcp14> signal it as one.</t>
      </section>
      <section anchor="egress-timing">
        <name>Egress Timing</name>
        <t>A subscriber that feeds a receiver recovering its clock from packet arrival
has to rebuild the delivery schedule of the stream. MOQT delivers whole
Objects, which a relay can serve as fast as the link allows. The arrival time
of a packet therefore says nothing about its position in the source schedule.
The PCR values give that position. In the unmodified modes, delivery at the
times that the PCR values give follows the input schedule of the T-STD
(<xref target="ISO138181"/>, Section 2.4.2). In the other modes, the subscriber chooses the
position of each packet between PCRs. <tt>mpeg2tsMuxRate</tt> (<xref target="mpeg2ts-mux-rate"/>)
gives the rate to which it pads the output.</t>
        <t>The PCR values and the mux rate do not reproduce the source schedule at a
constant latency. The source clock can deviate from its nominal frequency by
up to 30 ppm (<xref target="ISO138181"/>). A subscriber can follow that deviation only on
average, for example from the arrival rate of a live track. Arrival times
(<xref target="mpeg2ts-timestamp-mode"/>) give the spacing of the packets on the clock that
stamped them. They carry no absolute time. They do not say where the stamping
took place. This document does not define the timing information that
reproduces the source schedule at a constant latency. A publisher can carry it
in the prefix, under a method that <tt>mpeg2tsTimestampMode</tt> names
(<xref target="mpeg2ts-timestamp-mode"/>), or outside the packets, in MOQT Object
properties or an MSF timeline track.</t>
      </section>
      <section anchor="splice-signaling">
        <name>Splice Signaling</name>
        <t>SCTE-35 <xref target="SCTE35"/> splice information travels in band, as
splice_info_section() messages on a PID of the program. The <tt>mpeg2tsScte35Pid</tt>
field (<xref target="mpeg2ts-scte35-pid"/>) can declare that PID. This document does not
specify SCTE-35 processing.</t>
        <t>A publisher <bcp14>MAY</bcp14> also publish the same splice events out of band, on an MSF
Event Timeline track. <xref target="SCTE35Timeline"/> defines the event type identifiers
and the payload format for that track. A subscriber can then read splice
events without parsing the packet stream.</t>
      </section>
    </section>
    <section anchor="catalog">
      <name>Catalog</name>
      <t>This document extends the MSF catalog <xref target="MSF"/> with the "mpeg2ts" value of the
<tt>packaging</tt> field and with the track fields of <xref target="track-fields"/>. The rest of
the catalog follows MSF unchanged, including the root fields, the common track
fields, delta updates, and authorization. A parser <bcp14>MUST</bcp14> ignore fields it does
not understand.</t>
      <t>Several track fields copy values from the PSI of the source:
<tt>mpeg2tsProgramNumber</tt>, <tt>mpeg2tsPcrPid</tt>, <tt>mpeg2tsEsPid</tt>, <tt>mpeg2tsSiPids</tt>, and
<tt>mpeg2tsScte35Pid</tt>. MSF does not allow the fields of a declared track to
change (<xref target="MSF"/>, Section 5.3). For the advisory fields, the PSI in the packets
takes precedence, and the publisher <bcp14>MAY</bcp14> leave the catalog unchanged when the
PSI changes. When the PSI changes <tt>mpeg2tsEsPid</tt> or <tt>mpeg2tsProgramNumber</tt>,
the publisher <bcp14>MUST</bcp14> publish a new track that carries the new value and remove
the old track.</t>
      <section anchor="track-fields">
        <name>Track Object Fields</name>
        <t><xref target="track-fields-table"/> lists the track object fields that this document
defines for an mpeg2ts track.</t>
        <table anchor="track-fields-table">
          <name>Track object fields defined by this document</name>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Name</th>
              <th align="left">Definition</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Mode</td>
              <td align="left">mpeg2tsMode</td>
              <td align="left">
                <xref target="mpeg2ts-mode"/></td>
            </tr>
            <tr>
              <td align="left">Packet size</td>
              <td align="left">mpeg2tsPacketSize</td>
              <td align="left">
                <xref target="mpeg2ts-packet-size"/></td>
            </tr>
            <tr>
              <td align="left">ES PID</td>
              <td align="left">mpeg2tsEsPid</td>
              <td align="left">
                <xref target="mpeg2ts-es-pid"/></td>
            </tr>
            <tr>
              <td align="left">Program number</td>
              <td align="left">mpeg2tsProgramNumber</td>
              <td align="left">
                <xref target="mpeg2ts-program-number"/></td>
            </tr>
            <tr>
              <td align="left">PCR PID</td>
              <td align="left">mpeg2tsPcrPid</td>
              <td align="left">
                <xref target="mpeg2ts-pcr-pid"/></td>
            </tr>
            <tr>
              <td align="left">Mux rate</td>
              <td align="left">mpeg2tsMuxRate</td>
              <td align="left">
                <xref target="mpeg2ts-mux-rate"/></td>
            </tr>
            <tr>
              <td align="left">SI PIDs</td>
              <td align="left">mpeg2tsSiPids</td>
              <td align="left">
                <xref target="mpeg2ts-si-pids"/></td>
            </tr>
            <tr>
              <td align="left">Random access</td>
              <td align="left">mpeg2tsRandomAccess</td>
              <td align="left">
                <xref target="mpeg2ts-random-access"/></td>
            </tr>
            <tr>
              <td align="left">Timestamp mode</td>
              <td align="left">mpeg2tsTimestampMode</td>
              <td align="left">
                <xref target="mpeg2ts-timestamp-mode"/></td>
            </tr>
            <tr>
              <td align="left">SCTE-35 PID</td>
              <td align="left">mpeg2tsScte35Pid</td>
              <td align="left">
                <xref target="mpeg2ts-scte35-pid"/></td>
            </tr>
          </tbody>
        </table>
        <t><xref target="init-data"/> describes how an mpeg2ts track uses the MSF <tt>initRef</tt> and
<tt>initDataList</tt> fields.</t>
      </section>
      <section anchor="mpeg2ts-mode">
        <name>Mode</name>
        <t>Required: Yes JSON Type: String Location: Track Object</t>
        <t>What the track carries and how the publisher derived it. The value <bcp14>MUST</bcp14> be one
of the four names in <xref target="mode-table"/>.</t>
        <table anchor="mode-table">
          <name>Values of mpeg2tsMode</name>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Meaning</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">unmodified-program</td>
              <td align="left">Every packet of a single-program source, unchanged (<xref target="unmodified-program-carriage"/>)</td>
            </tr>
            <tr>
              <td align="left">unmodified-multiplex</td>
              <td align="left">Every packet of a multi-program source, unchanged (<xref target="unmodified-multiplex-carriage"/>)</td>
            </tr>
            <tr>
              <td align="left">per-program</td>
              <td align="left">One program that the publisher derived from the source (<xref target="per-program-carriage"/>)</td>
            </tr>
            <tr>
              <td align="left">es-packets</td>
              <td align="left">The TS source packets of one PID (<xref target="es-level-carriage"/>)</td>
            </tr>
          </tbody>
        </table>
        <t>A subscriber that does not recognize the value <bcp14>MUST</bcp14> reject the track. A
subscriber that outputs a transport stream <bcp14>MUST</bcp14> support the
"unmodified-program" and "per-program" modes with 188-octet source packets.</t>
      </section>
      <section anchor="mpeg2ts-packet-size">
        <name>Packet Size</name>
        <t>Required: Yes JSON Type: Number Location: Track Object</t>
        <t>The source-packet size in octets. The value <bcp14>MUST</bcp14> be either 188 or 192. A value
of 188 identifies ordinary MPEG-2 TS packets. A value of 192 identifies M2TS
source packets, whose four-octet prefix <xref target="mpeg2ts-timestamp-mode"/> describes.</t>
      </section>
      <section anchor="mpeg2ts-es-pid">
        <name>ES PID</name>
        <t>Required: Conditional JSON Type: Number Location: Track Object</t>
        <t>The PID that the elementary stream or signaling table of this track held in
the source. The track carries only the packets of that PID. A track that
carries an elementary stream carries neither the PAT nor the PMT. A track
whose <tt>role</tt> is "pat" or "pmt" carries that table alone. This field <bcp14>MUST</bcp14> be
present in the "es-packets" mode and <bcp14>MUST</bcp14> be absent in the other modes. A
subscriber <bcp14>MUST</bcp14> reject a track that breaks this rule.</t>
        <t>A PID alone does not say what a track carries. A publisher <bcp14>SHOULD</bcp14> set the MSF
<tt>role</tt> field of an ES-level track as <xref target="role-table"/> gives.</t>
        <table anchor="role-table">
          <name>Values of role on an ES-level track</name>
          <thead>
            <tr>
              <th align="left">role</th>
              <th align="left">Content</th>
              <th align="left">mpeg2tsEsPid</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">"pat"</td>
              <td align="left">PAT</td>
              <td align="left">0x0000</td>
            </tr>
            <tr>
              <td align="left">"pmt"</td>
              <td align="left">PMT of the carried program</td>
              <td align="left">The PID that the PAT lists</td>
            </tr>
            <tr>
              <td align="left">"nit"</td>
              <td align="left">Network Information Table</td>
              <td align="left">0x0010</td>
            </tr>
            <tr>
              <td align="left">"sdt"</td>
              <td align="left">Service Description Table and Bouquet Association Table</td>
              <td align="left">0x0011</td>
            </tr>
            <tr>
              <td align="left">"eit"</td>
              <td align="left">Event Information Table</td>
              <td align="left">0x0012</td>
            </tr>
            <tr>
              <td align="left">"tdt"</td>
              <td align="left">Time and Date Table and Time Offset Table</td>
              <td align="left">0x0014</td>
            </tr>
            <tr>
              <td align="left">"scte35"</td>
              <td align="left">SCTE-35 splice information</td>
              <td align="left">The PID that the PMT lists</td>
            </tr>
            <tr>
              <td align="left">MSF value, for example "video" or "audio"</td>
              <td align="left">Media elementary stream</td>
              <td align="left">The PID that the PMT lists</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="mpeg2ts-program-number">
        <name>Program Number</name>
        <t>Required: Optional JSON Type: Number Location: Track Object</t>
        <t>The MPEG-2 Transport Stream program number carried by this track. This field
identifies the selected program in per-program carriage
(<xref target="per-program-carriage"/>) and the originating program in ES-level carriage
(<xref target="es-level-carriage"/>). Outside the "unmodified-multiplex" mode, the track
<bcp14>SHOULD</bcp14> carry packets from only that program. In the "unmodified-multiplex"
mode, it names the reference program (<xref target="unmodified-multiplex-carriage"/>).</t>
      </section>
      <section anchor="mpeg2ts-pcr-pid">
        <name>PCR PID</name>
        <t>Required: Optional JSON Type: Number Location: Track Object</t>
        <t>The PID carrying the PCR of the program that this track carries. This field is
advisory and does not replace the PCR signaling in the transport stream. In
the "unmodified-multiplex" mode, it names the PCR PID of the reference program
(<xref target="unmodified-multiplex-carriage"/>).</t>
      </section>
      <section anchor="mpeg2ts-mux-rate">
        <name>Mux Rate</name>
        <t>Required: Optional JSON Type: Number Location: Track Object</t>
        <t>The constant rate, in bits per second, to which a subscriber pads the
reconstructed packet stream. The rate counts 188-octet TS packets and excludes
the four-octet prefix of an M2TS source packet. For a track derived from a
single-program transport stream, the value is the nominal mux rate of the
source. For a program derived from a multi-program transport stream, the
publisher chooses the value, because the program has no rate of its own in the
multiplex. That value <bcp14>SHOULD NOT</bcp14> be lower than the peak rate of the program,
measured between consecutive PCRs.</t>
        <t>A publisher that removes null packets <bcp14>SHOULD</bcp14> declare this field. A publisher
<bcp14>SHOULD</bcp14> also declare it on every ES-level track, because such a track has no
null packets. Where a program is published as several ES-level tracks, every
track of that program <bcp14>SHOULD</bcp14> declare the same value, which describes the
reconstructed program.</t>
        <t>The declared rate is a stuffing target (<xref target="egress-timing"/>). A subscriber
recovers its clock from the PCR values and uses the rate to decide how much
null stuffing to insert.</t>
        <t>This field <bcp14>MUST</bcp14> be absent in the unmodified modes, where the stream keeps its
null packets and so carries its own rate.</t>
      </section>
      <section anchor="mpeg2ts-si-pids">
        <name>SI PIDs</name>
        <t>Required: Optional JSON Type: Array Location: Track Object</t>
        <t>An array of the PIDs that carry the SI tables that a per-program track retains
(<xref target="per-program-carriage"/>), each PID listed once. The array does not repeat
the PIDs that the PMT lists.</t>
        <t>The field is advisory. A subscriber <bcp14>MAY</bcp14> use it to learn which tables are
present without parsing the packet stream.</t>
        <t>This field <bcp14>MUST</bcp14> be absent when <tt>mpeg2tsEsPid</tt> is present, and in the
"unmodified-multiplex" mode. An ES-level track carries one table, which its
<tt>mpeg2tsEsPid</tt> and MSF <tt>role</tt> field identify (<xref target="mpeg2ts-es-pid"/>).</t>
      </section>
      <section anchor="mpeg2ts-random-access">
        <name>Random Access</name>
        <t>Required: Optional JSON Type: Boolean Location: Track Object</t>
        <t>When true, the first Object of every MOQT Group contains a random access point
(<xref target="group-boundaries"/>). When absent or false, this document makes no guarantee
about where in a Group decoding can begin. In the "unmodified-multiplex" mode,
this field refers to the reference program, and it <bcp14>MUST</bcp14> be absent when the
catalog names none.</t>
      </section>
      <section anchor="mpeg2ts-timestamp-mode">
        <name>Timestamp Mode</name>
        <t>Required: Optional JSON Type: String Location: Track Object</t>
        <t>This field gives the meaning of the four-octet prefix of a 192-octet source
packet. This field <bcp14>MUST NOT</bcp14> be present when <tt>mpeg2tsPacketSize</tt> is 188. When a
192-octet track omits this field, a subscriber treats the prefix as "opaque".</t>
        <t>The value "arrival-time" indicates the Blu-ray Disc Audio/Visual (BDAV)
convention. The four octets are big-endian: the two most significant bits
carry a copy permission indicator, and the remaining 30 bits carry an arrival
time on a 27 MHz clock. That arrival time wraps every 2^30 ticks, or
approximately 39.77 seconds.</t>
        <t>The value "opaque" indicates that the publisher carries the prefix without
specified semantics.</t>
        <t>A publisher that uses the prefix for a timing method names that method in this
field. Other documents <bcp14>MAY</bcp14> define values for such methods. A value that no
published document defines <bcp14>SHOULD</bcp14> be a reverse domain name, for example
"com.example.timing", so that two private values cannot collide. A subscriber
that does not recognize the value treats the prefix as "opaque".</t>
      </section>
      <section anchor="mpeg2ts-scte35-pid">
        <name>SCTE-35 PID</name>
        <t>Required: Optional JSON Type: Number Location: Track Object</t>
        <t>The PID carrying SCTE-35 splice_info_section() messages for this track. This
field is advisory. SCTE-35 messages are also discoverable from the PMT. When
present, a subscriber <bcp14>MAY</bcp14> use this value to locate splice events without
parsing the PMT. Publishers <bcp14>SHOULD</bcp14> include this field when the track carries
SCTE-35 splice signaling. This field <bcp14>MUST</bcp14> be absent when <tt>mpeg2tsEsPid</tt> is
present, and in the "unmodified-multiplex" mode. When SCTE-35 travels as an
ES-level track, the <tt>mpeg2tsEsPid</tt> and <tt>role</tt> fields of that track identify
it.</t>
      </section>
      <section anchor="init-data">
        <name>Use of MSF Initialization Data</name>
        <t>A subscriber obtains the PAT and the PMT in one of four ways: it subscribes to
the PAT and PMT tracks that <xref target="es-level-carriage"/> recommends, it reads the
tables from <tt>initDataList</tt> when the track declares <tt>initRef</tt>, it accumulates
packets from the joining point until the publisher repeats the PSI, or it
fetches a past Object that carries them.</t>
        <t>MSF defines the <tt>initRef</tt> track field and the root <tt>initDataList</tt> field. An
mpeg2ts track <bcp14>MAY</bcp14> use those fields to carry initialization data. The track
sets <tt>initRef</tt> to the <tt>id</tt> of an <tt>initDataList</tt> entry whose <tt>type</tt> <bcp14>MUST</bcp14> be
"inline". The Base64 <xref target="BASE64"/> decoded value of the entry's <tt>data</tt> field <bcp14>MUST</bcp14>
be a sequence of whole source packets using the packet size that
<tt>mpeg2tsPacketSize</tt> declares.</t>
        <t>Publishers <bcp14>SHOULD</bcp14> include current PAT and PMT packets in the referenced
initialization data when those tables are not guaranteed to be available at
the first Object of each Group. When PSI changes within a live track, the
publisher <bcp14>SHOULD</bcp14> publish an updated initialization data entry in a new
independent catalog before publishing Objects that rely on the changed PSI.
Subscribers <bcp14>MUST NOT</bcp14> assume that referenced initialization data remains valid
after the MPEG-2 PSI <tt>version_number</tt> changes. Updated PSI in the Objects
takes precedence.</t>
        <t>A publisher <bcp14>SHOULD</bcp14> provide <tt>initRef</tt> when <tt>mpeg2tsRandomAccess</tt> is true
(<xref target="group-boundaries"/>). On an unmodified-multiplex track, the initialization
data carries the PAT and the PMT of the reference program.</t>
        <t>On an ES-level track, an <tt>initDataList</tt> entry gives a joining subscriber the
tables at once. The PAT and PMT tracks remain the authoritative source
afterwards.</t>
      </section>
    </section>
    <section anchor="catalog-examples">
      <name>Catalog Examples</name>
      <t>The following examples are non-normative.</t>
      <section anchor="example-live-ts">
        <name>Live 188-octet Transport Stream</name>
        <t>This example shows a live single-program transport stream forwarded unchanged.</t>
        <sourcecode type="json"><![CDATA[
{
  "version": "draft-01",
  "generatedAt": 1746104606044,
  "tracks": [
    {
      "name": "program-1-ts",
      "namespace": "live.example.com/channel/1",
      "packaging": "mpeg2ts",
      "mpeg2tsMode": "unmodified-program",
      "isLive": true,
      "targetLatency": 1000,
      "role": "video",
      "mimeType": "video/mp2t",
      "bitrate": 6000000,
      "mpeg2tsPacketSize": 188,
      "mpeg2tsProgramNumber": 1,
      "mpeg2tsPcrPid": 257,
      "mpeg2tsRandomAccess": true
    }
  ]
}
]]></sourcecode>
      </section>
      <section anchor="example-live-m2ts">
        <name>Live 192-octet M2TS Source Packets</name>
        <t>This example shows the same carriage with 192-octet source packets, whose
four-octet prefix <tt>mpeg2tsTimestampMode</tt> interprets.</t>
        <sourcecode type="json"><![CDATA[
{
  "version": "draft-01",
  "generatedAt": 1746104606044,
  "tracks": [
    {
      "name": "program-1-mpeg2ts",
      "namespace": "contribution.example.net/feed/a",
      "packaging": "mpeg2ts",
      "mpeg2tsMode": "unmodified-program",
      "isLive": true,
      "targetLatency": 500,
      "role": "video",
      "mimeType": "video/mp2t",
      "bitrate": 12000000,
      "mpeg2tsPacketSize": 192,
      "mpeg2tsProgramNumber": 1,
      "mpeg2tsTimestampMode": "arrival-time",
      "mpeg2tsRandomAccess": true
    }
  ]
}
]]></sourcecode>
      </section>
      <section anchor="example-mpts">
        <name>Multi-Program Source - Per-Program Tracks</name>
        <t>This example shows a catalog for a publisher that receives a two-program
transport stream and publishes each program as a per-program track. The two
tracks share a namespace.</t>
        <sourcecode type="json"><![CDATA[
{
  "version": "draft-01",
  "generatedAt": 1746104606044,
  "tracks": [
    {
      "name": "program-1",
      "namespace": "live.example.com/mux/1",
      "packaging": "mpeg2ts",
      "mpeg2tsMode": "per-program",
      "isLive": true,
      "targetLatency": 1000,
      "role": "video",
      "mimeType": "video/mp2t",
      "bitrate": 6000000,
      "mpeg2tsPacketSize": 188,
      "mpeg2tsProgramNumber": 1,
      "mpeg2tsPcrPid": 257,
      "mpeg2tsMuxRate": 6500000,
      "mpeg2tsRandomAccess": true
    },
    {
      "name": "program-2",
      "namespace": "live.example.com/mux/1",
      "packaging": "mpeg2ts",
      "mpeg2tsMode": "per-program",
      "isLive": true,
      "targetLatency": 1000,
      "role": "video",
      "mimeType": "video/mp2t",
      "bitrate": 4000000,
      "mpeg2tsPacketSize": 188,
      "mpeg2tsProgramNumber": 2,
      "mpeg2tsPcrPid": 513,
      "mpeg2tsMuxRate": 4500000,
      "mpeg2tsRandomAccess": true
    }
  ]
}
]]></sourcecode>
      </section>
      <section anchor="example-init-data">
        <name>Per-Program Track with Initialization Data</name>
        <t>This example shows a per-program track whose PAT and PMT also travel in the
catalog, so a joining subscriber has the tables before the first Object
arrives (<xref target="init-data"/>). The <tt>data</tt> value holds one PAT packet and one PMT
packet, 376 octets in total. The example shortens its Base64 encoding.</t>
        <sourcecode type="json"><![CDATA[
{
  "version": "draft-01",
  "generatedAt": 1746104606044,
  "tracks": [
    {
      "name": "program-1",
      "namespace": "live.example.com/channel/1",
      "packaging": "mpeg2ts",
      "mpeg2tsMode": "per-program",
      "isLive": true,
      "targetLatency": 1000,
      "role": "video",
      "mimeType": "video/mp2t",
      "bitrate": 6000000,
      "initRef": "program-1-psi",
      "mpeg2tsPacketSize": 188,
      "mpeg2tsProgramNumber": 1,
      "mpeg2tsPcrPid": 257
    }
  ],
  "initDataList": [
    {
      "id": "program-1-psi",
      "type": "inline",
      "data": "R0AAEAAAsA0AAcEAAAAB4QDo+V59////..."
    }
  ]
}
]]></sourcecode>
      </section>
      <section anchor="example-mpts-transparent">
        <name>Unmodified Multiplex</name>
        <t>This example shows a catalog for a publisher that carries a complete
multi-program transport stream without program selection, so no per-program
catalog fields are present.</t>
        <sourcecode type="json"><![CDATA[
{
  "version": "draft-01",
  "generatedAt": 1746104606044,
  "tracks": [
    {
      "name": "mux-1",
      "namespace": "live.example.com/mux/1",
      "packaging": "mpeg2ts",
      "mpeg2tsMode": "unmodified-multiplex",
      "isLive": true,
      "targetLatency": 1000,
      "mimeType": "video/mp2t",
      "bitrate": 20000000,
      "mpeg2tsPacketSize": 188
    }
  ]
}
]]></sourcecode>
      </section>
      <section anchor="example-abr">
        <name>Alternate Renditions - Two Bitrate Tracks</name>
        <t>This example shows a catalog for a live channel published at two bitrates as
alternate renditions. Each rendition comes from its own single-program encoder
output, which the publisher forwards unchanged. When the renditions arrive as
programs of one multi-program transport stream, each track uses the
"per-program" mode and carries a common program number (<xref target="switching"/>). Both
tracks are in the same <tt>altGroup</tt>, so they align their Group boundaries. The
two tracks carry the PCR on different PIDs (257 and 513), so their PMTs
differ. A subscriber that switches between them follows <xref target="switching"/>.</t>
        <sourcecode type="json"><![CDATA[
{
  "version": "draft-01",
  "generatedAt": 1746104606044,
  "tracks": [
    {
      "name": "video-high",
      "namespace": "live.example.com/channel/1",
      "packaging": "mpeg2ts",
      "mpeg2tsMode": "unmodified-program",
      "isLive": true,
      "targetLatency": 1000,
      "role": "video",
      "mimeType": "video/mp2t",
      "bitrate": 6000000,
      "altGroup": 1,
      "mpeg2tsPacketSize": 188,
      "mpeg2tsProgramNumber": 1,
      "mpeg2tsPcrPid": 257,
      "mpeg2tsRandomAccess": true
    },
    {
      "name": "video-low",
      "namespace": "live.example.com/channel/1",
      "packaging": "mpeg2ts",
      "mpeg2tsMode": "unmodified-program",
      "isLive": true,
      "targetLatency": 1000,
      "role": "video",
      "mimeType": "video/mp2t",
      "bitrate": 2000000,
      "altGroup": 1,
      "mpeg2tsPacketSize": 188,
      "mpeg2tsProgramNumber": 1,
      "mpeg2tsPcrPid": 513,
      "mpeg2tsRandomAccess": true
    }
  ]
}
]]></sourcecode>
      </section>
      <section anchor="example-es-level">
        <name>ES-Packets Tracks - One Track per Elementary Stream</name>
        <t>This example shows a live program published as separate ES-packets tracks: one
video track carrying the PCR, two audio tracks for different languages
(English and Spanish), one Event Information Table track, and the PAT and PMT
tracks that carry the program signaling.</t>
        <sourcecode type="json"><![CDATA[
{
  "version": "draft-01",
  "generatedAt": 1746104606044,
  "tracks": [
    {
      "name": "program-1-video",
      "namespace": "live.example.com/channel/1",
      "packaging": "mpeg2ts",
      "mpeg2tsMode": "es-packets",
      "isLive": true,
      "targetLatency": 1000,
      "role": "video",
      "mimeType": "video/mp2t",
      "bitrate": 5000000,
      "mpeg2tsPacketSize": 188,
      "mpeg2tsProgramNumber": 1,
      "mpeg2tsPcrPid": 257,
      "mpeg2tsMuxRate": 6000000,
      "mpeg2tsEsPid": 257,
      "mpeg2tsRandomAccess": true
    },
    {
      "name": "program-1-audio-en",
      "namespace": "live.example.com/channel/1",
      "packaging": "mpeg2ts",
      "mpeg2tsMode": "es-packets",
      "isLive": true,
      "targetLatency": 1000,
      "role": "audio",
      "mimeType": "video/mp2t",
      "bitrate": 128000,
      "mpeg2tsPacketSize": 188,
      "mpeg2tsProgramNumber": 1,
      "mpeg2tsPcrPid": 257,
      "mpeg2tsMuxRate": 6000000,
      "mpeg2tsEsPid": 258,
      "mpeg2tsRandomAccess": true
    },
    {
      "name": "program-1-audio-es",
      "namespace": "live.example.com/channel/1",
      "packaging": "mpeg2ts",
      "mpeg2tsMode": "es-packets",
      "isLive": true,
      "targetLatency": 1000,
      "role": "audio",
      "mimeType": "video/mp2t",
      "bitrate": 128000,
      "mpeg2tsPacketSize": 188,
      "mpeg2tsProgramNumber": 1,
      "mpeg2tsPcrPid": 257,
      "mpeg2tsMuxRate": 6000000,
      "mpeg2tsEsPid": 259,
      "mpeg2tsRandomAccess": true
    },
    {
      "name": "program-1-eit",
      "namespace": "live.example.com/channel/1",
      "packaging": "mpeg2ts",
      "mpeg2tsMode": "es-packets",
      "isLive": true,
      "role": "eit",
      "mimeType": "video/mp2t",
      "mpeg2tsPacketSize": 188,
      "mpeg2tsProgramNumber": 1,
      "mpeg2tsMuxRate": 6000000,
      "mpeg2tsEsPid": 18
    },
    {
      "name": "program-1-pat",
      "namespace": "live.example.com/channel/1",
      "packaging": "mpeg2ts",
      "mpeg2tsMode": "es-packets",
      "isLive": true,
      "role": "pat",
      "mimeType": "video/mp2t",
      "mpeg2tsPacketSize": 188,
      "mpeg2tsProgramNumber": 1,
      "mpeg2tsMuxRate": 6000000,
      "mpeg2tsEsPid": 0
    },
    {
      "name": "program-1-pmt",
      "namespace": "live.example.com/channel/1",
      "packaging": "mpeg2ts",
      "mpeg2tsMode": "es-packets",
      "isLive": true,
      "role": "pmt",
      "mimeType": "video/mp2t",
      "mpeg2tsPacketSize": 188,
      "mpeg2tsProgramNumber": 1,
      "mpeg2tsMuxRate": 6000000,
      "mpeg2tsEsPid": 256
    }
  ]
}
]]></sourcecode>
        <t>A subscriber taking the video track and one audio track also takes the PAT and
PMT tracks, removes the entries of the streams it did not take from the PMT,
and emits the two tables with the packets of the streams it carries.</t>
      </section>
    </section>
    <section anchor="switching">
      <name>Switching and Alternate Renditions</name>
      <t>A publisher advertises multiple mpeg2ts tracks as alternatives using the MSF
<tt>altGroup</tt> field. Video tracks in the same alternate group <bcp14>MUST</bcp14> place Group
boundaries at identical presentation positions. Other tracks <bcp14>SHOULD</bcp14> align
their Group boundaries to the same positions where possible. A track with
<tt>mpeg2tsMode</tt> set to "unmodified-multiplex" <bcp14>MUST NOT</bcp14> appear in an <tt>altGroup</tt>.
Tracks in the same alternate group <bcp14>SHOULD</bcp14> carry the same program number,
because a receiver selects a service by its <tt>program_number</tt>. A per-program
publisher can rewrite the PAT, the PMT, and the SI tables to meet this rule.</t>
      <t>A subscriber switches between alternate mpeg2ts tracks at a Group boundary or
at a random access point that it can decode independently. Alternate tracks do
not have to share continuity counter values, PID assignments, or a timebase,
so a switch is a discontinuity in the packet stream.</t>
    </section>
    <section anchor="content-protection">
      <name>Content Protection</name>
      <t>Unmodified carriage preserves any scrambling and conditional access
information present in the MPEG-2 Transport Stream. Per-program carriage
preserves it when the publisher retains the conditional access packets
(<xref target="per-program-carriage"/>). ES-level carriage does not preserve it
(<xref target="es-level-carriage"/>). TS-level scrambling is opaque to MOQT relays and to
this specification.</t>
      <t>A publisher <bcp14>MAY</bcp14> encrypt the Object payloads, for example with Secure
Objects <xref target="SecureObjects"/>. A subscriber validates the source packets after it
decrypts the payload.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The security considerations of MOQT <xref target="MOQTransport"/>, MSF <xref target="MSF"/>, MPEG-2
Transport Stream <xref target="ISO138181"/>, and any object encryption scheme apply.</t>
      <t>Subscribers and receivers treat TS syntax as untrusted input. Invalid packet
sizes, invalid sync bytes, malformed PSI, inconsistent continuity counters,
excessive table repetition, and timestamp discontinuities can cause decoder
failures or resource exhaustion unless the implementation bounds them.</t>
      <t>Catalog metadata is also untrusted input. A subscriber <bcp14>MUST</bcp14> check that each
catalog value is in its valid range before it uses the value, including the
packet size, the PIDs, the program numbers, the mux rate, and the Base64
initialization data.</t>
      <t>A subscriber cannot check that <tt>mpeg2tsMode</tt> is accurate. The rules of
<xref target="object-payload-format"/> let it check that a track is well formed, but not
that its packets are the ones that the publisher received.</t>
      <t>Object-level encryption protects MOQT Object payloads but does not hide MOQT
namespace, track name, Group ID, Object ID, object size, or delivery timing
from authorized relays. Applications that require confidentiality for media
payloads <bcp14>SHOULD</bcp14> use an object encryption scheme in addition to transport
security.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document requests that, once MSF establishes an IANA registry for
packaging values, IANA register the value "mpeg2ts" with this document as the
reference.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="MOQTransport">
          <front>
            <title>Media over QUIC Transport</title>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <author fullname="Ian Swett" initials="I." surname="Swett">
              <organization>Google</organization>
            </author>
            <author fullname="Alan Frindell" initials="A." surname="Frindell">
              <organization>Meta</organization>
            </author>
            <date day="1" month="October" year="2026"/>
            <abstract>
              <t>   This document defines Media over QUIC Transport (MOQT), a publish/
   subscribe protocol that runs over QUIC and WebTransport.  MOQT
   leverages the features of these transports, such as streams,
   datagrams, priorities, and partial reliability.  MOQT operates both
   point-to-point and through intermediate relays, enabling scalable
   low-latency delivery.  Despite its name, MOQT is media agnostic and
   can be used for a wide range of use cases.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-22"/>
        </reference>
        <reference anchor="MSF">
          <front>
            <title>MOQT Streaming Format</title>
            <author fullname="Will Law" initials="W." surname="Law">
              <organization>Akamai</organization>
            </author>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <date day="2" month="June" year="2026"/>
            <abstract>
              <t>   This document specifies the MOQT Streaming Format, designed to
   operate on Media Over QUIC Transport.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-moq-msf-01"/>
        </reference>
        <reference anchor="ISO138181">
          <front>
            <title>Information technology - Generic coding of moving pictures and associated audio information: Systems</title>
            <author>
              <organization>ISO/IEC</organization>
            </author>
            <date year="2023"/>
          </front>
          <seriesInfo name="ISO/IEC" value="13818-1"/>
        </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="SCTE35">
          <front>
            <title>Digital Program Insertion Cueing Message</title>
            <author>
              <organization>Society of Cable Telecommunications Engineers</organization>
            </author>
            <date year="2023" month="November"/>
          </front>
          <seriesInfo name="ANSI/SCTE" value="35 2023r1"/>
        </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="ISO138189">
          <front>
            <title>Information technology - Generic coding of moving pictures and associated audio information - Part 9: Extension for real time interface for systems decoders</title>
            <author>
              <organization>ISO/IEC</organization>
            </author>
            <date year="1996"/>
          </front>
          <seriesInfo name="ISO/IEC" value="13818-9"/>
        </reference>
        <reference anchor="TR101290">
          <front>
            <title>Digital Video Broadcasting (DVB); Measurement guidelines for DVB systems</title>
            <author>
              <organization>European Telecommunications Standards Institute</organization>
            </author>
            <date year="2020" month="June"/>
          </front>
          <seriesInfo name="ETSI TR" value="101 290 V1.4.1"/>
        </reference>
        <reference anchor="SCTE35Timeline">
          <front>
            <title>SCTE35 transmission over MSF Event Timeline</title>
            <author fullname="Will Law" initials="W." surname="Law">
              <organization>Akamai</organization>
            </author>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   Defines the transmission of SCTE 35 data over MSF Event Timeline
   tracks.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-wilaw-moq-scte35-event-timeline-00"/>
        </reference>
        <reference anchor="SecureObjects">
          <front>
            <title>End-to-End Secure Objects for Media over QUIC Transport</title>
            <author fullname="Cullen Fluffy Jennings" initials="C. F." surname="Jennings">
              <organization>Cisco</organization>
            </author>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   This document specifies an end-to-end authenticated encryption scheme
   for application objects transmitted via Media over QUIC (MoQ)
   Transport.  The scheme enables original publishers that share a
   symmetric key with end subscribers, to ensuring that MoQ relays are
   unable to decrypt object contents.  Additionally, subscribers can
   verify the integrity and authenticity of received objects, confirming
   that the content has not been modified in transit.  Additionally it
   allows MoQ parameters to be protected so the publisher can select if
   they are readable and/or modifiable by relays.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-moq-secure-objects-01"/>
        </reference>
        <reference anchor="MOQMPEGTS">
          <front>
            <title>MoQ MPEG-TS Catalog Extension</title>
            <author fullname="Luke Curley" initials="L." surname="Curley">
         </author>
            <date day="24" month="September" year="2026"/>
            <abstract>
              <t>   This document defines the mpegts catalog section, which records what
   demultiplexing an MPEG-2 Transport Stream [mpeg2] into a MoQ
   broadcast would otherwise lose: each track's PID and PMT descriptors,
   the program identity, the service information tables, and a carriage
   record for every elementary stream the publisher did not decode.  It
   is a root member of either the hang catalog [hang] or the MSF catalog
   [msf], so a subscriber that ignores it still plays the broadcast and
   one that reads it can rebuild the source multiplex.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-lcurley-moq-mpegts-00"/>
        </reference>
      </references>
    </references>
    <?line 1039?>

<section anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors thank Thomas Drapier, Luke Curley, and Tilson Joji for their
reviews and discussions.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1963bb1pno//0UOPSPsWdIWpIvsTXTmdKS3Koril2TSVfW
rDkxSG5KiEGAAUDLrOI+yzzLebLzXfcFACU38UlyVic/WgsE9uW73/a3R6OR
abImt8fJ4OL12R9GR8msSot6U1ZNMm0qm66T1+niXXqZFZfJqqySi1d/ng1M
Op9X9j1+BH8m+uXUvzswi7Sxl2W1O06yYlUasywXRbqGiZZVumpGlxX8mlV2
tC5/GK3rVVOPDo5MvZ2vs7rOyqLZbeDd87PZS1Ns13NbHZsljHhsFmVR26Le
1sfJKs1ra2AZj0wKS4XlTDabPIOZYYA6SYtl8sam+WiWre3AXJfVu8uq3G5w
2XaZpcmr97ZK/vz1+cnAvLM7+H15bJIRblH+z8GC/u6HD/10NJvS/09fmve2
2MIyk2TvXEnCmxv8BVaEcP0DvonP12mWw3MAye8z26zGZXWJj9NqcQWPr5pm
Ux8/fIhv4aPsvR3raw/xwcN5VV7X9iF8/xC/u8yaq+2cBiyWaVY8JDjjLzmA
sm7CMfmNMX8yzkp+9+E+ZI2vmnU+MCbdNldlhWCDUZNktc1zxvLrdJvDxvg7
+g1WmRbZXwk5x4CY5RN6bHnTG3j/9xU8HBe26Q73h2sLC8yTaQYr7Rnuz1vA
iP0QjnjJn4xr/OT3P/ALsDNjirJaw3fvCU0hmoHgRqdj3jNClvbbeCJABPe+
AzAZHRzCC+fTV4ePnh0+OzympShvnQML0JxlkTR2cVWUeXm5A4r5gy1slS2S
RblESihXybp8j//aZItmW1mm4rSuy0UGOIN/bpdZSSwl4x0n013d2DXhFWhF
EZIIkI5xTQ/Pz07oUQ2z2Ro/11fk1+OE1j06pMfEasnRwdEj+PPFZHr29DGg
7OXJ46ePn8GT6cns7NGTeIunGdAOYOh1VV5WIDbOgU0r2vDJ1uKOLmxdp5d2
7zKnsEXb7BAGJ+k8t8nM5nZRrtfbwrH0WQHCxdqq3rOZyVfT84e4OpAJT2j9
VXtDo8NDYxz8mAYUa88/J9ZkSfzfbRiEAV+nIE+eHydnHxqQbfgMZS2IlxwW
s7bRUFnR2GqVLiy9UzPykyWAagmA+TxU8DwA2uHz50/hz9mbw4PDo+cH/Vj/
JlvaMnlRlelykdYNwuL+6TcvHvwroD2tASRrWzTJ5RZeywGDNa0dXoh2Vt9B
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
YsXk4RM2jhUAmaiKEEPLVPvuRHXtpl1Sj0CJ+8czYMNSnNhI0DY+L9PdlSSi
BHvMIz620sMbUaWei9xzgT73u9quVmz4U/EqKpOonKOdjjb72mq1yg2Qw1xY
R/P02GsGFBLGU9YAUQahX0IpJ+q0rUpkn7dM7m4pRJgxJm3OvWhhmRGqaGV1
6XwDpW9coyRJJczoxZ+GDO+SfpOqAnN9n/CbFJiLT925AHeEJTg42yor7jtb
JLXDt9gQQy6yQG2AxhlWzxXqtPEKQs1kwSOLlxNZdkI7quFcFqfdw2LyLVXt
cbV6btOq0HZFvB8gPOdifUoecj8FXIfHriVrk9V6FoqzRSKtblGf1Pij5RGF
p8Jo2UNXWuL7i8iM5A1iuDL0s1w1e2+dL1GXBJwllOxpLA4h30VpL0qYFeTr
/mgmZrriU+ZJ+5R5cBzfHTXvPVOOtNZpBoCSgaYRtGB3NLwqYxgHg5M1pfNA
o1xuUxi7sdZwcRQzLBUu8iJcNzvX4O4OI5PtIOOlfftQYtsIEuJoekmq8W2Y
xK4qXM2bD+a3os6t0M5deLsjCB0Qva9yWktoOAgpd02VoDdn1MKjG+oQJe14
MeSmsHdORraT4tj48UVXSZ8KHXzY6qgNbKwtaaQfaJ0Myk0KDvZAZArbDgMp
UCJQYmtfKhqVvb/ItyMUWKdZvUgm6KE+/CartwDU+y9OJ988wKosaV3M8o0C
7hwjpD4q8+xyhF1s0oL7tWFN/rqsG7LB6ew5wAANUMNCOOVk/AY7ZtMVMYmr
Yg06xlPbFMTJowO2XuXjwhUuUl8Tqnc5+iK50MJMMZrCYsJ2WecBl3Vi7Q8e
WqrKDxk4+Ra8r0fPx198ITZyHYNQ4BoBrxMxj9rsM05EEBvtWwaa0eLpgGzR
a3o5hS6fcwG2VFpJyZN6JGmjT6RZsxF77BUFy1Q81KQ5pG5LSyAwJIkWFw8Q
RGRpWDxM7UyrTgdyd/aIijzRUsFoGrW5waVF8Q8zWJTrsfwx5n0MqICdwXeN
DSoAU41bmlS1L8o8z0iHhKbR3XH9u7gCrY8gtxdYID5X97kd3jistLd2i4uO
4iiI6bEKdDj3IZ0JJYMbK47RCp6H5YkUz6UWUl6B9xkWNLdAEQwM3F27Ikup
OTQraPjXSsaOPLgiKHQU/NHLuBFHK+rmXPe+GPLtForpsVBuU2wienUBWm+H
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

-->

</rfc>
