Files
23e5668a1f fix(meetings): keep the Windows silent-capture check armed for the whole call (#2233)
* fix(meetings): keep the Windows silent-capture check armed for the whole call

Windows hides Microsoft Teams call audio from WASAPI process loopback: the
helper receives digital silence for it no matter which process it targets or
which format it asks for, while the same audio is plainly present on the render
endpoint. The capture_silent watchdog added in #1935 is the way out of that, but
it disarmed permanently on the first audible sample from any application, so a
notification sound, a browser tab or Teams' own join chime left the rest of the
meeting recorded without the other participants and without a warning.

The helper now compares its own capture against the render endpoints once a
second for the whole session, resetting the confirmation count on any captured
audio, and main no longer refuses the handover once some audio has been heard.

Fixes #1265

* fix(meetings): review follow-ups for the Windows silent-capture handover

- File the changelog entry under Meetings, and stop claiming the check
  survives audio that plays continuously alongside the meeting: the streak
  resets on any captured second, so only a gap of five seconds trips it.
- Drop the watchdog's restart hook when the renderer takes over, so it can
  never respawn the helper behind a session the renderer already owns.
- Surface a takeover failure to the user. The one-shot silence notice is
  suppressed once a call has been audible, so a late failure was silent.

* fix(meetings): ship the rebuilt helper, and report a failed takeover properly

- Bump the helper workflow's default version to 1.2.0. The push trigger
  publishes the default tag, and the download script picks the newest
  published release with the prefix, so a rebuild published as 1.0.0 would
  have lost to the existing 1.1.0 and the fix would never have shipped.
- Report a failed renderer takeover as a translated system-audio interruption
  instead of a raw English string, and tell auto-end the system channel is
  gone, so a quiet microphone cannot end the recording behind it.
- Detach the watchdog's restart hook before stopping the helper, not after.
- Trim the wiring pins the behavioral test now covers, and soften two doc
  claims: a generic "gone quiet" notice does arrive three minutes later, and
  the Teams finding is measured across configurations, not every machine.

* fix(review): iteration 1 — 4 issues (takeover-failure guards)

* fix(review): iteration 2 — 1 issue (takeover attach failure handling)

* fix(meetings): keep the Windows helper until renderer loopback proves it hears more

capture_silent can fire while the helper is capturing the call fine, for
example when a stream hidden from process loopback plays through a lull.
Stopping the helper then dropped a working capture for the rest of the
meeting, and renderer loopback only hears the default output device.

Renderer loopback now starts beside the helper and takes the system
channel only after hearing audio the helper misses for a second
(meetingSystemAudioHandover.js). Until then its chunks are dropped; after
it, the helper's are, and the helper is stopped.

A takeover whose capture graph fails to build now releases the loopback
stream and its AudioContext instead of holding them until the recording
stops. Also trims comments and updates the docs for the new log lines.

---------

Co-authored-by: boseq <307062491+boseq@users.noreply.github.com>
Co-authored-by: Chadpiha <chadpiha23@gmail.com>
2026-09-30 21:45:54 +02:00
..