/* Copyright 2023, 2024 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 { AudioPresets, DefaultReconnectPolicy, type RoomOptions, ScreenSharePresets, type TrackPublishDefaults, type VideoPreset, VideoPresets, } from "livekit-client"; const defaultLiveKitPublishOptions: TrackPublishDefaults = { audioPreset: AudioPresets.music, dtx: true, // disable red because the livekit server strips out red packets for clients // that don't support it (firefox) but of course that doesn't work with e2ee. red: false, forceStereo: false, simulcast: true, videoSimulcastLayers: [VideoPresets.h180, VideoPresets.h360] as VideoPreset[], screenShareEncoding: ScreenSharePresets.h1080fps30.encoding, // Screen shares are published as three layers rather than LiveKit's default // two. The default low layer is only downscaled by 2 (960x540 at full // framerate), which is far more than a small preview needs; adding an // explicit 360p/3fps layer lets subscribers that only render a thumbnail // (such as the spotlight switcher previews) pull a very cheap stream. screenShareSimulcastLayers: [ ScreenSharePresets.h360fps3, ScreenSharePresets.h720fps15, ] as VideoPreset[], stopMicTrackOnMute: false, videoCodec: "vp8", videoEncoding: VideoPresets.h720.encoding, backupCodec: { codec: "vp8", encoding: VideoPresets.h720.encoding }, } as const; export const defaultLiveKitOptions: RoomOptions = { // automatically manage subscribed video quality adaptiveStream: true, // optimize publishing bandwidth and CPU for published tracks dynacast: true, // capture settings videoCaptureDefaults: { resolution: VideoPresets.h720.resolution, }, // publish settings publishDefaults: defaultLiveKitPublishOptions, // default LiveKit options that seem to be sane stopLocalTrackOnUnpublish: true, reconnectPolicy: new DefaultReconnectPolicy(), disconnectOnPageLeave: true, webAudioMix: false, };