# Minimal single-node LiveKit capacity for Screener's optional automatic SFU # fallback. Copy this file to an untracked service-owned location such as # /etc/livekit/livekit.yaml. Store only the generated key mapping in # /etc/livekit/keys.yaml, owned by the livekit service user with mode 0600. port: 7880 key_file: /etc/livekit/keys.yaml rtc: # These media ports must be reached directly by clients. Port 7880 is only # for the same-host reverse proxy and must be denied by every public firewall. udp_port: 7882 tcp_port: 0 allow_tcp_fallback: false # Use the deployment-owned STUN listener for server public-IP discovery and # avoid LiveKit substituting a public default in its join response. The # Screener Browser SFU connects use an empty ICE-server list; ordinary peer # edges receive this listener through application signaling. stun_servers: - stun.example.com:3478 use_external_ip: true congestion_control: # Let LiveKit select the forwarded layer from subscriber bandwidth. use_send_side_bwe: true room: # Screener creates exact-generation rooms through the private RoomService API. # Keep this false so a stale participant token cannot recreate a drained room. auto_create: false # Screener enforces its configured admission limit before issuing a token. # This server-side ceiling covers the repository's 20 viewers plus one Host. max_participants: 21 logging: # Info-level join records include raw PublisherOffer SDP in LiveKit 1.13.5. # Keep production at warn so credentials and media-path details stay out of # the persistent journal; raise it only in an isolated, short-lived canary. level: warn pion_level: error # External or embedded TURN, Redis, recording, ingress, egress, and webhooks are # omitted on purpose. ICE/TCP fallback is explicitly disabled above. This # candidate is one process on one node.