Jitsi Meet
repository·master·Indexed 10 days ago
https://github.com/jitsi/jitsi-meetAn open-source video conferencing platform providing HD audio/video, content sharing, and E2EE. It can be deployed via Docker/Debian, used as a web service, or consumed via JaaS (Jitsi as a Service). The project includes a React Native SDK, translation tools using i18next, and Redux state persistence via PersistenceRegistry.
What's inside Jitsi Meet
- For developers and organizations that require branded video experiences without the operational overhead of managing infrastructure (monitoring, scaling, and updates), 8x8 Jitsi as a Service (JaaS) is available. It provides an enterprise-ready platform to build and deploy video solutions on a global scale.
How to store data in Prosody modules
masterWhen developing or extending Prosody modules for Jitsi, follow these data storage patterns to ensure stability and prevent memory leaks:
- Storage Location: Store data within the
room._dataobject or directly on the room object. - Data Types: Data must be simple types, such as strings or a table of strings.
- Avoid Complex Objects: Do not attach complex objects like
room,sessions, oroccupantsto the data, as these cannot be serialized. - Lifecycle Safety: Attaching data to the
roomobject ensures that data is automatically wiped when the room is destroyed and makes module reloading safe.
- Storage Location: Store data within the
Serialization limitations in the persistence layer
masterThe persistence layer uses
JSON.stringify()for serialization. Consequently, you cannot persist complex JavaScript objects that are not JSON-compatible.Unsupported types include:
MapSetFunction
Ensure that any state you intend to persist via
PersistenceRegistryconsists only of JSON-serializable data.Configure Visitor and Moderator JWT tokens
masterThe Waiting Queue service distinguishes between Visitors and Moderators based on the claims within their JWT
context.Visitor Token Requirements
To allow a user to connect to the
/visitorwebsocket and wait for the 'ready to join' message, the token must contain:{ "context": { "user": { "role": "visitor" } } }Moderator Token Requirements
To allow a moderator to connect to the
/moderatorwebsocket and receive visitor count updates via the/secured/conference/state/topic.{conference}topic, the token must contain:{ "context": { "user": { "moderator": true } } }Authenticate with the Waiting Queue using STOMP
masterTo connect to the Waiting Queue service, you must provide a JWT token in the
Authorizationheader of the STOMPCONNECTmessage. The token must be a valid JAAS token for the specific conference.When subscribing to topics, ensure the
Authorizationheader is also included in the subscription request.headers = { Authorization: 'Bearer ' + token }; stompClient.connectHeaders = headers; stompClient.onConnect = (frame) => { setConnected(true); console.log('Connected: ' + frame); stompClient.subscribe('/secured/conference/visitor/topic.' + conference, (message) => { showMessage(message.body); }, headers); };Install fastlane
masterTo use fastlane for automation in this project, ensure you have the latest version of the Xcode command line tools installed first. You can then install fastlane using either RubyGems or Homebrew.
xcode-select --install # Using RubyGems [sudo] gem install fastlane -NV # OR using Homebrew brew install fastlaneAccess Jitsi Meet documentation
masterAll official Jitsi documentation has been migrated to The Handbook. For guides, installation instructions, and technical details, visit the centralized documentation site.Switch your deployment to JaaS
masterTo migrate your Jitsi Meet deployment to JaaS (Jitsi as a Service), follow these steps:
- Generate API Keys: Log in to the JaaS Developer console and use the
Add API keybutton, then selectGenerate API key pair. - Secure the Private Key: Download the generated private key immediately. You must transfer this file to your server.
- Identify Key ID: Copy the
key idfrom the JaaS console. - Run Migration Script: Execute the
move-to-jaas.shhelper script on your server, providing the path to your private key file and the key ID.
Note on E2EE: By default, end-to-end encryption (E2EE) is enabled. This feature only works on Chromium-based browsers (e.g., Chrome, Edge). If a participant joins via a mobile device or a non-Chromium browser, E2EE will be disabled for that session.
sudo /usr/share/jitsi-meet/scripts/move-to-jaas.sh /my/path/test-key.pk <key_id>- Generate API Keys: Log in to the JaaS Developer console and use the
Using Jitsi Meet via Web or Mobile
masterJitsi Meet is a browser-based video conferencing platform. You can use it immediately without installation by visiting meet.jit.si. To start a meeting, you may need a Google, Facebook, or GitHub account.
For mobile users, Jitsi Meet is available via mobile web browsers or through dedicated native applications:
- Android: Available on Google Play and F-Droid.
- iOS: Available on the App Store.
Early access to new features can be obtained through the open beta programs for Android and iOS (via TestFlight).
Adding new translatable text in development
masterWhen adding new functionality that requires translation, follow these steps:
- Define the source: Add the new key and its English value to the
main.jsonfile. This serves as the base for all other translations. - Use the key: Use the newly created key to retrieve the translated text for the user's current language in the UI.
HTML Integration
You can add translatable text to HTML elements using the
data-i18nattribute. Elements with this attribute will be automatically translated when the language is changed.<span data-i18n="dialog.OK">OK</span>JavaScript Integration
If you need to generate translatable HTML via JavaScript, use
APP.translation.generateTranslationHTML(key, options). Theoptionsparameter will be rendered into adata-i18n-optionsattribute on the resulting element.APP.translation.generateTranslationHTML("dialog.OK") // returns <span data-i18n="dialog.OK">OK</span>To retrieve the raw translated string for a key without HTML tags, use
APP.translation.translateString(key).APP.translation.translateString("dialog.OK") // returns the value for the key of the current language file, e.g., "OK"Dynamic Content
If you dynamically inject HTML elements into the DOM, they will not be translated automatically upon insertion. You must manually call
APP.translation.translateElement(jquery_selector)to trigger the translation for those new elements.- Define the source: Add the new key and its English value to the
How to translate Jitsi Meet
masterJitsi Meet uses the
i18nextlibrary for translations, with each language stored in a separate JSON file. To translate Jitsi Meet, you must manually edit these language files.To simplify the process, you can use the
update-translation.jsscript to identify missing keys. Running this script against a specific language file will update it with all missing keys set to empty strings, allowing you to simply fill in the translations.cd lang node update-translation.js main-es.jsonConfigure iOS for Jitsi Meet SDK
masterTo support camera, microphone, and background audio, perform the following steps on iOS:
- Info.plist: Add
Privacy - Camera Usage DescriptionandPrivacy - Microphone Usage Description. - Signing & Capabilities: Enable the following Background modes:
- Audio
- Voice over IP
- Background fetch
- Install Pods: Run
pod installfrom theiosdirectory.
cd ios && pod install && cd ..- Info.plist: Add