<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.4.9) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-lcurley-moq-mpegts-00" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="moq-mpegts">MoQ MPEG-TS Catalog Extension</title>

    <author fullname="Luke Curley">
      <organization></organization>
      <address>
        <email>kixelated@gmail.com</email>
      </address>
    </author>

    <date year="2026" month="September" day="24"/>

    <area>wit</area>
    <workgroup>moq</workgroup>
    

    <abstract>


<?line 49?>

<t>This document defines the <spanx style="verb">mpegts</spanx> catalog section, which records what demultiplexing an MPEG-2 Transport Stream <xref target="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 <xref target="hang"/> or the MSF catalog <xref target="msf"/>, so a subscriber that ignores it still plays the broadcast and one that reads it can rebuild the source multiplex.</t>



    </abstract>



    <note title="Note to Readers">


<?line 54?>

<t>This document was generated by an AI model from the implementation at <eref target="https://github.com/moq-dev/moq">github.com/moq-dev/moq</eref> and is maintained alongside it.
Submit an <eref target="https://github.com/moq-dev/moq/issues">issue</eref> or <eref target="https://github.com/moq-dev/moq/pulls">PR</eref> if this spec sucks and you want to fix anything.</t>


    </note>


  </front>

  <middle>


<?line 59?>

<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 <xref target="mpeg2"/> terminology for PID, PSI, PAT, PMT, PES, descriptor, section, and stream_type, and <xref target="hang"/> terminology for broadcast, track, group, and frame.</t>

<t>A <strong>verbatim</strong> track carries an elementary stream the publisher did not decode, byte-for-byte.</t>

</section>
<section anchor="introduction"><name>Introduction</name>
<t>A transport stream reaches MoQ in one of two shapes.
A publisher can leave the multiplex intact and carry the packet stream as opaque payload, which is what <xref target="msfts"/> specifies.
Or it can demultiplex, which is what this document addresses: each elementary stream becomes its own MoQ track with a codec description, so a relay can drop and prioritize per track and a subscriber can decode without a transport-stream parser (<xref target="comparison"/>).</t>

<t>Demultiplexing loses everything that is not media: the PID layout, the PMT descriptors, the program identity, the service information, and any stream the publisher has no decoder for.
The <spanx style="verb">mpegts</spanx> section records that.
It defines no packaging and no container: decoded media keeps the container its catalog entry declares, and verbatim tracks use the framing in <xref target="verbatim"/>.</t>

</section>
<section anchor="comparison"><name>Comparison with m2ts Packaging</name>
<t><xref target="msfts"/> carries the transport stream as it arrives: each object is a run of whole 188- or 192-byte packets, and the receiver demultiplexes as it always has.
This document takes the stream apart at the publisher and discards the packetization layer, because MoQ already provides what it was there for:</t>

<t><list style="symbols">
  <t><strong>Packet framing</strong> interleaves elementary streams onto one serial pipe. MoQ delivers each track separately.</t>
  <t><strong>Null packets</strong> pad a multiplex to a constant bitrate. There is no bitrate to pad to.</t>
  <t><strong>The PCR</strong> distributes the multiplex's timebase. Each track carries its own timestamps.</t>
  <t><strong>Continuity counters</strong> detect loss within a stream. That is the transport's job.</t>
  <t><strong>PSI repetition</strong> lets a receiver join mid-stream. The catalog is a track a subscriber fetches on join.</t>
</list></t>

<t>What remains is media in a codec-neutral catalog, plus the signaling a demultiplexer cannot reconstruct: that is the <spanx style="verb">mpegts</spanx> section.</t>

<texttable>
      <ttcol align='left'>&#160;</ttcol>
      <ttcol align='left'>m2ts packaging</ttcol>
      <ttcol align='left'>mpegts section</ttcol>
      <c>MoQ track</c>
      <c>one per program</c>
      <c>one per elementary stream</c>
      <c>Object payload</c>
      <c>whole source packets</c>
      <c>one media frame, or one verbatim PES payload or section</c>
      <c>Packaging</c>
      <c><spanx style="verb">m2ts</spanx></c>
      <c>none defined; media keeps its own</c>
      <c>Catalog</c>
      <c><spanx style="verb">m2ts*</spanx> members on each track</c>
      <c>one <spanx style="verb">mpegts</spanx> root member</c>
      <c>Relay</c>
      <c>caches and drops whole objects</c>
      <c>drops and prioritizes per elementary stream</c>
</texttable>

<t>The two overlap only on program identity: <spanx style="verb">m2tsProgramNumber</spanx> and <spanx style="verb">m2tsPmtPid</spanx> against <xref target="field-program"/>, and <spanx style="verb">m2tsPsiInterval</spanx> against a per-PID <spanx style="verb">interval</spanx> (<xref target="field-si"/>).
They do not collide, since those members sit on a track and this section sits at the root.
A track is one shape or the other.</t>

</section>
<section anchor="section"><name>The mpegts Section</name>
<t>A publisher that demultiplexed a transport stream <bcp14>SHOULD</bcp14> add an <spanx style="verb">mpegts</spanx> root member to its catalog (<xref target="carriage"/>):</t>

<figure><artwork><![CDATA[
type Mpegts = {
  "tracks": Map<TrackName, Track> | undefined,
  "programDescriptors": Descriptor[] | undefined,
  "program": Program | undefined,
  "si": Map<PidString, Si> | undefined,
  "muxRate": number | undefined,
}
]]></artwork></figure>

<t>Every member is optional and a publisher <bcp14>MUST</bcp14> omit an empty one, so a broadcast with nothing to record omits the section entirely.</t>

<section anchor="tracks"><name>tracks</name>
<t><spanx style="verb">tracks</spanx> maps a MoQ track name to that track's MPEG-TS identity:</t>

<figure><artwork><![CDATA[
type Track = {
  "pid": number,
  "descriptors": Descriptor[] | undefined,
  "verbatim": Verbatim | undefined,
}
]]></artwork></figure>

<t><spanx style="verb">pid</spanx> is the track's PID in the source, 0..8191.
A publisher <bcp14>MUST NOT</bcp14> record 0x0000 (PAT) or 0x1FFF (null packets), which carry no elementary stream.</t>

<t><spanx style="verb">descriptors</spanx> are the track's ES-level descriptors from the PMT (<xref target="descriptor"/>), in PMT order.</t>

<t><spanx style="verb">verbatim</spanx> marks a track carrying an undecoded elementary stream (<xref target="verbatim"/>).
A decoded track <bcp14>MAY</bcp14> appear here too, to preserve its <spanx style="verb">pid</spanx> and <spanx style="verb">descriptors</spanx>.
A consumer <bcp14>MUST</bcp14> ignore an entry with neither a <spanx style="verb">verbatim</spanx> record nor a track the catalog describes.</t>

</section>
<section anchor="programdescriptors"><name>programDescriptors</name>
<t>The PMT's program-level descriptors (<spanx style="verb">program_info</spanx>), in PMT order (<xref target="descriptor"/>).</t>

</section>
<section anchor="field-program"><name>program</name>
<t>The program identity from the PAT:</t>

<figure><artwork><![CDATA[
type Program = {
  "transportStreamId": number,
  "programNumber": number,
  "pmtPid": number,
}
]]></artwork></figure>

<t><spanx style="verb">transportStreamId</spanx>, <spanx style="verb">programNumber</spanx> (the DVB service id), and <spanx style="verb">pmtPid</spanx> come from the PAT.
They are the only service-layer fields this document parses; everything else about the program stays inside the opaque <spanx style="verb">si</spanx> tables.</t>

<t>A publisher <bcp14>MUST</bcp14> include <spanx style="verb">program</spanx> when the broadcast came from a transport stream, and omit it otherwise.</t>

</section>
<section anchor="field-si"><name>si</name>
<t>The standalone service information tables, keyed by the PID they ride on and then by <spanx style="verb">table_id</spanx>:</t>

<figure><artwork><![CDATA[
type Si = Map<TableIdString, SiEntry>

type SiEntry = {
  "track": string,
  "interval": number | undefined,
}
]]></artwork></figure>

<t>JSON object keys are strings, so both are decimal with no leading zeros: <spanx style="verb">"17"</spanx> for PID 0x0011, <spanx style="verb">"66"</spanx> for <spanx style="verb">table_id</spanx> 0x42.
A consumer <bcp14>MUST</bcp14> refuse a catalog whose PID key is not an integer in 0..8191, or whose <spanx style="verb">table_id</spanx> key is not an integer in 0..255.
A consumer <bcp14>MAY</bcp14> additionally accept the pre-<spanx style="verb">table_id</spanx> form, where a PID maps to <spanx style="verb">{"interval", "sections"}</spanx> with the sections inline: it decodes into one entry per <spanx style="verb">table_id</spanx> (byte 0 of each section) naming no track. A producer <bcp14>MUST NOT</bcp14> write that form.</t>

<t><spanx style="verb">table_id</spanx> is byte 0 of generic section syntax (<xref target="mpeg2"/> Section 2.4.4), so the key is no less generic than the PID; which ranges mean what is a delivery-system convention this document does not rely on.</t>

<t><spanx style="verb">track</spanx> names the snapshot track carrying the entry's sections (<xref target="si-track"/>), published in the same broadcast as the catalog.
The sections are not in the catalog: a full EPG is megabytes and would be republished on every unrelated catalog change.</t>

<t><spanx style="verb">interval</spanx> bounds how often a rebuilt stream repeats the entry's sections, in milliseconds.
A publisher <bcp14>SHOULD</bcp14> use its delivery system's maximum repetition interval for that <spanx style="verb">table_id</spanx>, for example <xref target="dvbrep"/> for DVB: 2000 for SDT actual and EIT present/following actual, 10000 for the NIT, the BAT, SDT other and EIT schedule actual, 30000 for EIT schedule other.
It <bcp14>MUST</bcp14> omit <spanx style="verb">interval</spanx> for a <spanx style="verb">table_id</spanx> whose requirement it does not know; a consumer then falls back to its own PSI cadence.
The key is <spanx style="verb">table_id</spanx> rather than PID because that is the granularity the requirements are defined at: one PID carries tables wanting different rates.</t>

<t>PAT and PMT are never carried here: they are rebuilt from <spanx style="verb">program</spanx>, <spanx style="verb">programDescriptors</spanx>, and the per-track entries.</t>

</section>
<section anchor="field-mux-rate"><name>muxRate</name>
<t>The rate the source's PCR clock paced the whole multiplex at, in bits per second: every PID, the PSI, and the null packets, measured as the packets between two PCRs over the time they span.
It is not a sum of the elementary streams, and a track's own bitrate keeps its codec meaning.</t>

<t>A publisher <bcp14>MUST</bcp14> include <spanx style="verb">muxRate</spanx> only while the source holds a constant rate, and <bcp14>MUST</bcp14> omit it for a variable-rate or unpaced source; a value that has become invalid is removed rather than left stale.
A consumer rebuilding a transport stream <bcp14>SHOULD</bcp14> pad its output with null packets to <spanx style="verb">muxRate</spanx> (<xref target="rebuild"/>).</t>

<section anchor="si-track"><name>SI Track</name>
<t>Each group is a complete picture of the entry's current sections: one frame per sub-table, each frame that sub-table's sections concatenated verbatim in <spanx style="verb">section_number</spanx> order.
Sections are self-delimiting through <spanx style="verb">section_length</spanx>, so a frame needs no further framing.
A joiner reads only the newest group.</t>

<t>Frames apply in order and a later frame replaces an earlier one of the same sub-table, so a publisher <bcp14>MAY</bcp14> append a revision within a group rather than opening a new one.
A publisher <bcp14>MUST</bcp14> commit a revised sub-table whole: no group may expose part of one version beside part of another.</t>

<t>A sub-table is identified by its <spanx style="verb">table_id_extension</spanx>, plus the bytes that disambiguate it where the extension alone does not: <spanx style="verb">original_network_id</spanx> for SDT other, and <spanx style="verb">transport_stream_id</spanx> with <spanx style="verb">original_network_id</spanx> for the EIT, whose extension is a service id unique only within a transport stream.
A short-form section carries no extension, version, or numbering, so its <spanx style="verb">table_id</spanx> is one latest-value slot and each arrival replaces the last; that is what lets a time table be proxied rather than synthesized.</t>

</section>
</section>
<section anchor="descriptor"><name>Descriptor</name>
<t>One PMT descriptor:</t>

<figure><artwork><![CDATA[
type Descriptor = {
  "tag": number,
  "data": string,
}
]]></artwork></figure>

<t><spanx style="verb">tag</spanx> is the <spanx style="verb">descriptor_tag</spanx> (0x05 registration, 0x0A ISO-639 language, ...), 0..255.
<spanx style="verb">data</spanx> is the body after the tag and length, base64 (<xref section="4" sectionFormat="comma" target="RFC4648"/>).</t>

<t>Descriptors are never parsed, so a consumer <bcp14>MUST</bcp14> re-emit a list in order and <bcp14>MUST NOT</bcp14> reorder, merge, or drop entries.</t>

</section>
</section>
<section anchor="verbatim"><name>Verbatim Tracks</name>
<t>An elementary stream the publisher does not decode rides its own MoQ track, byte-for-byte:</t>

<figure><artwork><![CDATA[
type Verbatim = {
  "streamType": number,
  "framing": "pes" | "section",
  "streamId": number | undefined,
}
]]></artwork></figure>

<t><spanx style="verb">streamType</spanx> is the PMT <spanx style="verb">stream_type</spanx> to re-announce: 0x86 for SCTE-35 <xref target="scte35"/>, 0x06 for private PES, 0x05 for private sections.</t>

<t><spanx style="verb">framing</spanx> says how the payload is framed, defaulting to <spanx style="verb">"pes"</spanx>.
With <spanx style="verb">"pes"</spanx> each frame is one complete PES payload, timestamped with its PTS, or 0 if it carried none.
With <spanx style="verb">"section"</spanx> each frame is one complete section, header and CRC included, timestamped with the media time it arrived at.
A consumer <bcp14>MUST</bcp14> refuse a catalog that names a <spanx style="verb">framing</spanx> it does not recognize, rather than guess.</t>

<t><spanx style="verb">streamId</spanx> is the original PES <spanx style="verb">stream_id</spanx>, for example 0xBD (<spanx style="verb">private_stream_1</spanx>) for teletext, DVB subtitles, and DVB AC-3.
It applies only to <spanx style="verb">"pes"</spanx> framing.
A publisher <bcp14>SHOULD</bcp14> record it, since strict demultiplexers reject a relabeled PES; a consumer with none falls back to <spanx style="verb">private_stream_1</spanx>.</t>

<t>Each frame <bcp14>MUST</bcp14> be a keyframe in its own group: a verbatim payload is all-or-nothing.</t>

<t>A verbatim track has no codec, dimensions, or decoder configuration, so a publisher <bcp14>MUST NOT</bcp14> describe it as a media rendition and <bcp14>MUST</bcp14> describe it only by its <spanx style="verb">tracks</spanx> entry.
Nothing there declares a container, so its frames use hang's <spanx style="verb">legacy</spanx> container (<xref target="hang"/>): a varint microsecond timestamp followed by the payload.</t>

</section>
<section anchor="carriage"><name>Carriage</name>
<t>The section is the same JSON in either catalog format.</t>

<section anchor="carriage-hang"><name>hang</name>
<t>A root member named <spanx style="verb">mpegts</spanx>, alongside <spanx style="verb">video</spanx> and <spanx style="verb">audio</spanx> (<xref target="hang"/>).
hang carries a decoder config's raw bytes as hex while every binary field here is base64; the alphabets overlap, so the encoding cannot be detected and is stated per field above.</t>

</section>
<section anchor="carriage-msf"><name>MSF</name>
<t>A root member named <spanx style="verb">mpegts</spanx>, alongside <spanx style="verb">tracks</spanx> (<xref target="msf"/>).
A publisher <bcp14>MUST NOT</bcp14> name a section after a member MSF itself defines.</t>

<t>The keys of the section's own <spanx style="verb">tracks</spanx> member are MSF track names; a decoded track also has an MSF track object, a verbatim track does not.</t>

<t>This document defines no packaging value; <xref target="msfts"/> registers <spanx style="verb">m2ts</spanx> for the passthrough shape (<xref target="comparison"/>).</t>

</section>
</section>
<section anchor="rebuild"><name>Rebuilding a Transport Stream</name>
<t>A consumer rebuilding a transport stream:</t>

<t><list style="symbols">
  <t><bcp14>MUST</bcp14> place each track on its recorded <spanx style="verb">pid</spanx>, and <bcp14>MUST</bcp14> assign an unused PID to a track with none.</t>
  <t><bcp14>MUST</bcp14> put the PMT on <spanx style="verb">program.pmtPid</spanx> and build the PAT and PMT from <spanx style="verb">program</spanx>.</t>
  <t><bcp14>MUST</bcp14> re-emit each track's <spanx style="verb">descriptors</spanx> as its ES-level descriptors, and <spanx style="verb">programDescriptors</spanx> as the PMT's <spanx style="verb">program_info</spanx>.</t>
  <t><bcp14>MUST</bcp14> re-emit each <spanx style="verb">si</spanx> entry's sections byte-for-byte on that entry's PID, reading them from its track (<xref target="si-track"/>), at least as often as its <spanx style="verb">interval</spanx> when declared.</t>
  <t><bcp14>MUST</bcp14> repacketize each verbatim track per its <spanx style="verb">framing</spanx> and <spanx style="verb">streamType</spanx>, using <spanx style="verb">streamId</spanx> when recorded.</t>
  <t><bcp14>SHOULD</bcp14> pad the output with null packets to <spanx style="verb">muxRate</spanx> when present, so the rebuilt stream is constant-rate again; a source that exceeds the rate is passed through rather than delayed or dropped.</t>
</list></t>

<t>With no <spanx style="verb">program</spanx> the consumer synthesizes an identity, and <bcp14>SHOULD</bcp14> then omit any carried <spanx style="verb">si</spanx>, which describes a program that no longer exists.</t>

<t>A consumer <bcp14>MAY</bcp14> derive implied signaling: a program carrying a section-framed 0x86 stream and no <spanx style="verb">programDescriptors</spanx> implies the SCTE-35 <spanx style="verb">CUEI</spanx> registration descriptor.
A consumer <bcp14>MUST NOT</bcp14> derive one that contradicts a recorded descriptor.</t>

</section>
<section anchor="security-considerations"><name>Security Considerations</name>
<t>Every binary field here is re-emitted without inspection, by a publisher that never parsed it and a relay that never looked, so a consumer <bcp14>MUST</bcp14> treat all of it as untrusted input.</t>

<t>Nothing bounds the number of entries in the section, nor the size of an SI track: a publisher controls both, and an EPG is large by nature.
A consumer <bcp14>MUST</bcp14> bound what it accepts of each, and <bcp14>MUST</bcp14> reject a catalog it cannot bound rather than truncate it into a stream that silently differs from what was described.
PIDs, program numbers, and stream types are 13-, 16-, and 8-bit values in a JSON document that can hold any number, so a consumer <bcp14>MUST</bcp14> range-check each one.
A catalog can also name one PID twice, so a consumer <bcp14>MUST NOT</bcp14> emit a stream in which two elementary streams share a PID, or in which an SI table shares a PID with PAT, PMT, null packets, or an elementary stream.</t>

<t>The section makes a broadcast's provenance legible to anything that can read the catalog, relays included: the service name, provider, and network inside the carried SI, and the original PID layout.
A publisher that does not want that <bcp14>MUST</bcp14> omit the section.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>This document requests no registrations.</t>

<t>Should <xref target="msf"/> establish a registry of catalog root members, this document requests registration of <spanx style="verb">mpegts</spanx> with this document as the reference.</t>

</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">




<reference anchor="hang">
   <front>
      <title>Media over QUIC - Hang</title>
      <author fullname="Luke Curley" initials="L." surname="Curley">
         </author>
      <date day="3" month="August" year="2026"/>
      <abstract>
	 <t>   Hang is a real-time conferencing protocol built on top of moq-lite.
   A room consists of multiple participants who publish media tracks.
   All updates are live, such as a change in participants or media
   tracks.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-lcurley-moq-hang-02"/>
   
</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="mpeg2" target="https://www.iso.org/standard/83239.html">
  <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="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>
<reference anchor="RFC4648">
  <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>



    </references>

    <references title='Informative References' anchor="sec-informative-references">




<reference anchor="msfts">
   <front>
      <title>MPEG-2 Transport Stream Packaging for MOQT</title>
      <author fullname="Paul Gregoire" initials="P." surname="Gregoire">
         <organization>Red5</organization>
      </author>
      <author fullname="Gwendal Simon" initials="G." surname="Simon">
         <organization>Quortex</organization>
      </author>
      <date day="24" month="September" year="2026"/>
      <abstract>
	 <t>   This document extends the MOQT Streaming Format (MSF) catalog by
   defining the &quot;mpeg2ts&quot; packaging value for carrying MPEG-2 Transport
   Stream and M2TS source packets over MOQT.  It defines catalog-
   extension fields for transport-stream track description and specifies
   subscriber behavior for joining, switching, and validating packetized
   streams.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-gregoire-moq-msfts-01"/>
   
</reference>

<reference anchor="dvbrep" target="https://www.etsi.org/standards">
  <front>
    <title>Digital Video Broadcasting (DVB); Guidelines on implementation and usage of Service Information (SI)</title>
    <author >
      <organization>ETSI</organization>
    </author>
    <date />
  </front>
  <seriesInfo name="ETSI" value="TS 101 211"/>
</reference>
<reference anchor="scte35" target="https://www.scte.org/standards/">
  <front>
    <title>Digital Program Insertion Cueing Message</title>
    <author >
      <organization>SCTE</organization>
    </author>
    <date />
  </front>
  <seriesInfo name="SCTE" value="35"/>
</reference>


    </references>

</references>


<?line 317?>

<section numbered="false" anchor="appendix-a-example"><name>Appendix A: Example</name>

<t>A broadcast demultiplexed from a DVB transport stream: video and audio described as ordinary renditions, a verbatim SCTE-35 stream, and the source's SDT Actual (<spanx style="verb">table_id</spanx> 0x42 on PID 0x0011) carried opaquely on its own track.</t>

<figure><artwork><![CDATA[
{
  "mpegts": {
    "program": {
      "transportStreamId": 4660,
      "programNumber": 1,
      "pmtPid": 100
    },
    "programDescriptors": [
      { "tag": 5, "data": "Q1VFSQ==" }
    ],
    "tracks": {
      "video0": { "pid": 257 },
      "audio0": {
        "pid": 258,
        "descriptors": [ { "tag": 10, "data": "ZW5nAA==" } ]
      },
      "0.ts": {
        "pid": 500,
        "verbatim": { "streamType": 134, "framing": "section" }
      }
    },
    "si": {
      "17": {
        "66": { "track": "si/17/66", "interval": 2000 }
      }
    }
  }
}
]]></artwork></figure>

</section>
<section numbered="false" anchor="appendix-b-changelog"><name>Appendix B: Changelog</name>

<section numbered="false" anchor="draft-lcurley-moq-mpegts-00"><name>draft-lcurley-moq-mpegts-00</name>

<t><list style="symbols">
  <t>Initial version.</t>
  <t>The <spanx style="verb">Si</spanx> type is keyed by <spanx style="verb">table_id</spanx> only; the PID lives on the enclosing <spanx style="verb">si</spanx> map.</t>
  <t>A consumer refuses a catalog with an unrecognized <spanx style="verb">framing</spanx> or an invalid <spanx style="verb">si</spanx> map key.</t>
  <t>Added <spanx style="verb">muxRate</spanx>, the source's constant multiplex rate.</t>
  <t>A consumer may read the pre-<spanx style="verb">table_id</spanx> inline <spanx style="verb">sections</spanx> form; writing stays track-only.</t>
</list></t>

</section>
</section>
<section numbered="false" anchor="acknowledgments"><name>Acknowledgments</name>

<t>This document was drafted with the assistance of Claude, an AI assistant by Anthropic.</t>

</section>


  </back>

<!-- ##markdown-source:
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
rdM34/5dTcw5ySkOKc182PtfjGkuPw9FAAA=

-->

</rfc>

