// Jeffsi Meet Custom Config - High Quality Video Settings // This file is appended to config.js to override default settings // Higher bitrate limits for better video quality config.videoQuality.vp9 = { maxBitratesVideo: { low: 200000, standard: 700000, high: 2500000 }, scalabilityModeEnabled: true }; config.videoQuality.vp8 = { maxBitratesVideo: { low: 200000, standard: 500000, high: 2000000 } }; config.videoQuality.h264 = { maxBitratesVideo: { low: 200000, standard: 500000, high: 2000000 } }; // Quality level thresholds config.videoQuality.minHeightForQualityLvl = { 180: 'low', 360: 'standard', 720: 'high' }; // Higher resolution constraints config.constraints = { video: { height: { ideal: 720, max: 1080, min: 180 }, width: { ideal: 1280, max: 1920, min: 320 }, frameRate: { ideal: 30, max: 30, min: 15 } } }; // STUN + TURN servers for NAT traversal (critical for mobile) config.p2p.stunServers = [ { urls: 'stun:159.195.32.209:3478' }, { urls: 'stun:stun.l.google.com:19302' }, { urls: 'stun:stun1.l.google.com:19302' } ]; // P2P ICE transport policy - use 'all' to allow both relay and direct config.p2p.iceTransportPolicy = 'all'; // TURN servers for P2P (relay fallback for symmetric NAT / mobile) config.p2p.iceServers = [ { urls: ['turn:159.195.32.209:3478?transport=udp', 'turn:159.195.32.209:3478?transport=tcp'], username: 'turnuser', credential: 'jeffsi-turn-secret-2025' } ]; // Increase last N (max participants with video showing) config.channelLastN = 25; // Enable layer suspension for bandwidth adaptation config.enableLayerSuspension = true; // Start in tile/gallery view by default (show all participants) config.startInTileView = true; // Disable auto-pinning of screen shares and dominant speaker config.disableSelfView = false; config.disableSelfViewSettings = false; // Enable "End meeting for all" button config.disableRemoteMute = false; config.remoteVideoMenu = { disableKick: false, disableGrantModerator: false }; // Security UI options config.securityUi = { disableLobbyPassword: false, hideLobbyButton: false }; // Enable close page after meeting ends config.enableClosePage = true; // Disable deep linking - keep mobile users in the web browser // instead of redirecting to the native Jitsi Meet app config.disableDeepLinking = true; // Mobile-friendly: prefer VP8 (better hardware decode support on mobile) config.videoQuality.mobileCodecPreferenceOrder = ["VP8", "H264", "VP9", "AV1"]; // Force toolbar to always be visible (don't auto-hide on mobile) config.toolbarConfig = { autoHideWhileChatIsOpen: false, alwaysVisible: true, initialTimeout: 0, timeout: 0 }; // Ensure all toolbar buttons are available on mobile config.toolbarButtons = [ 'camera', 'chat', 'desktop', 'filmstrip', 'fullscreen', 'hangup', 'microphone', 'participants-pane', 'raisehand', 'settings', 'tileview', 'videoquality' ]; // Disable mobile-specific notifications that obscure controls config.notifications = []; config.disableModeratorIndicator = false;