feat(call): native WASAPI system-audio for screen-share (Windows)

Hooks the custom screen-share picker up to a native WASAPI loopback
capture so "Mit System-Sound" no longer falls back to the OS picker on
Windows. Rust side opens the default render endpoint, channels 48 kHz
f32 stereo to an AudioWorklet, which feeds a MediaStreamDestination for
LiveKit to publish as ScreenShareAudio. Ring buffer sized for latency
(80 ms target, drop-to-target on overflow) and the AudioContext is
resumed eagerly so initial burstiness can't pile up.

Adds a temporary attachTrack:audio diagnostic log to confirm source
tagging matches between old and new clients.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
byGalax
2026-04-22 23:03:15 +02:00
parent e2e8217b86
commit 665f450878
7 changed files with 827 additions and 21 deletions
+7
View File
@@ -57,6 +57,13 @@ windows = { version = "0.58", features = [
"Win32_UI_WindowsAndMessaging",
] }
# WASAPI loopback capture for system-audio screen-share. Lets the custom
# picker hand LiveKit a real audio track without falling back to the OS
# screen picker (which is the only way getDisplayMedia can grab system
# sound). Windows-only for v1; macOS needs ScreenCaptureKit-audio and
# Linux needs a PulseAudio / PipeWire path.
wasapi = "0.15"
# LiveKit client SDK — lives behind the `rust-livekit` feature flag so the
# baseline build stays unaffected while the JS-SDK path is still the
# default. Pulls libwebrtc-rs which adds ~20MB to the binary and ~5-10min