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
2 changes: 1 addition & 1 deletion quest/m1/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@ blocks. The quests that gated m0 lines moved under them.
- [Delete the live marker](/quest/m1/announce-live-removal.md) - announce streams yield only route events; the `Live` marker and its hold machinery are gone
- [WebTransport close backends](/quest/m1/wt-close-backends.md) - web-transport-noq and -quinn keep the session alive while closing, and iroh's client reads a capsule close
- [Enabled flag](/quest/m1/catalog-enabled.md) - one `enabled` rendition flag replaces `stalled` and pausing, and the flapping encoder-lag detector is deleted
- [DTX timestamps](/quest/m1/opus-dtx-timestamps.md) - Opus DTX keeps the capture timeline, so voice enables it by default again
- [Spent capture budget errors](/quest/m1/capture-exhausted-error.md) - a camera or microphone that runs out of retries sets `out.error` instead of failing silently
- [SUBSCRIBE_DROP](/quest/m1/subscribe-drop.md) - every stream group in a lite subscription arrives or is dropped by name, and lite-07 drops its stream count for it
- [#2991](/quest/m1/2991-net-coalesce-dynamic-tracks-and-preserve-sequences-across.md) - one dynamic producer per track name in both languages, with the sequence namespace surviving a replacement
Expand All @@ -74,6 +73,7 @@ blocks. The quests that gated m0 lines moved under them.
- [Auth client CA](/quest/m1/relay-auth-client-ca.md) - `auth::Config::validate` and `init` take the client-CA flag, so no caller can skip the check
- [TS stats module](/quest/m1/ts-stats-module.md) - the TS stats types move under `ts::stats` as `Snapshot` and `Stream`, with an owned `track`
- [Audio capture without ALSA link](/quest/m1/capture-alsa-link.md) - moq-audio capture and playback build on Linux without linking libasound
- [Remove Opus DTX](/quest/m1/opus-usedtx-removal.md) - `@moq/publish` drops `usedtx`, since Chromium shifts the capture timeline under DTX
- [Capture by default](/quest/m1/capture-default.md) - moq-video and moq-audio build `capture` by default, so pre-merge checks test it and the capture gate goes away
- [Ship capture and playback](/quest/m1/cli-packaging.md) - a released moq binary can capture and play, which no distribution currently enables
- [Deploy moq.sh](/quest/m1/moq-sh-deploy.md) - the first manual deploy serves the installer at moq.sh, and the first `release` run proves the CI token
Expand Down
37 changes: 0 additions & 37 deletions quest/m1/opus-dtx-timestamps.md

This file was deleted.

27 changes: 27 additions & 0 deletions quest/m1/opus-usedtx-removal.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# [XS] Remove Opus DTX from @moq/publish

## Goal

`OpusConfig.usedtx` is gone from `@moq/publish`, and the demo's DTX checkbox
with it, so no publisher can turn on browser Opus DTX. Breaking for
`@moq/publish`.

## Plan

Decided 2026-10-06 after the measured no-go in
[#4902](https://github.com/moq-dev/moq/pull/4902): with DTX on, Chromium
stamps each Opus chunk as the first input's timestamp plus the samples it
emitted, so every suppressed frame pulls later chunks earlier (14 s of input
ended at 8.9 s). No WebCodecs output (duration, metadata, `flush()`, Ogg)
recovers the dropped span, and Chromium's decoder collapses timestamp gaps on
the listener too. Firefox keeps the timeline; Safari ignores `usedtx`.

- Remove `usedtx` from `OpusConfig` (`js/publish/src/audio/encoder.ts`) and
its test, and the checkbox and `opusDtx` signal in `demo/web/src/publish.ts`
and `publish.html`.
- Update `doc/lib/js` wherever it names the option.
- Silence suppression for voice, if a customer ever wants it, is new work:
encode without DTX and skip silent frames with our own voice detection, or a
WASM libopus encoder ([Opus backend](/quest/m2/audio-opus-backend.md)).

Public API: removes `OpusConfig.usedtx` from `@moq/publish`. Wire: none.
Loading