Jitimeet

Jitsi is 100% free and open source software. In this video we explore the Jitsi interface and experience.Learn more about Jitsi here (or start your own video. Jitsi Meet Secure and high quality meetings. Your recent list is currently empty. Chat with your team and you will find all your recent meetings here. Betrieben vom KMZ Rottweil Impressum/Datenschutz Nutzungsordnung. Jitsi Meet is a fully encrypted, 100% open source video conferencing solution that you can use all day, every day, for free — with no account needed. What else can you do with Jitsi Meet? Share your desktop, presentations, and more Invite users to a conference via a simple, custom URL.

Support us using our patreon account. https://www.patreon.com/Gunschu

Jitsi Meet Plugin for Flutter. Supports Android, iOS, and Web platforms.

'Jitsi Meet is an open-source (Apache) WebRTC JavaScript application that uses Jitsi Videobridge to provide high quality, secure and scalable video conferences.'

Find more information about Jitsi Meet here

Table of Contents

  • Configuration
    • IOS
    • Android
  • Join A Meeting
  • Listening to Meeting Events

Configuration

IOS

  • Note: Example compilable with XCode 12.2 & Flutter 1.22.4.

Podfile

Ensure in your Podfile you have an entry like below declaring platform of 11.0 or above and disable BITCODE.

Info.plist

Add NSCameraUsageDescription and NSMicrophoneUsageDescription to yourInfo.plist.

Android

Gradle

Set dependencies of build tools gradle to minimum 3.6.3:

Set distribution gradle wrapper to minimum 5.6.4.

AndroidManifest.xml

Jitsi Meet's SDK AndroidManifest.xml will conflict with your project, namely the application:label field. To counter that, go into android/app/src/main/AndroidManifest.xml and add the tools libraryand tools:replace='android:label' to the application tag.

Minimum SDK Version 23

Update your minimum sdk version to 23 in android/app/build.gradle

Proguard

Jitsi's SDK enables proguard, but without a proguard-rules.pro file, your release apk build will be missing the Flutter Wrapper as well as react-native code. In your Flutter project's android/app/build.gradle file, add proguard support

Then add a file in the same directory called proguard-rules.pro. See the example app's proguard-rules.pro file to know what to paste in.

Note
If you do not create the proguard-rules.pro file, then your app will crash when you try to join a meeting or the meeting screen tries to openbut closes immediately. You will see one of the below errors in logcat.

WEB

To implement you need to include Jitsi Js library in the index.html of web section

Example:

NoteSee usage example in jitsi_meet plugin

Join A Meeting

JitsiMeetingOptions

FieldRequiredDefaultDescription
roomYesN/AUnique room name that will be appended to serverURL. Valid characters: alphanumeric, dashes, and underscores.
subjectNo$roomMeeting name displayed at the top of the meeting. If null, defaults to room name where dashes and underscores are replaced with spaces and first characters are capitalized.
userDisplayNameNo'Fellow Jitster'User's display name.
userEmailNononeUser's email address.
audioOnlyNofalseStart meeting without video. Can be turned on in meeting.
audioMutedNofalseStart meeting with audio muted. Can be turned on in meeting.
videoMutedNofalseStart meeting with video muted. Can be turned on in meeting.
serverURLNomeet.jitsi.siSpecify your own hosted server. Must be a valid absolute URL of the format <scheme>://<host>[/path], i.e. https://someHost.com. Defaults to Jitsi Meet's servers.
userAvatarURLN/AnoneUser's avatar URL.
tokenN/AnoneJWT token used for authentication.
featureFlagNosee belowObject of FeatureFlag class used to enable/disable features and set video resolution of Jitsi Meet SDK.

FeatureFlag

Feature flag allows you to limit video resolution and enable/disable few features of Jitsi Meet SDK mentioned in the list below.
If you don't provide any flag to JitsiMeetingOptions, default values will be used.

We are using the official list of flags, taken from the Jitsi Meet repository

FlagDefault (Android)Default (iOS)Description
addPeopleEnabledtruetrueEnable the blue button 'Add people', show up when you are alone in a call. Required for flag inviteEnabled to work.
calendarEnabledtrueautoEnable calendar integration.
callIntegrationEnabledtruetrueEnable call integration (CallKit on iOS, ConnectionService on Android). SEE REMARK BELOW
closeCaptionsEnabledtruetrueEnable close captions (subtitles) option in menu.
conferenceTimerEnabledtruetrueEnable conference timer.
chatEnabledtruetrueEnable chat (button and feature).
inviteEnabledtruetrueEnable invite option in menu.
iOSRecordingEnabledN/AfalseEnable recording in iOS.
kickOutEnabledtruetrueEnable kick-out option in video thumb of participants.
liveStreamingEnabledautoautoEnable live-streaming option in menu.
meetingNameEnabledtruetrueDisplay meeting name.
meetingPasswordEnabledtruetrueDisplay meeting password option in menu (if a meeting has a password set, the dialog will still show up).
pipEnabledautoautoEnable Picture-in-Picture mode.
raiseHandEnabledtruetrueEnable raise hand option in menu.
recordingEnabledautoN/AEnable recording option in menu.
resoulutionN/AN/ASet local and (maximum) remote video resolution. Overrides server configuration. Accepted values are: LD_RESOLUTION for 180p, MD_RESOLUTION for 360p, SD_RESOLUTION for 480p(SD), HD_RESOLUTION for 720p(HD) .
serverURLChangeEnabledtruetrueEnable server URL change.
tileViewEnabledtruetrueEnable tile view option in menu.
toolboxAlwaysVisibletruetrueToolbox (buttons and menus) always visible during call (if not, a single tap displays it).
videoShareButtonEnabledtruetrueEnable video share button.
welcomePageEnabledfalsefalseEnable welcome page. 'The welcome page lists recent meetings and calendar appointments and it's meant to be used by standalone applications.'

REMARK about Call integration Call integration on Android (known as ConnectionService) has been disabled on the official Jitsi Meet app because it creates a lot of issues. You should disable it too to avoid these issues.

JitsiMeetingResponse

Join a jitsi meeting
FieldTypeDescription
isSuccessboolSuccess indicator.
messageStringSuccess message or error as a String.
errordynamicOptional, only exists if isSuccess is false. The error object.

Listening to Meeting Events

Events supported

NameDescription
onConferenceWillJoinMeeting is loading.
onConferenceJoinedUser has joined meeting.
onConferenceTerminatedUser has exited the conference.
onPictureInPictureWillEnterUser entered PIP mode.
onPictureInPictureTerminatedUser exited PIP mode.
onErrorError has occurred with listening to meeting events.

Per Meeting Events

To listen to meeting events per meeting, pass in a JitsiMeetingListenerin joinMeeting. The listener will automatically be removed when an
onConferenceTerminated event is fired.

Global Meeting Events

To listen to global meeting events, simply add a JitsiMeetListener with
JitsiMeet.addListener(myListener). You can remove listeners using
JitsiMeet.removeListener(listener) or JitsiMeet.removeAllListeners().

Closing a Meeting Programmatically

Contributing

Send a pull request with as much information as possible clearlydescribing the issue or feature. Keep changes small and for one issue ata time.

In this section a global overview of the Jitsi infrastructure is provided. If you just started contributing to the project, we highly recommend reading this section thoroughly.

Components

Jitsi comprises a collection of projects: Spring java ide.

  • Jitsi Meet - WebRTC compatible JavaScript application that uses Jitsi Videobridge to provide high quality, scalable video conferences. Build upon React and React Native.
  • Jitsi Videobridge (JVB) - WebRTC compatible server designed to route video streams amongst participants in a conference.
  • Jitsi Conference Focus (jicofo) - server-side focus component used in Jitsi Meet conferences that manages media sessions and acts as load balancer between each of the participants and the videobridge.
  • Jitsi Gateway to SIP (jigasi) - server-side application that allows regular SIP clients to join Jitsi Meet conferences
  • Jitsi Broadcasting Infrastructure (jibri) - set of tools for recording and/or streaming a Jitsi Meet conference that works by launching a Chrome instance rendered in a virtual framebuffer and capturing and encoding the output with ffmpeg.

External Software used by Jitsi:

  • Prosody - XMPP server used for signalling

Architecture Diagram

The individual connections between the previously described components, as well as their external integrations are described in the figure below.

The external connections can be categorized into two main groups. Firstly, the connections between clients that request a video or audio connection performed through remote requests and data streams. The second category of external connections is those to external services that help store recordings, stream recordings, stream videos or help with creating meetings.

Code Map

In this section we will look at the main parts of the codebase and see what they can be used for.

./react/featuresThis folder is where it is best to start writing your code, as it contains most of the app components that are used in the apps on Android and iOS, as well as on the web version. This source folder is split up into all the different features that Jitsi has to offer, such as authentication, chat interaction, keyboard shortcuts, screenshot capture, remote control and virtual background. Each of these features has its own folder in this map, which is then again split up to keep a hierarchy and consistency throughout the code.

Each feature folder consists of a subfolder called components, in this folder all of the React, or React Native for mobile, components are expressed. Usually in this folder there will be a separation between native and web components, however in some cases the same component could be used for both Android, iOS and web browser, in which case there is no separation made.

As stated before, the codebase mostly consists of React and React Native, which is the React version for mobile applications. Most of the features make use of the so-called class component by React [1], however some new features start to use the new way to write functional components by using hooks[2].

The application makes use of React Redux as well, this is used as a general state store to keep track of important parameters that are used throughout the application. More on React Redux can be found here [3].

Most features also contain a file called middleware.js. This file acts as a bridge between the component and the functionality of the rest of the application.

./modules/external-apiIn this folder, the external API can be found. This API can be used in various events like participants joining/leaving the meeting, changes in avatars or chat, as well as errors in using the microphone or camera.

./android and ./iosBoth of these folders contain the basics of the Android and iOS app respectively. However, the code for the application itself and its components can be found in the react/features folder, which will be explained later in this section.

./conference.jsThis file can be found at the root of the project, and contains the foundation of any interaction between a user and a conference room. This consists of setting up a connection to it, joining the meeting room, muting and unmuting, but also functions to gather information about the participants that are in the room.

./langThis folder contains all the different translations that are present in Jitsi Meet. The translations can be found in the code with each of the keys in the translation maps that can be found in main-[language].json files.

./cssThis folder contains all the css that is used in the project. The files (mostly .scss files[4]) are split up into features like the React features that they are used in.

Testing

Jitsi Download Windows 10

The main form of testing code changes is done through torture tests, next to this the code is tested manually.

The torture tests are located in a separate repository, Jitsi Meet Torture. The project contains end to end tests for several key functions such as peer to peer and invites. The testing can be done for iOS, Android and web, which are all the platforms that Jitsi Meet can be used on. The testing is done automatically for pull requests by project members, where it is used in combination with the continuous integration by a Jenkins instance running the tests, testing on the meet.jit.si instance. Other members can run the tests locally. The test results can be viewed on an automatically generated web page.

Jitsi Meet Install

Manual testing is performed while doing code reviews, however there are also testing releases that can be freely downloaded and deployed, or can be used on the beta test server.