Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 0 additions & 18 deletions doc/bin/cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -443,24 +443,6 @@ continuity error, and the rest carry on. It takes neither `--linger`,
`--stitch` nor `--mux-rate`. Only the hang catalog names the track, so an
`.msf` broadcast needs `--catalog-format hang`.

`export ts --sync` renders every packet from the broadcast alone, so two exports
of it, joined at different moments and fed with different skew, emit identical
TS for the content both receive, continuity counters included, as the legs of a
1+1 pair must; an SMPTE ST 2022-7 pair also needs identical RTP framing around
it, which this command does not write. Each PID gets a fixed lane of the constant rate, sized
for its codec's most, with video taking the rest; content one leg lacks leaves
its packets as stuffing there. The PCR rides a PID of its own, and each PID's
continuity counter restarts at every group with the break flagged. It needs a
constant rate, the same on every leg since the lanes follow from it
(`--mux-rate`, or the catalog's), costing headroom over the
source's (a 10 Mb/s channel needs about 12), and takes neither `--stitch` nor
`--passthrough`. A group that starts behind the one before it, on a lane too
narrow to absorb that one, is logged and counted in `overruns`: the legs can
differ there. So can reordered video whose SPS declares no reorder depth
(`max_num_reorder_frames`), which is logged, and SI while one leg holds an older
revision than the other or around an SI table the catalog adds or drops, which
each leg takes up when its catalog update arrives.

A stdout export ends with the broadcast. `export ts --linger 10s` waits that
long for the same publisher instance to come back, and carries on with the same
stream. A return that cannot be read yet, such as one still routed through a
Expand Down
2 changes: 0 additions & 2 deletions doc/concept/stats.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,6 @@ source's. `export ts --passthrough` reports it without `mpegts`.
| `offset` | Gauge, milliseconds: how far the output clock sits from the source's plus the delay. Positive holds frames longer than the delay. The clock pulls it shut over ten minutes. |
| `drift` | Gauge, parts per million: the source clock's rate against ours, positive running fast. |
| `outOfTolerance` | Measurements that found the source clock past the 30 ppm ISO/IEC 13818-1 allows, which the output cannot follow. |
| `overruns` | `export ts --sync` only: groups that began behind the end of the one before on their PID, where legs can differ until the lane catches up. |
| `late` | `export ts --sync` only: packets dropped for reaching their slot after it went out, leaving stuffing. |

## Broadcasts

Expand Down
4 changes: 1 addition & 3 deletions quest/m1/ts-reliability/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ refused means an error or a counted drop.
| CAT, EMM/ECM, ATSC PSIP, other SI PIDs, unlisted PIDs, TS scrambling | Outside the profile, raw lane; counted when the import reads every program. Today dropped uncounted | [routes](/quest/m1/ts-reliability/stream-routes.md) |
| DVB SI on 0x0010, 0x0011, 0x0012, 0x0014 | Preserved: snapshot track per PID and `table_id` | landed |
| Program identity, program and ES descriptors | Preserved: descriptors follow each PMT revision; an identity change refuses | landed |
| PMT add, remove, retype; PID reuse | Normalized without a new epoch: a changed or reused PID ends its track and continues under a fresh name, and the export rebuilds the PMT at the next `version_number`. Today `export ts --sync` ends at an added track and announces no other revision | [PMT export](/quest/m1/ts-reliability/pmt-export.md) |
| PMT add, remove, retype; PID reuse | Normalized without a new epoch: a changed or reused PID ends its track and continues under a fresh name, and the export rebuilds the PMT at the next `version_number` | landed |
| PAT changes: moved PMT PID, programs added or removed | Normalized: followed; a removed program retires, and returns as a new epoch. Today ignored, or the whole multiplex stops | [PAT changes](/quest/m1/ts-reliability/pat-lifecycle.md) |
| Programs without video | Preserved when the PMT names a PCR PID; refused without one | landed |
| PCR | Normalized: rebased, carried on the first video PID, else audio, else a dedicated PCR-only PID | landed |
Expand Down Expand Up @@ -102,14 +102,12 @@ remain with their current quests.
- [State bound](/quest/m1/ts-reliability/state-bound.md) - SI and revision state retire with what the source stops repeating
- [Decode order](/quest/m1/ts-reliability/decode-order.md) - TS, MKV and FLV author DTS from decode order and a declared `reorder` depth
- [Shared parser](/quest/m1/ts-reliability/shared-parser.md) - `--program all` scans the multiplex once
- [PMT export](/quest/m1/ts-reliability/pmt-export.md) - synced TS legs revise their PMT and grid identically
- [Access units](/quest/m1/ts-reliability/pes-access-units.md) - a PES carrying several access units publishes each at its own time
- [PAT changes](/quest/m1/ts-reliability/pat-lifecycle.md) - a revised PAT never leaves a broadcast meaning another program
- [Stream routes](/quest/m1/ts-reliability/stream-routes.md) - every PID gets a declared route, and what is not carried is counted
- [Program cap](/quest/m1/ts-reliability/program-cap.md) - a PAT listing every program number cannot create a broadcast per program

## Related

- [TS over RTP legs](/quest/m2/ts-rtp-egress.md) - TS identity alone is not ST 2022-7, which also needs matching RTP headers
- [MSFTS mapping](/quest/m3/msfts-convergence.md) - document the exact equivalence and differences between the carriage modes

18 changes: 8 additions & 10 deletions quest/m1/ts-reliability/decode-order.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,12 @@ six times ([moq-dev/moq#1843](https://github.com/moq-dev/moq/pull/1843),
[#4500](https://github.com/moq-dev/moq/pull/4500),
[#4574](https://github.com/moq-dev/moq/pull/4574),
[#4645](https://github.com/moq-dev/moq/pull/4645),
[#5949](https://github.com/moq-dev/moq/pull/5949)). Today there are three
authors: `DecodeClock::pop` (`rs/moq-mux/src/container/decode.rs`, TS without
`--sync` and MKV) settles a slot by the highest PTS read and a delay that only
grows; `pop_counted` (TS `--sync`) depends on the held frames alone; FLV
[#5949](https://github.com/moq-dev/moq/pull/5949)). Today there are two
authors: `DecodeClock::pop` (`rs/moq-mux/src/container/decode.rs`, TS and
MKV) settles a slot by the highest PTS read and a delay that only grows; FLV
export authors `PTS - jitter` bumped past the last DTS, which passes the PTS
on B-frames. fMP4 export already anchors its decode timeline at each group's
on B-frames. #5949's `pop_counted`, which depended on the held frames alone,
left with `export ts --sync`. fMP4 export already anchors its decode timeline at each group's
first frame and needs no change.

Decided 2026-10-22 by the maintainer, after the TS root-cause audit:
Expand All @@ -35,9 +35,8 @@ Decided 2026-10-22 by the maintainer, after the TS root-cause audit:
- Rejected: carrying decode time in the frame (CMAF composition offsets, a
LOC property, Legacy inference). It adds a wire field to every container
to preserve spacing no consumer needs.
- One clock serves TS, MKV and FLV. The counted path becomes the only one,
and it is not called `pop_counted`: the depth is fixed for the
rendition's life, so it moves into the constructor
- One clock serves TS, MKV and FLV, counting frames against the depth. The
depth is fixed for the rendition's life, so it goes into the constructor
(`DecodeClock::new(reorder)`) and the release is a plain `pop(flush)`.
A new rendition gets a new clock. Delete the timestamp-settled `pop`, its
growing delay, `reach`, FLV's `author_dts`/`dts_reserve`, and the catalog
Expand All @@ -50,7 +49,7 @@ Decided 2026-10-22 by the maintainer, after the TS root-cause audit:
group's (n - `reorder`)th presentation slot, which no frame still to come
can precede. The group's first `reorder` frames step one 90 kHz tick apart
up to the keyframe's slot: the clock cannot know the group's spacing until
frames it may not hold have arrived (`references_far_apart_keep_their_slots`),
frames it may not hold have arrived (`references_far_apart_keep_their_slots` in #5949),
and one tick needs no spacing, keeps DTS increasing within a group and
across groups without history, holds no frame past `reorder`, and only
relaxes those frames' delivery deadlines (found in review). Rejected: a delay of
Expand Down Expand Up @@ -114,5 +113,4 @@ Keep the T-STD controls passing.

## Related

- [Deterministic TS legs for H.265](/quest/m2/ts-hitless-h265.md) - the `--sync` group anchor this path shares
- [Access units across PES](/quest/m1/ts-reliability/pes-access-units.md) - TS import's other video timing gap
4 changes: 0 additions & 4 deletions quest/m1/ts-reliability/pat-lifecycle.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,3 @@ new epoch.
## Required

- [Shared parser](/quest/m1/ts-reliability/shared-parser.md) - one parser owns the PID map this plan's accounting needs

## Related

- [PMT export](/quest/m1/ts-reliability/pmt-export.md) - the export follows a moved PMT PID with a new PAT
53 changes: 0 additions & 53 deletions quest/m1/ts-reliability/pmt-export.md

This file was deleted.

7 changes: 0 additions & 7 deletions quest/m2/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,6 @@ The first follow-through is [release execution](/quest/m2/release/README.md).
Rate-grant work targets the next unpublished lite version after finalized
lite-07; bitrate enforcement is not part of this release.

Added 2026-10-13 by the redundant TS alignment plan: TS over RTP legs,
ranked just below deterministic TS legs, which it requires.

## Required

- [Release execution](/quest/m2/release/README.md) - publication, installed-artifact proof, cleanup, and downstream adoption after m1
Expand Down Expand Up @@ -132,10 +129,6 @@ ranked just below deterministic TS legs, which it requires.
- [Synced data playback](/quest/m2/watch-data-sync.md) - js/watch releases JSON and binary payloads on the media playhead, and a slow data track holds media back
- [Watch decode gate](/quest/m2/watch-decode-gate.md) - video lookahead stays encoded until it is near presentation, like audio
- [Drop announce="never"](/quest/m2/publish-announce-never.md) - `@moq/publish` offers only announce modes a watcher can reach
- [Deterministic H.265 TS legs](/quest/m2/ts-hitless-h265.md) - H.265's buffering period gets the same group anchor as H.264
- [TS over RTP legs](/quest/m2/ts-rtp-egress.md) - two legs send identical RTP packets, headers included, so an ST 2022-7 receiver can merge them
- [Old tail across a restart](/quest/m2/ts-sync-restart-tail.md) - both `--sync` legs send the old timeline's tail up to a restart, so an ST 2022-7 merge has no hole there
- [Paced gap after a restart](/quest/m2/ts-restart-gap-burst.md) - a forward restart within the minute no longer sends every gap slot in one burst
- [moqsrc A/V sync](/quest/m2/moqsrc-av-sync.md) - a nightly test measures A/V skew from `moqsrc` through clock-synced sinks
- [MP4 export](/quest/m2/mp4-export.md) - `moq export mp4 --output` records crash-safe fragments, then finishes a regular MP4 with moov at the end
- [fMP4 edit lists](/quest/m2/fmp4-edit-lists.md) - the fMP4 importer applies edit lists to frame timestamps
Expand Down
17 changes: 0 additions & 17 deletions quest/m2/ts-hitless-h265.md

This file was deleted.

24 changes: 0 additions & 24 deletions quest/m2/ts-restart-gap-burst.md

This file was deleted.

56 changes: 0 additions & 56 deletions quest/m2/ts-rtp-egress.md

This file was deleted.

33 changes: 0 additions & 33 deletions quest/m2/ts-sync-restart-tail.md

This file was deleted.

Loading
Loading