From 7741180ae32a600f1c1f3e87903a85a072cde005 Mon Sep 17 00:00:00 2001 From: Thore Cimbal Date: Tue, 28 Jul 2026 16:06:07 +0200 Subject: [PATCH] feat: Add 720p simulcast middle layer, note VP9/SVC incompatibility Default was only [180p, 360p] simulcast fallback layers - a big quality cliff straight to blocky 360p on minor network hiccups instead of gracefully stepping down from the 1440p top layer. Added a 720p middle rung. Also documented the likely real reason forcing video_codec: vp9 broke calls (2026-07-28): LiveKit uses SVC for vp9/av1, not classic simulcast, but buildPublishOptions() always builds simulcast-shaped layers regardless of codec - needs a code fix before retrying vp9. --- embedded/web/package.json | 2 +- vite-embedded.config.ts | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/embedded/web/package.json b/embedded/web/package.json index 3bda3538..c1b9caa8 100644 --- a/embedded/web/package.json +++ b/embedded/web/package.json @@ -1,6 +1,6 @@ { "name": "@sorb/threadnet-call-embedded", - "version": "0.19.2-threadnet.1", + "version": "0.19.2-threadnet.3", "files": [ "README.md", "LICENSE-AGPL-3.0", diff --git a/vite-embedded.config.ts b/vite-embedded.config.ts index a5f82af9..784ce83d 100644 --- a/vite-embedded.config.ts +++ b/vite-embedded.config.ts @@ -31,13 +31,23 @@ export default defineConfig((env) => delayed_leave_event_delay_ms: 18000, }, media_quality: { - // video_codec intentionally left unset (defaults to vp8) - setting it - // to "vp9" broke calls entirely in production (2026-07-28, no audio/video - // transmitted). Root cause not confirmed; revisit once isolated. + // video_codec intentionally left unset (defaults to vp8) - setting it to + // "vp9" broke calls entirely in production (2026-07-28, no audio/video + // transmitted). Likely cause: LiveKit uses SVC for vp9/av1 instead of + // classic simulcast, but buildPublishOptions() in src/livekit/options.ts + // always sets simulcast-shaped videoSimulcastLayers regardless of codec - + // needs a code fix in that function before vp9 can be retried safely. video: { max_resolution: 1440, max_bitrate: 8_000_000, max_framerate: 60, + // Without this, the code default is only [180p, 360p] - a huge quality + // cliff straight to blocky 360p on any minor network hiccup instead of + // gracefully stepping down. Added a 720p middle rung. + simulcast_layers: [ + { height: 180, bitrate: 150_000 }, + { height: 720, bitrate: 2_500_000 }, + ], }, screen_share: { max_resolution: 1440,