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.
65 lines
2.4 KiB
TypeScript
65 lines
2.4 KiB
TypeScript
/*
|
|
Copyright 2025 New Vector Ltd.
|
|
|
|
SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
|
Please see LICENSE in the repository root for full details.
|
|
*/
|
|
|
|
import { defineConfig, mergeConfig } from "vite";
|
|
import generateFile from "vite-plugin-generate-file";
|
|
|
|
import fullConfig from "./vite.config";
|
|
|
|
const base = "./";
|
|
|
|
// Config for embedded deployments (possibly hosted under a non-root path)
|
|
export default defineConfig((env) =>
|
|
mergeConfig(
|
|
fullConfig({ ...env, packageType: "embedded" }),
|
|
defineConfig({
|
|
base, // Use relative URLs to allow the app to be hosted under any path
|
|
publicDir: false, // Don't serve the public directory which only contains the favicon
|
|
plugins: [
|
|
generateFile([
|
|
{
|
|
type: "json",
|
|
output: "./config.json",
|
|
data: {
|
|
matrix_rtc_session: {
|
|
wait_for_key_rotation_ms: 5000,
|
|
delayed_leave_event_restart_ms: 4000,
|
|
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). 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,
|
|
max_bitrate: 6_000_000,
|
|
max_framerate: 30,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
]),
|
|
],
|
|
}),
|
|
),
|
|
);
|