diff --git a/quest/m1/README.md b/quest/m1/README.md index 64c978f6c8..99867fbf26 100644 --- a/quest/m1/README.md +++ b/quest/m1/README.md @@ -46,7 +46,6 @@ transport, benchmark tooling); worktrees isolate commits, not semantics. - [JavaScript FETCH](/quest/m1/js-fetch.md) - generic on-demand group serving and IETF FETCH for browser publishers - [Archive](/quest/m1/archive/README.md) - record selected tracks to any object_store and replay them over FETCH or derived HLS, on the catalog and store the release ships - [Wildcard](/quest/m1/wildcard/README.md) - a relay resolves subscriptions against advertised prefixes, a service claims the prefix it could serve and refuses the rest instead of enumerating broadcasts, and the browser player treats a covering claim as availability -- [js/publish discontinuity](/quest/m1/js-publish-discontinuity.md) - the JS container producer and js/publish emit the same marker group on encoder restart - [Impaired path](/quest/m1/transport-impairment-profile.md) - the transport drills run over a seeded, impaired UDP path on any host - [Tooling](/quest/m1/tooling/README.md) - justfiles become a one-line menu over `sh/`, one impact map scopes CI, and every workflow step runs a recipe - [Generation](/quest/m1/hls-generation.md) - init URLs follow the rendition config and segment URLs carry an embedder-supplied generation, so caching can be re-enabled diff --git a/quest/m1/js-publish-discontinuity.md b/quest/m1/js-publish-discontinuity.md deleted file mode 100644 index d492209041..0000000000 --- a/quest/m1/js-publish-discontinuity.md +++ /dev/null @@ -1,16 +0,0 @@ -# [S] js/publish declares a discontinuity with a marker group - -## Goal - -A browser publisher declares a discontinuity the same way Rust does: the -js/hang container producer publishes a marker group of one empty frame and -resumes in the next group, and js/publish calls that on encoder restart. - -## Plan - -js/hang has no container producer `discontinuity()` today (only comments in -`js/publish/src/audio/encoder.ts:154`). Add one that matches the hang marker -contract: cut the open group, write a single empty frame at the exclusive end -of the previous epoch, finish that group, and let the next keyframe open the -resume group. Wire encoder restart in js/publish to it. Data tracks skip a -sequence with no marker. diff --git a/quest/m1/publisher-clock.md b/quest/m1/publisher-clock.md index 75c533560e..23f437f7c9 100644 --- a/quest/m1/publisher-clock.md +++ b/quest/m1/publisher-clock.md @@ -16,8 +16,11 @@ old archive records. Preserve allowed B-frame ordering within a group. Keep source-specific timestamp conversion at the adapter boundary. Refuse an unmappable source explicitly. Discontinuity markers signal the existing -playhead contract; they do not replace the wall epoch. Coordinate browser -encoder restart markers with the discontinuity prerequisite. +playhead contract; they do not replace the wall epoch. In `js/publish`, the +video encoder marks a break through `Container.Legacy.Producer.cut()` whenever +its encode loop stops (demand gap or capture swap). The audio encoder writes its +own marker on a demand gap only: an audio pipeline rebuild and the framer's +input-gap reset still write none. Add CI fixtures for simultaneous A/V, late first frames, restart to zero, restart after idle, system-wall adjustment, and retained archive playback. @@ -25,10 +28,6 @@ The fixtures must exercise publisher integration rather than only the clock helper. Update publisher and import docs; this quest adds no new clock API or catalog representation. GStreamer's clock observation remains its own quest. -## Required - -- [Publisher discontinuity](/quest/m1/js-publish-discontinuity.md) - use the settled browser restart-marker path - ## Related - [GStreamer clock](/quest/m1/3021-moq-gst-anchor-generated-media-timelines-to-wall-clock.md) - separate source adapter