bigbluebutton-Github/bigbluebutton-html5/private/config/settings.yml

1014 lines
34 KiB
YAML
Raw Normal View History

public:
app:
2019-01-04 01:55:10 +08:00
mobileFontSize: 16px
desktopFontSize: 14px
audioChatNotification: false
# Shows the audio modal when user joins the room. The audio modal prompts
# user to select an option ("Microphone" and/or "Listen only") for joining
# audio
autoJoin: true
# Disables the listen only option in audio modal.
listenOnlyMode: true
forceListenOnly: false
# Skips the echo test when connecting with microphone.
skipCheck: false
# Skips the echo test when connecting with microphone right after user
2021-06-07 01:39:52 +08:00
# joins the room the first time. Subsequent joins to microphone won't
# have echo test skipped, for example if user leaves and joins the mic
# again or reloading page and joining mic again.
# This setting won't have effect if skipCheck = true
skipCheckOnJoin: false
#
2021-06-07 02:06:12 +08:00
# Allow users to change microphone/speaker dynamically
# The device is changed immediately, without the need to rejoin
# audio. Default value is true
# Firefox users: if no output devices is shown, you may set the flag
# "media.setsinkid.enabled" to make it work properly
2023-07-25 02:56:40 +08:00
enableDynamicAudioDeviceSelection: true
#
clientTitle: BigBlueButton
appName: BigBlueButton HTML5 Client
bbbServerVersion: HTML5_FULL_BBB_VERSION
displayBbbServerVersion: true
copyright: '©2023 BigBlueButton Inc.'
html5ClientBuild: HTML5_CLIENT_VERSION
helpLink: https://bigbluebutton.org/html5/
2022-12-01 00:47:49 +08:00
delayForUnmountOfSharedNote: 120000
bbbTabletApp:
enabled: true
iosAppStoreUrl: 'https://apps.apple.com/us/app/bigbluebutton-tablet/id1641156756'
iosAppUrlScheme: 'bigbluebutton-tablet'
lockOnJoin: true
cdn: ''
basename: '/html5client'
Allow BBB to run behind a proxy the avoid gUM permission queries per node The idea is to run a loadbalancer node which maps each BBB node to a path. That way each user gets only one gUM permission query for a cluster. The loadbalancer node only serves the html5 client, each BBB node will serve its own API and handle the websockets for freeswitch and bbb-webrtc-sfu. Configuring a cluster setup =========================== * let bbb-lb.example.com be the loadbalancer node * let bbb-01.eaxmple.com be a BBB node Loadbalancer ------------ On the loadbalancer node add an nginx configuration similar to this one for each BBB node: ``` location /bbb-01/html5client/ { proxy_pass https://bbb-01.example.com/bbb-01/html5client/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; } ``` BBB Node -------- On the BBB node add the following options to `/etc/bigbluebutton/bbb-web.properties`: ``` defaultHTML5ClientUrl=https://bbb-lb.example.com/bbb-01/html5client/join presentationBaseURL=https://bbb-01.example.com/bigbluebutton/presentation accessControlAllowOrigin=https://bbb-lb.example.com ``` Add the following options to `/etc/bigbluebutton/bbb-html5.yml`: ``` public: app: basename: '/bbb-01/html5client' bbbWebBase: 'https://bbb-01.eaxmple.com/bigbluebutton' learningDashboardBase: 'https://bbb-01.eaxmple.com/learning-dashboard' media: stunTurnServersFetchAddress: 'https://bbb-01.eaxmple.com/bigbluebutton/api/stuns' sip_ws_host: 'bbb-01.eaxmple.com' presentation: uploadEndpoint: 'https://bbb-01.eaxmple.com/bigbluebutton/presentation/upload' ``` Create the following unit file overrides: * `/etc/systemd/system/bbb-html5-frontend@.service.d/cluster.conf` * `/etc/systemd/system/bbb-html5-backend@.service.d/cluster.conf` with the following content: ``` [Service] Environment=ROOT_URL=https://127.0.0.1/bbb-01/html5client ``` Change the nginx `$bbb_loadbalancer_node` variable to the name of the load balancer node in `/etc/bigbluebutton/nginx/loadbalancer.nginx` to allow CORS requests: ``` set $bbb_loadbalancer_node https://bbb-lb.example.com ``` Prepend the mount point of bbb-html5 in all location sections except from the `location @html5client` section in `/etc/bigbluebutton/nginx/bbb-html5.nginx` ``` location @html5client { ... } location /bbb-01/html5client/locales { ... } ```
2021-11-19 05:52:20 +08:00
# the base location of the BBB API. If you use a cluster setup with a load
# balancer which hides the individual nodes, then this should be
# https://bbb-host/bigbluebutton
# If you run a traditional setup of multiple nodes behind scalelite and the
# users see the hostnames of the individual nodes, you can leave this at the
# default setting
bbbWebBase: '/bigbluebutton'
# If you run a cluster setup with a load balancer which hides the individual
# nodes, then this should be set to https://bbb-host/learning-analytics-dashboard
learningDashboardBase: '/learning-analytics-dashboard'
# Use https URL of CSS file. Example: https://docs.bigbluebutton.org/administration/customize
customStyleUrl: null
2022-04-09 03:05:29 +08:00
darkTheme:
enabled: true
askForFeedbackOnLogout: false
# the default logoutUrl matches window.location.origin i.e. bigbluebutton.org for demo.bigbluebutton.org
# in some cases we want only custom logoutUrl to be used when provided on meeting create. Default value: true
2023-07-31 22:24:25 +08:00
askForConfirmationOnLeave: true
2023-08-05 03:47:23 +08:00
wakeLock:
2023-08-09 03:49:15 +08:00
enabled: true
allowDefaultLogoutUrl: true
allowUserLookup: false
dynamicGuestPolicy: true
enableGuestLobbyMessage: true
2023-08-05 03:47:23 +08:00
guestPolicyExtraAllowOptions: false
alwaysShowWaitingRoomUI: true
2019-06-13 02:03:23 +08:00
enableLimitOfViewersInWebcam: false
enableMultipleCameras: true
enableCameraAsContent: true
# Allow users to open webcam video modal/preview when video is already
# active. This also allows to change virtual backgrounds without
# restarting webcam.
enableWebcamSelectorButton: true
enableTalkingIndicator: true
2022-08-26 22:50:46 +08:00
enableCameraBrightness: true
mirrorOwnWebcam: false
2019-06-13 02:03:23 +08:00
viewersInWebcam: 8
ipv4FallbackDomain: ''
allowLogout: true
allowFullscreen: true
2020-04-08 05:19:16 +08:00
preloadNextSlides: 2
warnAboutUnsavedContentOnMeetingEnd: false
# Allows users to enable automatic transcription when joining a meeting.
# Automatic transcription requires the browser to support the web
# speech API, which involves sending voice data to third-party servers!
# https://developer.mozilla.org/en-US/docs/Web/API/Web_Speech_API/Using_the_Web_Speech_API#speech_recognition
audioCaptions:
enabled: false
# mobile: <Boolean> - controls speech transcription availability on mobile
mobile: false
# provider: [webspeech, vosk, whisper, deepspeech]
2023-06-22 16:25:57 +08:00
provider: webspeech
language:
available:
# - de-DE
- en-US
- es-ES
2023-06-13 21:00:01 +08:00
- fr-FR
# - hi-ID
# - it-IT
# - ja-JP
- pt-BR
# - ru-RU
# - zh-CN
# If true, automatically uses the below locale field content as transcription language
# and the language selector in audio modal won't show up!
forceLocale: false
# If true, the default selected value for language selector in audio modal
# is the below locale field content
defaultSelectLocale: true
# Possible Values:
# browserLanguage: to set browser language
# [en-US, es-ES, pt-BR,...]: to set a specific locale
# disabled: to set disabled
locale: disabled
2020-06-23 00:02:24 +08:00
mutedAlert:
enabled: true
2020-06-23 00:02:24 +08:00
interval: 200
threshold: -50
duration: 4000
remainingTimeThreshold: 30
remainingTimeAlertThresholdArray: [1,5]
2020-09-04 07:35:57 +08:00
enableDebugWindow: true
# Warning: increasing the limit of breakout rooms per meeting
# can generate excessive overhead to the server. We recommend
# this value to be kept under 16.
breakouts:
allowUserChooseRoomByDefault: false
captureWhiteboardByDefault: false
captureSharedNotesByDefault: false
sendInvitationToAssignedModeratorsByDefault: false
breakoutRoomLimit: 16
# https://github.com/bigbluebutton/bigbluebutton/pull/10826
2021-02-25 02:00:59 +08:00
customHeartbeat: false
showAllAvailableLocales: true
# Show "Audio Filters for Microphone" option in settings menu.
# When set to true, users are able to enable/disable microphone constraints,
# otherwise default values for 'microphoneConstraints' option
# are used.
# For more info, see 'microphoneConstraints' option in this config.
# If not set, default value is true.
showAudioFilters: true
raiseHandActionButton:
# Enables the old raiseHand icon
enabled: false
# If true, positions the icon next to the screenshare button, if false positions it where BBB had raisedHand button up to BBB 2.6 (right-hand bottom corner in LRT)
centered: true
2023-07-18 19:54:36 +08:00
reactionsButton:
# Enables the new raiseHand icon inside of the reaction menu (introduced in BBB 2.7)
2023-07-18 19:54:36 +08:00
# If both reactionsButton and raiseHandActionButton are enabled, reactionsButton takes precedence.
2023-05-31 23:24:45 +08:00
enabled: true
# If enabled, before joining microphone the client will perform a trickle
# ICE against Kurento and use the information about successfull
# candidate-pairs to filter out local candidates in SIP.js's SDP.
# Try enabling this setting in scenarios where the listenonly mode works,
# but microphone doesn't (for example, when using VPN).
# For compatibility check "Browser compatbility" section in:
# https://developer.mozilla.org/en-US/docs/Web/API/RTCDtlsTransport/iceTransport
# This is an EXPERIMENTAL setting and the default value is false
# experimentalUseKmsTrickleIceForMicrophone: false
#
# Shows stats about download and upload rates, audio jitter, lost packets
# and turn information
enableNetworkStats: true
# Enable the button to allow users to copy network stats to clipboard
enableCopyNetworkStatsButton: true
# where should client settings be stored? if you run a single BBB server or
# a cluster with a reverse proxy in front of it, you may set this to 'local'
2023-08-05 03:47:23 +08:00
# See See https://docs.bigbluebutton.org/administration/cluster-proxy
# allowed values:
# 'session' -> settings are stored in browser sessionStorage
# 'local' -> settings are stored in browser localStorage
userSettingsStorage: session
defaultSettings:
application:
selectedLayout: 'custom'
2019-01-31 01:43:11 +08:00
animations: true
chatAudioAlerts: false
chatPushAlerts: false
2019-11-14 06:36:23 +08:00
userJoinAudioAlerts: false
userJoinPushAlerts: false
2021-08-21 00:14:12 +08:00
userLeaveAudioAlerts: false
userLeavePushAlerts: false
raiseHandAudioAlerts: true
raiseHandPushAlerts: true
guestWaitingAudioAlerts: true
guestWaitingPushAlerts: true
2023-08-09 03:49:15 +08:00
wakeLock: true
paginationEnabled: true
whiteboardToolbarAutoHide: false
2022-04-09 03:05:29 +08:00
darkTheme: false
# fallbackLocale: if the locale the client is loaded in does not have a
# translation a string, it will use the translation from the locale
# specified in fallbackLocale. Note that fallbackLocale should be a
# 100% translated locale for best user experience
fallbackLocale: en
# overrideLocale (default is null): if set (for example to 'de') will
# force all clients to display the German translations of the strings.
# Users can individually set their preferred locale through Settings,
# but on first page load overrideLocale will trump the browser's
# preferred locale
2019-07-15 10:59:55 +08:00
overrideLocale: null
#Audio constraints for microphone. Use this to control browser's
#filters, such as AGC (Auto Gain Control) , Echo Cancellation,
#Noise Supression, etc.
#For more deails, see:
# https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints
#Currently, google chrome sets {ideal: true} for autoGainControl,
#echoCancellation and noiseSuppression, if not set.
#The accepted value for each constraint is an object of type
#https://developer.mozilla.org/en-US/docs/Web/API/ConstrainBoolean
#These values are used as initial constraints for every new participant,
#and can be changed by user in: Settings > Application > Microphone
#Audio Filters.
# microphoneConstraints:
# autoGainControl:
# ideal: true
# echoCancellation:
# ideal: true
# noiseSuppression:
# ideal: true
audio:
inputDeviceId: undefined
outputDeviceId: undefined
dataSaving:
viewParticipantsWebcams: true
viewScreenshare: true
shortcuts:
openOptions:
accesskey: O
descId: openOptions
toggleUserList:
accesskey: U
descId: toggleUserList
toggleMute:
accesskey: M
descId: toggleMute
joinAudio:
accesskey: J
descId: joinAudio
leaveAudio:
accesskey: L
descId: leaveAudio
togglePublicChat:
accesskey: P
descId: togglePublicChat
hidePrivateChat:
accesskey: H
descId: hidePrivateChat
closePrivateChat:
accesskey: G
descId: closePrivateChat
2021-03-22 07:47:15 +08:00
raiseHand:
accesskey: R
descId: raiseHand
openActions:
accesskey: A
descId: openActions
2020-09-04 07:35:57 +08:00
openDebugWindow:
accesskey: K
descId: openDebugWindow
branding:
displayBrandingArea: true
connectionTimeout: 60000
showHelpButton: true
2019-03-12 08:34:34 +08:00
effectiveConnection:
2019-04-19 05:15:48 +08:00
- critical
- danger
- warning
# Whether the fallback mechanism should be used
# when the locale string is empty. If false, the empty
# string will be returned.
fallbackOnEmptyLocaleString: true
disableWebsocketFallback: true
# plugins:
# - name: SamplePresentationToolbarPlugin
# url: https://<your-Host>/plugins/SamplePresentationToolbarPlugin.js
externalVideoPlayer:
enabled: true
kurento:
wsUrl: HOST
cameraWsOptions:
# Valid for video-provider. Time (ms) before its WS connection times out
# and tries to reconnect.
wsConnectionTimeout: 4000
# maxRetries: max reconnection retries
maxRetries: 7
# debug: console trace logging for video-provider's ws
debug: false
heartbeat:
interval: 15000
delay: 3000
reconnectOnFailure: true
# Time in milis to wait for the browser to return a gUM call (used in video-preview)
gUMTimeout: 20000
# Controls whether ICE candidates should be signaled to bbb-webrtc-sfu.
# Enable this if you want to use Kurento as the media server.
signalCandidates: false
# traceLogs: <Boolean> - enable trace logs in SFU peers
traceLogs: false
cameraTimeouts:
# Base camera timeout: used as the camera *sharing* timeout and
# as the minimum camera subscribe reconnection timeout
baseTimeout: 30000
# Max timeout: used as the max camera subscribe reconnection timeout. Each
# subscribe reattempt increases the reconnection timer up to this
maxTimeout: 60000
screenshare:
# Whether volume control should be allowed if screen sharing has audio
enableVolumeControl: true
# Experimental. True is the canonical behavior. Flip to false to reverse
# the negotiation flow for subscribers.
subscriberOffering: false
# Experimental. Server wide configuration to choose which bbb-webrtc-sfu
# media server adapter should be used for screen sharing.
# Default is undefined, which means the default setting in bbb-webrtc-sfu
# prevails (screenshareMediaServer).
#mediaServer: Kurento
bitrate: 1500
mediaTimeouts:
maxConnectionAttempts: 2
# Base screen media timeout (send|recv) - first connections
baseTimeout: 20000
# Base screen media timeout (send|recv) - re-connections
baseReconnectionTimeout: 8000
# Max timeout: used as the max camera subscribe connection timeout. Each
# subscribe reattempt increases the reconnection timer up to this
maxTimeout: 25000
timeoutIncreaseFactor: 1.5
constraints:
video:
frameRate:
ideal: 5
max: 10
width:
max: 2560
height:
max: 1600
audio: true
# cameraProfiles is an array of:
# - id: profile identifier
# name: human-readable profile name
# bitrate
# hidden: whether this profile will be hidden in the video preview dropdown
# constraints: a video media constraints dictionary (without the video key)
2019-04-09 06:07:26 +08:00
cameraProfiles:
# id: unique identifier of the profile
# name: name of the profile visible to users
# default: if this is the default profile which is pre-selected
# bitrate: the average bitrate for used for a webcam stream
# constraints:
# # Optional constraints put on the requested video a browser MAY honor
# # For a detailed list on possible values see:
# # https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints
# # Examples:
# width: requested width of the camera stream
# frameRate: requested framerate
- id: low-u30
name: low-u30
bitrate: 30
hidden: true
- id: low-u25
name: low-u25
bitrate: 40
hidden: true
- id: low-u20
name: low-u20
bitrate: 50
hidden: true
- id: low-u15
name: low-u15
bitrate: 70
hidden: true
- id: low-u12
name: low-u12
bitrate: 90
hidden: true
- id: low-u8
name: low-u8
bitrate: 100
hidden: true
2019-04-09 06:07:26 +08:00
- id: low
name: Low
2019-04-09 06:07:26 +08:00
default: false
2019-06-14 02:25:16 +08:00
bitrate: 100
2019-04-09 06:07:26 +08:00
- id: medium
name: Medium
2019-04-09 06:07:26 +08:00
default: true
2019-06-14 03:08:44 +08:00
bitrate: 200
2019-04-09 06:07:26 +08:00
- id: high
name: High
2019-04-09 06:07:26 +08:00
default: false
2019-06-14 02:25:16 +08:00
bitrate: 500
constraints:
width: 1280
height: 720
frameRate: 15
2019-04-09 06:07:26 +08:00
- id: hd
name: High definition
default: false
2019-06-14 02:25:16 +08:00
bitrate: 800
constraints:
width: 1280
height: 720
frameRate: 30
- id: fhd
name: Camera as content
hidden: true
default: false
bitrate: 1500
constraints:
width: 1920
height: 1080
enableScreensharing: true
enableVideo: true
enableVideoMenu: true
enableVideoPin: true
# Experimental. Server wide configuration to choose which bbb-webrtc-sfu
# media server adapter should be used for listen only.
# Default is undefined, which means the default setting in bbb-webrtc-sfu
# prevails (listenOnlyMediaServer).
#listenOnlyMediaServer: mediasoup
# Experimental. Server wide configuration to choose which bbb-webrtc-sfu
# media server adapter should be used for webcams.
# Default is undefined, which means the default setting in bbb-webrtc-sfu
# prevails (videoMediaServer).
#videoMediaServer: Kurento
autoShareWebcam: false
2019-11-12 02:21:48 +08:00
skipVideoPreview: false
skipVideoPreviewOnFirstJoin: false
# cameraSortingModes.paginationSorting: sorting mode to be applied when pagination is active
# cameraSortingModes.defaultSorting: sorting mode when pagination is not active (full mesh)
# Current implemented modes are:
# 'LOCAL_ALPHABETICAL' | 'VOICE_ACTIVITY_LOCAL' | 'LOCAL_VOICE_ACTIVITY' | 'LOCAL_PRESENTER_ALPHABETICAL'
# The algorithm names are self-explanatory.
cameraSortingModes:
defaultSorting: LOCAL_ALPHABETICAL
paginationSorting: VOICE_ACTIVITY_LOCAL
# Entry `thresholds` is an array of:
# - threshold: minimum number of cameras being shared for profile to applied
# profile: a camera profile id from the cameraProfiles configuration array
# that will be applied to all cameras when threshold is hit
cameraQualityThresholds:
enabled: true
# applyConstraints: whether profile constraints should be applied on profile changes
applyConstraints: false
# privilegedStreams: whether cameras should revert to their original profile on
# certain actions (eg floor changes, pin)
privilegedStreams: true
debounceTime: 2500
thresholds:
- threshold: 8
profile: low-u8
- threshold: 12
profile: low-u12
- threshold: 15
profile: low-u15
- threshold: 20
profile: low-u20
- threshold: 25
profile: low-u25
- threshold: 30
profile: low-u30
pagination:
# WARNING: the pagination.enabled setting has moved to
# public.app.defaultSettings.application.paginationEnabled
# paginationToggleEnabled: show a pagination toggle in settings for the
# user to enable/disable it
paginationToggleEnabled: true
# how long (in ms) the negotiation will be debounced after a page change.
pageChangeDebounceTime: 2500
# video page sizes for DESKTOP endpoints. It stands for the number of SUBSCRIBER streams.
# PUBLISHERS aren't accounted for .
# A page size of 0 (zero) means that the page size is unlimited (disabled).
desktopPageSizes:
moderator: 0
2021-03-13 04:50:01 +08:00
viewer: 5
# video page sizes for MOBILE endpoints
mobilePageSizes:
2021-03-13 04:50:01 +08:00
moderator: 2
viewer: 2
2023-08-09 00:05:54 +08:00
# grid size for DESKTOP endpoints
2023-08-14 20:46:05 +08:00
desktopGridSizes:
2023-07-26 20:55:39 +08:00
moderator: 48
viewer: 48
2023-08-09 00:05:54 +08:00
# grid size for MOBILE endpoints
2023-08-14 20:46:05 +08:00
mobileGridSizes:
2023-07-26 20:55:39 +08:00
moderator: 14
viewer: 14
paginationThresholds:
enabled: false
thresholds:
- users: 30
desktopPageSizes:
moderator: 25
viewer: 25
- users: 40
desktopPageSizes:
moderator: 20
viewer: 20
- users: 50
desktopPageSizes:
moderator: 16
viewer: 16
- users: 60
desktopPageSizes:
moderator: 14
viewer: 12
- users: 70
desktopPageSizes:
moderator: 12
viewer: 10
- users: 80
desktopPageSizes:
moderator: 10
viewer: 8
- users: 90
desktopPageSizes:
moderator: 8
viewer: 6
- users: 100
desktopPageSizes:
moderator: 6
viewer: 4
2021-01-30 01:27:13 +08:00
syncUsersWithConnectionManager:
enabled: false
syncInterval: 60000
poll:
2019-07-02 22:54:37 +08:00
enabled: true
allowCustomResponseInput: true
maxCustom: 5
maxTypedAnswerLength: 45
chatMessage: true
captions:
2019-06-26 04:26:23 +08:00
enabled: true
id: captions
dictation: false
background: '#000000'
font:
color: '#ffffff'
family: Calibri
size: 24px
lines: 2
2019-05-21 00:43:31 +08:00
time: 5000
2023-05-11 04:03:20 +08:00
timer:
2023-06-09 08:20:37 +08:00
enabled: true
2020-04-27 04:18:43 +08:00
alarm: true
music:
enabled: false
volume: 0.4
2023-01-19 04:53:29 +08:00
track1: "RelaxingMusic"
track2: "CalmMusic"
track3: "aristocratDrums"
interval:
clock: 100
offset: 60000
2020-04-26 03:03:35 +08:00
time: 5
tabIndicator: false
chat:
2021-03-05 01:10:08 +08:00
enabled: true
2021-03-10 04:52:20 +08:00
itemsPerPage: 100
timeBetweenFetchs: 1000
enableSaveAndCopyPublicChat: true
2020-12-01 01:09:45 +08:00
bufferChatInsertsMs: 0
startClosed: false
min_message_length: 1
max_message_length: 5000
grouping_messages_window: 10000
type_system: SYSTEM_MESSAGE
type_public: PUBLIC_ACCESS
type_private: PRIVATE_ACCESS
system_userid: SYSTEM_MESSAGE
system_username: SYSTEM_MESSAGE
2023-08-05 03:47:23 +08:00
public_id: public
public_group_id: MAIN-PUBLIC-GROUP-CHAT
public_userid: public_chat_userid
public_username: public_chat_username
storage_key: UNREAD_CHATS
system_messages_keys:
chat_clear: PUBLIC_CHAT_CLEAR
2021-02-19 21:57:11 +08:00
chat_poll_result: PUBLIC_CHAT_POLL_RESULT
chat_exported_presentation: PUBLIC_CHAT_EXPORTED_PRESENTATION
chat_status_message: PUBLIC_CHAT_STATUS
2019-08-23 23:17:32 +08:00
typingIndicator:
enabled: true
showNames: true
moderatorChatEmphasized: true
2022-05-10 20:47:51 +08:00
autoConvertEmoji: true
emojiPicker:
enable: false
frequentEmojiSortOnClick: false
# e.g.: disableEmojis: ['1F595','1F922']
disableEmojis: []
userReaction:
enabled: true
expire: 60
userStatus:
enabled: false
notes:
enabled: true
id: notes
2022-10-28 04:04:12 +08:00
pinnable: true
layout:
hidePresentationOnJoin: false
showParticipantsOnLogin: true
showPushLayoutButton: true
showPushLayoutToggle: true
pads:
url: ETHERPAD_HOST
cookie:
path: /
sameSite: None
secure: true
media:
audio:
#
#
# Default bridge to be used by full audio mechanism.
# This is the bridge's name as contained in 'bridges' array
defaultFullAudioBridge: fullaudio
#
#
# Server wide configuration to choose which bbb-webrtc-sfu
# media server adapter should be used for fullaudio.
# Default is undefined, which means the default setting in bbb-webrtc-sfu
# prevails (fullAudioMediaServer).
#fullAudioMediaServer: mediasoup
#
#
# Default bridge to be used by listen only mechanism.
defaultListenOnlyBridge: fullaudio
#
#
# Bridge array, here's where we list our bridges.
# To add new bridges, simply add the corresponding .js file in
# /imports/api/audio/client/bridge/ and add it to this list.
#
# Each bridge in this list, must have a name and path attribute.
# The name is the desired name/string you can set for your bridge, while
# the path specifies the file path, relative to
# '/imports/api/audio/client' dir.
#
bridges:
# name: The name of the bridge
- name: sipjs
# path: the bridge file path, relative to /imports/api/audio/client
path: 'bridge/sip'
- name: fullaudio
path: 'bridge/sfu-audio-bridge'
2023-08-05 03:47:23 +08:00
# Forces a retry with iceTransportPolicy = 'relay' if the first attempt
# fails with a few selected errors codes (eg 1007, 1010)
retryThroughRelay: false
stunTurnServersFetchAddress: '/bigbluebutton/api/stuns'
cacheStunTurnServers: true
fallbackStunServer: ''
# Forces relay usage on all browsers, environments and media modules.
# If true, supersedes public.kurento.forceRelayOnFirefox
forceRelay: false
# Firefox has a buggy ICE implementation. With mediasoup this leads to
# connection problems unless all traffic is relayed through a turn server.
forceRelayOnFirefox: true
mediaTag: '#remote-media'
callTransferTimeout: 5000
callHangupTimeout: 2000
callHangupMaximumRetries: 10
echoTestNumber: 'echo'
2023-08-05 03:47:23 +08:00
listenOnlyCallTimeout: 15000
feat(audio): add experimental transparent listen only mode This is an initial, experimental implementation of the feature proposed in https://github.com/bigbluebutton/bigbluebutton/issues/14021. The intention is to phase out the explicit listen only mode with two overarching goals: - Reduce UX friction and increase familiarity: the existence of a separate listen only mode is a source of confusion for the majority of users Reduce average server-side CPU usage while also making it possible for having full audio-only meetings. The proof-of-concept works based on the assumption that a "many concurrent active talkers" scenario is both rare and not useful. With that in mind, this including two server-side triggers: - On microphone inactivity (currently mute action that is sustained for 4 seconds, configurable): FreeSWITCH channels are held (which translates to much lower CPU usage, virtually 0%). Receiving channels are switched, server side, to a listening mode (SFU, mediasoup). * This required an extension to mediasoup two allow re-assigning producers to already established consumers. No re-negotiation is done. - On microphone activity (currently unmute action, immediate): FreeSWITCH channels are unheld, listening mode is deactivated and the mute state is updated accordingly (in this order). This is *off by default*. It needs to be enabled in two places: - `/etc/bigbluebutton/bbb-webrtc-sfu/production.yml` -> `transparentListenOnly: true` - End users: * Server wide: `/etc/bigbluebutton/bbb-html5.yml` -> `public.media.transparentListenOnly: true` * Per user: `userdata-bbb_transparent_listen_only=true`
2023-08-08 02:28:17 +08:00
# Experimental: enables a new audio mechanism that has a server-side,
# transparent listen only mode. See issue #14021.
# bbb_userdata-transparent-listen-only supersedes this setting
transparentListenOnly: false
# Dev flag. Controls the WebRTC SDP negotiation role for SFU full audio.
fullAudioOffering: true
# Dev flag. Controls the WebRTC negotiation role for listen only.
listenOnlyOffering: false
#Timeout (ms) for gathering ICE candidates. When this timeout expires
#the SDP is sent to the server with the candidates the browser gathered
#so far. Increasing this value might help avoiding 1004 error when
#user activates microphone.
iceGatheringTimeout: 5000
# Timeout (ms) for connecting to the audio's signaling websocket.
audioConnectionTimeout: 5000
# Delay (ms) between each reconnection attempt of the audio's signaling
# websocket.
audioReconnectionDelay: 5000
# Number of reconnection attempts of the signaling websocket, before
# showing to the user there's an audio error.
audioReconnectionAttempts: 3
sipjsHackViaWs: false
# sipjsAllowMdns: whether mDNS candidates should be allowed in local SDPs.
# Default is false since FreeSWITCH doesn't resolve mDNS by default.
sipjsAllowMdns: false
Allow BBB to run behind a proxy the avoid gUM permission queries per node The idea is to run a loadbalancer node which maps each BBB node to a path. That way each user gets only one gUM permission query for a cluster. The loadbalancer node only serves the html5 client, each BBB node will serve its own API and handle the websockets for freeswitch and bbb-webrtc-sfu. Configuring a cluster setup =========================== * let bbb-lb.example.com be the loadbalancer node * let bbb-01.eaxmple.com be a BBB node Loadbalancer ------------ On the loadbalancer node add an nginx configuration similar to this one for each BBB node: ``` location /bbb-01/html5client/ { proxy_pass https://bbb-01.example.com/bbb-01/html5client/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; } ``` BBB Node -------- On the BBB node add the following options to `/etc/bigbluebutton/bbb-web.properties`: ``` defaultHTML5ClientUrl=https://bbb-lb.example.com/bbb-01/html5client/join presentationBaseURL=https://bbb-01.example.com/bigbluebutton/presentation accessControlAllowOrigin=https://bbb-lb.example.com ``` Add the following options to `/etc/bigbluebutton/bbb-html5.yml`: ``` public: app: basename: '/bbb-01/html5client' bbbWebBase: 'https://bbb-01.eaxmple.com/bigbluebutton' learningDashboardBase: 'https://bbb-01.eaxmple.com/learning-dashboard' media: stunTurnServersFetchAddress: 'https://bbb-01.eaxmple.com/bigbluebutton/api/stuns' sip_ws_host: 'bbb-01.eaxmple.com' presentation: uploadEndpoint: 'https://bbb-01.eaxmple.com/bigbluebutton/presentation/upload' ``` Create the following unit file overrides: * `/etc/systemd/system/bbb-html5-frontend@.service.d/cluster.conf` * `/etc/systemd/system/bbb-html5-backend@.service.d/cluster.conf` with the following content: ``` [Service] Environment=ROOT_URL=https://127.0.0.1/bbb-01/html5client ``` Change the nginx `$bbb_loadbalancer_node` variable to the name of the load balancer node in `/etc/bigbluebutton/nginx/loadbalancer.nginx` to allow CORS requests: ``` set $bbb_loadbalancer_node https://bbb-lb.example.com ``` Prepend the mount point of bbb-html5 in all location sections except from the `location @html5client` section in `/etc/bigbluebutton/nginx/bbb-html5.nginx` ``` location @html5client { ... } location /bbb-01/html5client/locales { ... } ```
2021-11-19 05:52:20 +08:00
# the fqdn of this host.
# If you run a traditional setup of multiple nodes behind scalelite and the users see the hostnames of the
# individual nodes, you can leave this at the default setting
sip_ws_host: ''
# Mute/umute toggle throttle time
toggleMuteThrottleTime: 300
#Websocket keepAlive interval (seconds). You may set this to prevent
#websocket disconnection in some environments. When set, BBB will send
#'\r\n\r\n' string through SIP.js's websocket. If not set, default value
#is 0.
websocketKeepAliveInterval: 30
#Debounce time (seconds) for sending SIP.js's websocket keep alive message.
#If not set, default value is 10.
websocketKeepAliveDebounce: 10
#Trace sip/audio messages in browser. If not set, default value is false.
traceSip: false
# SDP semantics: plan-b|unified-plan
sdpSemantics: 'unified-plan'
# localEchoTest:
# enabled: Boolean => enables an experimental, simplified echo test mode
# initialHearingState: Boolean => whether users should hear themselves firsthand
# useRtcLoopbackInChromium: Boolean => whether a local RTC loopback should
# be used in Chromium browsers. Works around the fact that Chromium has no
# echo cancellation in non-rtc audio streams
localEchoTest:
enabled: true
initialHearingState: true
useRtcLoopbackInChromium: true
# delay: delay (seconds) to be added to the audio feedback return
delay:
enabled: true
delayTime: 0.5
maxDelayTime: 2
# showVolumeMeter: shows an energy bar for microphones in the AudioSettings view
showVolumeMeter: true
# networkPriorities: DSCP markings for each media type. Chromium only, applies
# to sender flows. See https://datatracker.ietf.org/doc/html/rfc8837#section-5
# for further info.
#networkPriorities:
# audio: high
# webcam: medium
# screenshare: medium
2020-01-28 21:07:21 +08:00
stats:
enabled: true
interval: 10000
timeout: 30000
log: true
notification:
warning: false
error: true
2020-01-28 21:07:21 +08:00
jitter:
- 10
- 20
- 30
loss:
- 0.05
- 0.1
- 0.2
rtt:
- 500
- 1000
- 2000
2020-01-28 21:07:21 +08:00
level:
- warning
- danger
- critical
2020-03-03 00:37:23 +08:00
help: STATS_HELP_URL
presentation:
2023-08-05 03:47:23 +08:00
allowDownloadOriginal: true
allowDownloadWithAnnotations: true
2023-06-07 20:35:56 +08:00
allowSnapshotOfCurrentSlide: true
panZoomThrottle: 32
2023-04-13 21:56:54 +08:00
restoreOnUpdate: true
uploadEndpoint: '/bigbluebutton/presentation/upload'
fileUploadConstraintsHint: false
# mirroredFromBBBCore are values controlled in bbb-web properties file. We include a copy here for notification purposes
mirroredFromBBBCore:
uploadSizeMax: 30000000
uploadPagesMax: 200
uploadValidMimeTypes:
- extension: .pdf
mime: application/pdf
- extension: .doc
mime: application/msword
- extension: .docx
mime: application/vnd.openxmlformats-officedocument.wordprocessingml.document
- extension: .xls
mime: application/vnd.ms-excel
- extension: .xlsx
mime: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
- extension: .ppt
mime: application/vnd.ms-powerpoint
- extension: .pptx
mime: application/vnd.openxmlformats-officedocument.presentationml.presentation
- extension: .txt
mime: text/plain
- extension: .rtf
mime: application/rtf
- extension: .odt
mime: application/vnd.oasis.opendocument.text
- extension: .ods
mime: application/vnd.oasis.opendocument.spreadsheet
- extension: .odp
mime: application/vnd.oasis.opendocument.presentation
- extension: .odg
mime: application/vnd.oasis.opendocument.graphics
- extension: .odc
mime: application/vnd.oasis.opendocument.chart
- extension: .odi
mime: application/vnd.oasis.opendocument.image
- extension: .jpg
mime: image/jpeg
- extension: .jpeg
mime: image/jpeg
- extension: .png
mime: image/png
- extension: .webp
mime: image/webp
2021-03-20 02:52:03 +08:00
selectRandomUser:
enabled: true
countdown: false
user:
role_moderator: MODERATOR
role_viewer: VIEWER
label:
moderator: false
mobile: true
guest: true
sharingWebcam: true
whiteboard:
annotationsQueueProcessInterval: 60
cursorInterval: 150
2023-06-08 07:25:24 +08:00
pointerDiameter: 5
maxStickyNoteLength: 1000
2023-02-03 03:59:38 +08:00
# limit number of annotations per slide
maxNumberOfAnnotations: 300
annotations:
status:
start: DRAW_START
update: DRAW_UPDATE
end: DRAW_END
styles:
text:
# Initial font family.
# family: mono|sans|script|serif
2023-01-18 19:25:32 +08:00
family: script
toolbar:
2018-10-19 01:03:11 +08:00
multiUserPenOnly: false
colors:
- label: black
value: '#000000'
- label: white
value: '#ffffff'
- label: red
value: '#ff0000'
- label: orange
value: '#ff8800'
- label: eletricLime
value: '#ccff00'
- label: Lime
value: '#00ff00'
- label: Cyan
value: '#00ffff'
- label: dodgerBlue
value: '#0088ff'
- label: blue
value: '#0000ff'
- label: violet
value: '#8800ff'
- label: magenta
value: '#ff00ff'
- label: silver
value: '#c0c0c0'
thickness:
- value: 14
- value: 12
- value: 10
- value: 8
- value: 6
- value: 4
- value: 2
- value: 1
font_sizes:
- value: 36
- value: 32
- value: 28
- value: 24
- value: 20
- value: 16
tools:
- icon: text_tool
value: text
- icon: line_tool
value: line
- icon: circle_tool
value: ellipse
- icon: triangle_tool
value: triangle
- icon: rectangle_tool
value: rectangle
- icon: pen_tool
value: pencil
- icon: hand
value: hand
presenterTools:
- text
- line
- ellipse
- triangle
- rectangle
- pencil
- hand
multiUserTools:
- text
- line
- ellipse
- triangle
- rectangle
- pencil
clientLog:
server:
enabled: false
level: info
console:
enabled: true
level: debug
external:
enabled: false
level: info
url: https://LOG_HOST/html5Log
method: POST
throttleInterval: 400
flushOnClose: true
logTag: ''
2021-07-20 21:41:14 +08:00
virtualBackgrounds:
enabled: true
enableVirtualBackgroundUpload: true
2021-07-20 21:41:14 +08:00
storedOnBBB: true
showThumbnails: true
imagesPath: /resources/images/virtual-backgrounds/
thumbnailsPath: /resources/images/virtual-backgrounds/thumbnails/
fileNames:
- home.jpg
- coffeeshop.jpg
- board.jpg
private:
analytics:
includeChat: true
app:
2019-05-23 22:51:01 +08:00
host: 127.0.0.1
localesUrl: /locale-list
pencilChunkLength: 100
loadSlidesFromHttpAlways: false
redis:
host: 127.0.0.1
2019-04-10 01:58:56 +08:00
port: '6379'
timeout: 5000
2019-04-10 01:58:56 +08:00
password: null
debug: false
2020-12-08 04:57:33 +08:00
metrics:
2020-12-08 20:37:59 +08:00
queueMetrics: false
metricsDumpIntervalMs: 60000
2020-12-08 22:07:57 +08:00
metricsFolderPath: METRICS_FOLDER
removeMeetingOnEnd: true
channels:
toAkkaApps: to-akka-apps-redis-channel
toThirdParty: to-third-party-redis-channel
subscribeTo:
- to-html5-redis-channel
- from-akka-apps-[^f]*
- from-third-party-redis-channel
async:
- from-akka-apps-wb-redis-channel
ignored:
- CheckAlivePongSysMsg
- DoLatencyTracerMsg
serverLog:
level: info
streamerLog: false
2022-09-16 22:56:56 +08:00
includeServerInfo: true
healthChecker:
enable: true
intervalMs: 30000
minBrowserVersions:
- browser: chrome
version: 72
2019-06-22 01:45:34 +08:00
- browser: chromeMobileIOS
version: 94
- browser: firefox
version: 68
- browser: firefoxMobile
version: 68
- browser: edge
2020-01-29 03:53:15 +08:00
version: 79
- browser: ie
version: Infinity
2019-06-22 01:45:34 +08:00
- browser: safari
version: [12, 1]
- browser: mobileSafari
version: [12, 1]
- browser: opera
version: 50
- browser: electron
2019-05-28 06:06:52 +08:00
version: [0, 36]
- browser: SamsungInternet
version: 10
- browser: YandexBrowser
2021-07-13 20:30:10 +08:00
version: 19
# Direct Prometheus instrumentation.
# EXPERIMENTAL, so disabled by default.
prometheus:
enabled: false
# Metrics endpoint path
path: '/metrics'
# Whether default metrics for Node.js processes should be exported
collectDefaultMetrics: false
# Whether redis metrics should be exported
collectRedisMetrics: false