119 lines
3.2 KiB
JavaScript
119 lines
3.2 KiB
JavaScript
// 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;
|