# Base LiveKit Helm values (chart: livekit/livekit-server). # DOMAIN_SUFFIX is replaced by overlay patches. # API keys/secrets come from the livekit-keys Secret (loaded via extraEnv or config file). # Reference: https://github.com/livekit/livekit-helm/blob/master/server-sample.yaml livekit: port: 7880 log_level: info prometheus_port: 6789 # ── Codec preferences (order matters — first match wins) ──────────── room: enabled_codecs: - mime: audio/opus - mime: audio/red # VP9: ~2x quality-per-bit over H.264, built-in SVC. - mime: video/vp9 # AV1: best compression, limited HW decode support still. - mime: video/av1 # H.264: broadest HW accel, fallback for constrained clients. - mime: video/h264 # VP8: widest compatibility baseline (Element Call default). - mime: video/vp8 # Receiver-side jitter buffer. Tight values for a small team. playout_delay: enabled: true min: 100 max: 500 sync_streams: true empty_timeout: 300 departure_timeout: 20 # ── RTC / transport ───────────────────────────────────────────────── rtc: port_range_start: 49152 port_range_end: 49252 tcp_port: 7881 use_external_ip: true allow_tcp_fallback: true # Request keyframes faster after quality drops. pli_throttle: low_quality: 300ms mid_quality: 500ms high_quality: 500ms # Larger NACK retransmission buffers for loss recovery. packet_buffer_size_video: 1000 packet_buffer_size_audio: 500 # Never pause video tracks due to congestion — we have the bandwidth. congestion_control: enabled: true allow_pause: false # ── TURN ──────────────────────────────────────────────────────────── turn: enabled: true domain: meet.DOMAIN_SUFFIX tls_port: 5349 udp_port: 3478 external_tls: true relay_range_start: 13333 relay_range_end: 23333 redis: address: valkey.data.svc.cluster.local:6379 key_file: keys.yaml storeKeysInSecret: enabled: true existingSecret: livekit-api-credentials # ServiceMonitor created as standalone resource (livekit-servicemonitor.yaml) — # chart template requires livekit.prometheus_port which conflicts with hostNetwork. deployment: hostNetwork: true resources: limits: memory: 2048Mi cpu: 4000m requests: memory: 512Mi cpu: 500m # Recreate strategy: hostPorts (TURN UDP relay range) block RollingUpdate — # the new pod cannot schedule while the old one still holds the host ports. deploymentStrategy: type: Recreate