feat(catalog): add m2tsEsPid field and ES-level carriage mode - #22
Merged
Conversation
Introduce ES-level carriage as a third mode alongside unmodified and modified carriage. A track with `m2tsEsPid` present carries exactly one elementary stream or signaling table per MOQT track, enabling per-ES subscription and subscriber-side program recombination. * Add optional `m2tsEsPid` Number field: identifies the single PID carried in the track; requires m2tsModified true; forbids m2tsMpts, m2tsPmtPid, m2tsSiPids, and m2tsScte35Pid * Add §5.5.3 Modified ES-Level Carriage: defines track payload rules, PCR cross-track reference, Group boundary synchronization requirement, subscriber recombination obligations, and altGroup audio semantics * Define MSF role values for SI-table and SCTE-35 ES-level tracks: "nit", "sdt", "eit", "tdt", "scte35" * Update §5.5 intro to describe three carriage modes * Update m2tsPmtPid, m2tsPcrPid, m2tsSiPids, m2tsScte35Pid definitions with ES-level constraints and cross-track PCR reference semantics * Add ES-level subscriber processing paragraph to §8 * Add catalog example: video + two alternate audio tracks + EIT track Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Drop the inline PSI interleaving option. initDataList is the sole path for PAT/PMT delivery in ES-level tracks, consistent with the m2tsEsPid field definition which already commits to carrying only packets for that PID. * §5.5.3: remove sentence permitting inline PAT/PMT interleaving; replace with m2tsPsiInterval MUST be absent rationale * m2tsPsiInterval definition: add explicit MUST be absent constraint when m2tsEsPid is present Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
altGroup carries mutually exclusive switching semantics in §9 (PCR discontinuity, STC re-init, PAT/PMT re-parse on switch). Simultaneous subscription to multiple tracks in the same altGroup contradicts that definition. Language variants are also independent services, not ABR alternate renditions, so altGroup is the wrong mechanism. Subscribers select the audio language of their choice among the published ES-level tracks using m2tsProgramNumber and role; no grouping field is required. * §5.5.3: remove altGroup paragraph * catalog example: remove altGroup from both audio tracks; update description to drop "alternate" framing Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
A subscriber combining a partial ES selection computes its own target rate; PCR remains the authoritative timing reference. Allowing m2tsMuxRate on individual ES-level tracks would imply a whole-program rate applies to a partial selection, which is incorrect. * m2tsMuxRate definition: add MUST be absent when m2tsEsPid is present * §5.5.3: remove sentence directing subscriber to use m2tsMuxRate for CBR restoration in combined output Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
mondain
approved these changes
Aug 10, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Introduces ES-level carriage as a third carriage mode alongside the existing unmodified and modified modes. When
m2tsEsPidis present, a track carries exactly one elementary stream or signaling table, enabling subscribers to select and recombine individual streams independently.m2tsEsPidfield (Optional, Number): identifies the single PID in the track. Requiresm2tsModified: true. Forbidsm2tsMpts,m2tsPmtPid,m2tsSiPids, andm2tsScte35Pidon the same track.m2tsEsPid; no PAT, PMT, or null packets), PCR cross-track reference semantics, Group boundary synchronization requirement across ES-level tracks for the same program, subscriber recombination obligations (construct PAT+PMT, interleave packets, source PCR from PCR-bearing track), andaltGroupsemantics for alternate audio renditions.rolevalues defined for SI-table and SCTE-35 tracks:"nit","sdt","eit","tdt","scte35".m2tsPmtPid,m2tsPcrPid,m2tsSiPids,m2tsScte35Pideach carry new constraints and explanations specific to ES-level tracks.Test plan
m2tsEsPidconstraint cross-references are consistent (m2tsPmtPid, m2tsSiPids, m2tsScte35Pid all MUST be absent)🤖 Generated with Claude Code