Here’s a community post you can use:
Hi ,
We’re facing a performance issue in our self-hosted LiveKit deployment and would appreciate guidance from the community.
Scenario
When approximately 70 participants join a meeting with their cameras enabled, the meeting starts becoming unstable:
-
Video streams begin to freeze/hang.
-
Most participants see their connection quality indicator turn red (Poor).
-
Overall meeting experience degrades significantly.
-
Audio/video quality becomes inconsistent across participants.
Current Configuration
const roomOptions = React.useMemo((): RoomOptions => {
let videoCodec: VideoCodec | undefined = props.options.codec ? props.options.codec : 'av1';
if (e2eeEnabled && (videoCodec === 'av1' || videoCodec === 'vp9')) {
videoCodec = undefined;
}
const videoCaptureDefaults: VideoCaptureOptions = {
deviceId: props.userChoices.videoDeviceId ?? undefined,
resolution: props.options.hq ? VideoPresets.h540 : VideoPresets.h216,
};
const publishDefaults: TrackPublishDefaults = {
dtx: true,
videoSimulcastLayers: props.options.hq
? [VideoPresets.h540, VideoPresets.h360]
: [VideoPresets.h216, VideoPresets.h90],
red: !e2eeEnabled,
videoCodec,
degradationPreference: 'maintain-framerate',
};
return {
videoCaptureDefaults,
publishDefaults,
audioCaptureDefaults: {
deviceId: props.userChoices.audioDeviceId ?? undefined,
noiseSuppression: true,
},
adaptiveStream: true,
dynacast: true,
e2ee: keyProvider && worker && e2eeEnabled ? { keyProvider, worker } : undefined,
singlePeerConnection: true,
};
}, [props.userChoices, props.options.hq, props.options.codec]);
Infrastructure Details
-
Self-hosted LiveKit deployment
-
Around 70 participants
-
Most participants have cameras enabled
-
Adaptive Stream enabled
-
Dynacast enabled
-
Using AV1 codec by default
-
Single Peer Connection enabled
Questions
-
Are there any recommended optimizations for meetings of this size?
-
Would changing from AV1 to VP8/VP9 help in large meetings?
-
Are there specific server-side configurations we should tune for 70+ video participants?
-
Is there a recommended participant limit when everyone has their camera enabled?
-
Are there any monitoring metrics (CPU, bandwidth, SFU load, packet loss, etc.) that we should specifically look at to identify the bottleneck?
-
Has anyone successfully hosted 70–100 participants with cameras on using LiveKit, and what configuration worked best?
Any suggestions, best practices, or production experiences would be greatly appreciated.