No items found.

Goal

To use free service and/or open source software for audio and video conferencing (meeting focused) with option of messaging, screen and media sharing, that can be used both with web browser and mobile app, while remaining flexible with bandwidth option, with ability to be encrypted and optionally visually customizable.

Description of the tool

Jitsi is a collection of free and open-source multiplatform voice (VoIP), video conferencing and instant messaging applications for the web platform, Windows, Linux, macOS, iOS and Android. From expert software like Jitsi Videobridge server designed to run thousands of video streams from a single server, to the small tools and libraries and the most famous Jitsi Meet as JavaScript application that uses Jitsi Videobridge server to provide high quality, scalable video conferences from prominent URL http://meet.jit.si/

Jitsi has proven to be a very efficient and affordable option for video conferencing meetings of up to 20 participants with good bandwidth and as audio conferencing option (with screen or media sharing) for much higher numbers. It is possible to use dial-in options in some countries that could reduce risk of dropping out with weaker/unreliable net connection.

Benefits of self-hosting a jitsi server within an organization/institution are with privacy and cost.
Limitation of small delay is present in all WebRTC software and not unique to jitsi.     

Mee.coop is using another FLOSS solution BigBlueButton (BBB) Video conferencing that is quite stable with more participants and integrates well with Canvas, Moodle, and other Learning Management Solutions (LMS) systems. Unfortunately only used via browser.

Steps of application

This describes configuring a server jitsi.example.com on a Debian-based distribution.

For other distributions you can adapt the steps (especially changing the dependencies package installations (e.g. for nginx) and paths accordingly) so that it matches your host's distribution.

You will also need to generate some passwords for YOURSECRET1, YOURSECRET2 and YOURSECRET3.

There are also some complete example config files available, mentioned in each section.

There are additional configurations to be done for a scalable installation.

Network description

This is how the network looks:

                  +                           +

                   |                           |

                   |                           |

                   v                           |

                  443                          |

               +-------+                       |

               |       |                       |

               | Nginx |                       |

               |       |                       |

               +--+-+--+                       |

                  | |                          |

+------------+    | |    +--------------+      |

|            |    | |    |              |      |

| jitsi-meet +<---+ +--->+ prosody/xmpp |      |

|            |files 5280 |              |      |

+------------+           +--------------+      v

                     5222,5347^    ^5347   4443,10000

                +--------+    |    |    +-------------+

                |        |    |    |    |             |

                | jicofo +----^    ^----+ videobridge |

                |        |              |             |

                +--------+              +-------------+


Install prosody

apt-get install prosody

Configure prosody

Add config file in /etc/prosody/conf.avail/jitsi.example.com.cfg.lua :

  • add your domain virtual host section:

VirtualHost "jitsi.example.com"

    authentication = "anonymous"

    ssl = {

        key = "/var/lib/prosody/jitsi.example.com.key";

        certificate = "/var/lib/prosody/jitsi.example.com.crt";

    }

    modules_enabled = {

        "bosh";

        "pubsub";

    }

    c2s_require_encryption = false


  • add domain with authentication for conference focus user:

VirtualHost "auth.jitsi.example.com"

    ssl = {

        key = "/var/lib/prosody/auth.jitsi.example.com.key";

        certificate = "/var/lib/prosody/auth.jitsi.example.com.crt";

    }

    authentication = "internal_hashed"


  • add focus user to server admins:

admins = { "focus@auth.jitsi.example.com" }


  • and finally configure components:

Component "conference.jitsi.example.com" "muc"

Component "jitsi-videobridge.jitsi.example.com"

    component_secret = "YOURSECRET1"

Component "focus.jitsi.example.com"

    component_secret = "YOURSECRET2"


Add link for the added configuration

ln -s /etc/prosody/conf.avail/jitsi.example.com.cfg.lua /etc/prosody/conf.d/jitsi.example.com.cfg.lua


Generate certs for the domain:

prosodyctl cert generate jitsi.example.com

prosodyctl cert generate auth.jitsi.example.com


Add auth.jitsi.example.com to the trusted certificates on the local machine:

ln -sf /var/lib/prosody/auth.jitsi.example.com.crt /usr/local/share/ca-certificates/auth.jitsi.example.com.crt

update-ca-certificates -f


Note that the -f flag is necessary if there are symlinks left from a previous installation.

If you are using a JDK package not provided by Debian, as the ones from adopjdk, you should also make your JDK aware of the new debian certificate keystore replacing or linking the JDK cacerts. Example, if you use JDK from adoptjdk:

cd /usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/jre

ln -sf /etc/ssl/certs/java/cacerts lib/security/cacerts


Create conference focus user:

prosodyctl register focus auth.jitsi.example.com YOURSECRET3


Restart prosody XMPP server with the new config

prosodyctl restart


Install Nginx

apt-get install nginx


Add a new file jitsi.example.com in /etc/nginx/sites-available (see also the example config file):

server_names_hash_bucket_size 64;


server {

    listen 0.0.0.0:443 ssl http2;

    listen [::]:443 ssl http2;

    # tls configuration that is not covered in this guide

    # we recommend the use of https://certbot.eff.org/

    server_name jitsi.example.com;

    # set the root

    root /srv/jitsi-meet;

    index index.html;

    location ~ ^/([a-zA-Z0-9=\?]+)$ {

        rewrite ^/(.*)$ / break;

    }

    location / {

        ssi on;

    }

    # BOSH, Bidirectional-streams Over Synchronous HTTP

    # https://en.wikipedia.org/wiki/BOSH_(protocol)

    location /http-bind {

        proxy_pass      http://localhost:5280/http-bind;

        proxy_set_header X-Forwarded-For $remote_addr;

        proxy_set_header Host $http_host;

    }

    # external_api.js must be accessible from the root of the

    # installation for the electron version of Jitsi Meet to work

    # https://github.com/jitsi/jitsi-meet-electron

    location /external_api.js {

        alias /srv/jitsi-meet/libs/external_api.min.js;

    }

}


Add link for the added configuration

cd /etc/nginx/sites-enabled

ln -s ../sites-available/jitsi.example.com jitsi.example.com


Install Jitsi Videobridge

Visit https://download.jitsi.org/jitsi-videobridge/linux to determine the current build number, download and unzip it:

wget https://download.jitsi.org/jitsi-videobridge/linux/jitsi-videobridge-linux-{arch-buildnum}.zip

unzip jitsi-videobridge-linux-{arch-buildnum}.zip


Install JRE if missing:

apt-get install openjdk-8-jre


NOTE: When installing on older Debian releases keep in mind that you need JRE >= 1.7.

Create ~/.sip-communicator/sip-communicator.properties in the home folder of the user that will be starting Jitsi Videobridge:

mkdir -p ~/.sip-communicator

cat > ~/.sip-communicator/sip-communicator.properties << EOF

org.jitsi.impl.neomedia.transform.srtp.SRTPCryptoContext.checkReplay=false

# The videobridge uses 443 by default with 4443 as a fallback, but since we're already

# running nginx on 443 in this example doc, we specify 4443 manually to avoid a race condition

org.jitsi.videobridge.TCP_HARVESTER_PORT=4443

EOF


Start the videobridge with:

./jvb.sh --host=localhost --domain=jitsi.example.com --port=5347 --secret=YOURSECRET1 &


Or autostart it by adding the line in /etc/rc.local:

/bin/bash /root/jitsi-videobridge-linux-{arch-buildnum}/jvb.sh --host=localhost --domain=jitsi.example.com --port=5347 --secret=YOURSECRET1 </dev/null >> /var/log/jvb.log 2>&1


Install Jitsi Conference Focus (jicofo)

Install JDK and Maven if missing:

apt-get install openjdk-8-jdk maven


NOTE: When installing on older Debian releases keep in mind that you need JDK >= 1.7.

Clone source from Github repo:

git clone https://github.com/jitsi/jicofo.git


Build the package.

cd jicofo

mvn package -DskipTests -Dassembly.skipAssembly=false


Run jicofo:

=======

unzip target/jicofo-1.1-SNAPSHOT-archive.zip

cd jicofo-1.1-SNAPSHOT-archive'

./jicofo.sh --host=localhost --domain=jitsi.example.com --secret=YOURSECRET2 --user_domain=auth.jitsi.example.com --user_name=focus --user_password=YOURSECRET3

Deploy Jitsi Meet

Checkout and configure Jitsi Meet:

cd /srv

git clone https://github.com/jitsi/jitsi-meet.git

cd jitsi-meet

npm install

make


NOTE: When installing on older distributions keep in mind that you need Node.js >= 12 and npm >= 6.

Edit host names in /srv/jitsi-meet/config.js (see also the example config file):

var config = {

    hosts: {

        domain: 'jitsi.example.com',

        muc: 'conference.jitsi.example.com',

        bridge: 'jitsi-videobridge.jitsi.example.com',

        focus: 'focus.jitsi.example.com'

    },

    useNicks: false,

    bosh: '//jitsi.example.com/http-bind', // FIXME: use xep-0156 for that

    //chromeExtensionId: 'diibjkoicjeejcmhdnailmkgecihlobk', // Id of desktop streamer Chrome extension

    //minChromeExtVersion: '0.1' // Required version of Chrome extension

};


Verify that nginx config is valid and reload nginx:

nginx -t && nginx -s reload


Running behind NAT

Jitsi Videobridge can run behind a NAT, provided that both required ports are routed (forwarded) to the machine that it runs on. By default these ports are TCP/4443 and UDP/10000.

If you do not route these two ports, Jitsi Meet will only work with video for two people, breaking upon 3 or more people trying to show video.

TCP/443 is required for the webserver which can be running on another machine than the Jitsi Videobrige is running on.

The following extra lines need to be added to the file ~/.sip-communicator/sip-communicator.properties (in the home directory of the user running the videobridge):

org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=<Local.IP.Address>

org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=<Public.IP.Address>


Hold your first conference

You are now all set and ready to have your first meet by going to http://jitsi.example.com

Enabling recording

Jibri is a set of tools for recording and/or streaming a Jitsi Meet conference.


For more information: 

https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-manual


Background

2003 Emil Ivov, a student at the University of Strasbourg, France, creates SIP Communicator.  


2005 SIP communicator is completely refactored, to accommodate plugin development


2008 SIP Communicator gets its first end-to-end encryption 


2009 Emil Ivov and Yana Stamcheva register Blue Jimp company, which employs Jitsi’s main  contributors. They offer professional support and development services.


2011 SIP Communicator is renamed Jitsi (Bulgarian “жици” wires), since it now also supports audio and video over XMPP’s Jingle extensions


2012 Jitsi adds video conferencing capabilities based on the concept of routing video streams. The client of the conference organizer acts as a video router.


2013 Jitsi’s video routing capabilities are extracted in a separate server application and Jitsi Videobridge is born. Jitsi Videobridge adds support for ICE and DTLS/SRTP, thus becoming compatible with WebRTC clients.

With the growth of WebRTC (Real Time Communication) technologies, the project team focus shifted to the Jitsi Videobridge for allowing web-based multi-party video calling.

2014 Using a prototype from Philipp Hancke as a basis, the Jitsi community starts the Jitsi Meet project: a Web Conferencing application that rivals Hangouts and Skype

This full video conferencing application that includes web, Android, and iOS clients. Jitsi also operates meet.jit.si, a version of Jitsi Meet hosted by Jitsi for free community use. Jitsi has received support from various institutions such as the NLnet Foundation, the University of Strasbourg and the Region of Alsace and it has also had multiple participations in the Google Summer of Code program.


2015 Atlassian corporation acquires Blue Jimp, making a long-term investment in keeping Jitsi open source, community-based, and pushing the envelope of great video conferences.


2018 8x8 acquires the Jitsi Technology and team from Atlassian. Jitsi now powers all 8×8 Video Meetings and continues to grow in the heart of many successful initiatives


2020 Jitsi surpasses 20 million monthly active users!

Jitsi codebase is used by numerous new web based video conferencing services/platforms.

Context of origin

Visual representation

Documentation

URL:  https://jitsi.github.io/handbook/docs/intro

Suggestions

JITSI should be adopted at least as an individual use by all that care about price, flexibility, data privacy and use of open standards. Ideally it should be introduced first as mobile phone app and web use existing http://meet.jit.si free community service and then installed locally for organizations and institutions that have tech person and option to host services on their own network (then a limitation of about 20-30 connections can be surpassed).

Credits

Original author: Emil Ivov, now shared with many contributors
https://github.com/jitsi/jitsi-meet/graphs/contributors

Brand holder 8x8, VoIP products' company (main contributor to jitsi)