[jitsi-dev] jitsi-meet depends on prosody?



Below is the full document that I have written when I install jitsi videobridge, jitsi-meet using ejabberd and apache some time ago. No sure if all these are still valid; hopefully give some help to anyone trying to do the same.

1. Jitsi-Videobridge Component

Jitsi-Videobridge is an XMPP server component that allows for multiuser video communication. Unlike the expensive dedicated hardware videobridge, Jitsi-Videobridge does not mix the video channels into a composite video stream, but only relays the received video channels to all call participants. Therefore, while it does need to run on a server with good network bandwidth, CPU horsepower is not that critical for performance.

You can find more information from the documentation in jitsi-videobridge ./doc directory source.

1.1 Jitsi-Videobridge client & implementation

To organize a Jitsi-Videobridge conference, open the “Tools” menu of the main Jitsi client window and select “Create a video bridge…”. If the option is grey and inactive, then your XMPP server does not currently have a Jitsi-Videobridge connected to it.

During a video call, the conference organizer sets up a call through a videobridge, controls and uses the videobridge with the COLIBRI protocol (COnferences with LIghtweight BRIdging). COLIBRI is an open XMPP extension protocol designed by the Jitsi development team. It allows the conference organizer to allocate channels for everyone, add or remove participants; and generally remain informed of the call state. All this happens transparently for the user. You can find information on how the COLIBRI protocol works in the COLIBRI XEP <http://xmpp.org/extensions/xep-0340.html> .

In addition to XMPP, Jitsi-Videobridge can also be controlled through a HTTPS and a REST version of COLIBRI <https://github.com/jitsi/jitsi-videobridge/blob/master/doc/rest-videobridge.md> .

Jitsi-Videobridge is powered by libjitsi and is distributed under the terms of the LGPL.

1.2 Ejabberd & Jitsi-Videobridge component installation

Jitsi has packages for Debian/Ubuntu; follow installation instruction as below:

¨ $ sudo echo 'deb http://download.jitsi.org/nightly/deb unstable/' >> /etc/apt/sources.list

¨ $ sudo wget -qO - https://download.jitsi.org/nightly/deb/unstable/archive.key | apt-key add -

¨ $ sudo apt-get update

¨ $ sudo apt-get -y install jitsi-videobridge

Note: Installation from nightly built will automatically be updated when there are new nightly releases; and may also update any existing configuration files in use.

Alternatively you can clone the Git repo and run the JVB from source using maven.

¨ $ sudo mvn compile exec:java -Dexec.args="--host=$HOST --domain=$DOMAIN --port=$PORT --secret=$SECRET" -Djava.library.path=$JVB_HOME/lib/native/linux-64 -Djava.util.logging.config.file=$JVB_HOME/lib/logging.properties -Dnet.java.sip.communicator.SC_HOME_DIR_NAME=.jitsi-videobridge

§ HOST="Your XMPP server hostname/IP address goes here."

§ DOMAIN="The JVB component name goes here."

§ PORT="the component port of your XMPP server goes here."

§ SECRET="The secret or password for the JVB component."

§ JVB_HOME="The path to your JVB clone."

1.3 Jitsi-Videobridge source build

Jitsi-Videobridge source release support source build and Ubuntu deb installation package creation. Below gives a brief description of the steps for deb package creation.

¨ Download a snapshots of the source from https://download.jitsi.org/jitsi-videobridge/src/ OR

¨ Clone the latest source from its repository i.e. $ git clone https://github.com/jitsi/jitsi-videobridge.git

¨ Install the following required tools maven3, debhelper & dpkg-dev for deb package creation. Ubuntu 16.04 installs maven2 by default (purge in case it exists).

§ $ sudo apt-get purge maven maven2 maven3

§ $ sudo apt-add-repository ppa:andrei-pozolotin/maven3

§ $ sudo apt-get update

§ $ sudo apt-get install maven3

§ $ sudo apt-get install debhelper dpkg-dev

¨ Refer to the following site on maven-ant-task support setup using “Declaring a typedef”. This allows you to run ant build from within eclipse.

§ https://maven.apache.org/ant-tasks/installation.html

¨ Download “maven-ant-tasks-2.1.3.jar” from site below and save it to jitsi-videobridge source sub-directory e.g. ./lib-maven. Avoid saving to default ./lib as its contents will get clear and re-initialize during ant build

§ http://www.eu.apache.org/dist/maven/ant-tasks/2.1.3/binaries/

¨ Import jitsi-videobridge into eclipse as maven project. At times you may need to execute ‘Maven|Update Project…’ from the project context menu.

¨ You need to modify the jitsi-videobridge build.xml to include below scripts

§ <project name="jitsi-videobridge" xmlns:maven-artifact="antlib:org.apache.maven.artifact.ant">

§ <path id="maven-ant-tasks.classpath" path="lib-maven/maven-ant-tasks-2.1.3.jar"/>

§ <typedef resource="org/apache/maven/artifact/ant/antlib.xml"

§ uri="antlib:org.apache.maven.artifact.ant"

§ classpathref="maven-ant-tasks.classpath" />

¨ Update build.xml deb release version number using the latest nightly build

§ <!-- jitsi-videobridge version number - use last nightly release-->

§ <condition property="label" value="901">

§ <not>

§ <isset property="label"/>

§ </not>

§ </condition>

¨ Update two resources files to change relevant parameters to reflect the actual ejabberd xmpp virtual host. These parameters are used to create /etc/jitsi/videobridge/config file during package installation/update:

§ ### ./resources/install/debian/postinst file


§ JVB_HOSTNAME_IN="atalk.org"

§ JVB_PORT=5275


§ OLD_JITSI_CONFIG="/usr/share/jitsi-videobridge/.sip-communicator/sip-communicator.properties"

§ NEW_JITSI_CONFIG="/etc/jitsi/videobridge/sip-communicator.properties

§ # cmeng - do not override if $NEW_JITSI_CONFIG exist. $OLD_JITSI_CONFIG is used in live mode

§ if [ ! -f $NEW_JITSI_CONFIG ] && [ -f $OLD_JITSI_CONFIG ]; then



§ elif [ ! -f $NEW_JITSI_CONFIG ]; then

§ # if sip-communicator.properties file is missing create it

§ # as jvb will search for it and if cannot create it will fail starting



§ fi


§ ### ./resources/install/debian/templates file

§ Default: atalk.org

¨ Modify ./resources/install/debian/init.d file in source directory; some scripts have been added to support execute jitsi-videobrige in live mode with command $ sudo –u jvb /etc/init.d/jitsi-videobridge live.
Note: $OLD_JITSI_CONFIG is used in live mode execution

§ DEAMON_DIR=/usr/share/jitsi-videobridge


§ live() {

§ if [ -f $PIDFILE ]; then

§ echo "$DESC seems to be already running, we found pidfile $PIDFILE."

§ exit 1

§ fi

§ echo -n "Starting Live for $DESC: (note: you must start with sudo -u jvb ...)\n $DAEMON_OPTS\n"


§ ./jvb.sh $DAEMON_OPTS

§ }


§ case "$1" in

§ live)

§ live

§ ;;

¨ Update mvn library by cd to the project directory and execute the following:

§ mvn -U clean package -DskipTests

¨ From within eclipse: execute ‘Run As-> Ant Build…” and select ant script below for update lib dependencies jars, and released source zip or deb package creation respectively:

§ copy-runtime-dependencies-from-maven

§ deb-src [from import resources/install/build-debian.xml]

§ deb-64 [from import resources/install/build-debian.xml]

¨ The release deb package can be found in ./release/jitsi-videobridge_xxx_1_amd64.deb, tagged with the specified version number _xxx_ as specified above.

1.4 Jitsi-Videobridge service configuration

¨ Edit the ejabberd configuration file /etc/ejabberd/ejabberd.yml, find the relevant section that starts with ‘listen’ and add the following:

§ -

§ port: 5275

§ module: ejabberd_service

§ hosts:

§ "jitsi-videobridge.atalk.org":

§ password: "xxxxx"

The port number could be different, but must follow JVB_PORT setting. Note that the hosts: ‘jitsi-videobridge’ part is mandatory and the rest of the domain (‘atalk.org) has to match the domain passed to the Jitsi-Videobridge when launch. If any of these is changed, everything seems to work fine, but when a conference starts only the focus is audible / visible.

¨ Edit the configuration file /etc/jitsi/videobridge/conf, check and update the relevant information is matching xmpp server settings. e.g.:

§ # sets the XMPP domain (default: none)

§ JVB_HOSTNAME=atalk.org

§ # sets the hostname of the XMPP server (default: domain if set, localhost otherwise)


§ # sets the port of the XMPP server (default: 5275)

§ JVB_PORT=5275

§ # sets the shared secret used to authenticate to the XMPP server

§ JVB_SECRET=xxxxx

¨ Note: Additional two parameters are also required in config settings in order to work in jitsimeet environment

§ # extra options to pass to the JVB daemon

§ JVB_OPTS=--apis=rest,xmpp


The domain JVB_HOSTNAME used should be one of the virtual hosts hosted by ejabberd; only jabber clients that are connected to this virtual host will be able to use the videobridge service. Jitsi-videobridge xmpp protocol interface exchanges e.g. <iq /> stanza with ejabberd server uses this specified domains.

Note: Jitsi-meet uses the jitsi-videobridge service as specified in its config file parameter i.e. bridge: 'jitsi-videobridge.atalk.org'; hence this can be independent of the jitsi-meet actual hosted machine (URL link) e.g. domain: 'atalk.sytes.net'.

1.4.1 Jitsi-Videobrige Ping and NAT settings

Jitsi-videobridge is configured by default to ping the ejabberd xmpp server every 10 seconds for channel keepalive. If you run both jitsi-videobridge and xmpp services on the same machine; you may disable the ping by adding PING_INTERVAL=-1 in /etc/jitsi/videobridge/sip-communicator.properties.

If jitsi-videobridge is behind a firewall, two NAT settings must be specified i.e.: NAT_HARVESTER_LOCAL_ADDRESS & NAT_HARVESTER_PUBLIC_ADDRESS

§ org.jitsi.videobridge.PING_INTERVAL=-1

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

§ org.jitsi.videobridge.NAT_HARVESTER_LOCAL_ADDRESS=

§ org.jitsi.videobridge.NAT_HARVESTER_PUBLIC_ADDRESS=

1.5 Starting Jitsi-Videobridge Service

1.5.1 Jitsi-videobridge daemon

During jitsi-videobridge initial installation, it is configured as daemon by the script /etc/init.d/jitsi-videobridge that uses parameters defined in /etc/jitsi/videobridge/conf. The scripts command options are listed below:

¨ $ sudo /etc/init.d/jitsi-videobridge start|stop|status|reload

Live mode execution is possible if the live scripts have been added to ./resources/install/debian/init.d. Sartup jitsi-videobridge in live mode displays all debug messages in terminal for easy debug & verification of config settings. Please ensure you specified “–u jvb” option.

¨ $ sudo –u jvb /etc/init.d/jitsi-videobridge live

To make sure that the correct config settings as daemon service are being used. Do the following:

¨ $ sudo –s /etc/jitsi/videobridge/sip-communicator.properties /usr/share/jitsi-vidoebridge/.sip-communicator/sip-communicator.properties

1.6 Jitsi-Videobridge Remote Debug

Jitsi-videobridge is executed in JVM machine. Following steps outline the method to perform remote debug.

¨ Edit /usr/share/jitsi-videobridge/lib/videobridge.rc and uncomment VIDEOBRIDGE_DEBUG_OPTIONS. You may change suspend=y if you want jitsi-videobridge to wait for remote-debugger to be attached before proceed.

§ # Uncomment the next line to enable the remote debugging of the video bridge

§ VIDEOBRIDGE_DEBUG_OPTIONS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000"

¨ From within eclipse, select your project, right click and select “Debug As|Debug Configurations". Enter parameters as shown below:

Screenshot from 2016-02-02 11_28_19

¨ Check “Display in favorite menu|Debug” option in Common Tab. Click “Close” to complete.

¨ Restart jitsi-videobridge.

¨ From eclipse tool bar, click “Debug” pull down menu, select jitsi-videobridge_rjb to start remote debug.

1.7 Jitsi-videobridge manual start

Note: Following is given as reference only. Use it with care as it may uses config different from the system setup above.

Being an XMPP component, Jitsi-Videobridge can run on a separate machine, as well as on the same machine as the XMPP server itself. So, you basically may just download <https://download.jitsi.org/jitsi-videobridge/linux/> the zip archive to some folder and unpack it. If you install jitsi-videobridge via repository deb package, the default installed directory is /usr/share/jitsi-videobridge.

Enter the extracted folder and run jvb.sh (or jvb.bat if on Windows). You don’t even have to be root/administrator to do that. With the configuration defined, starting Jitsi-Videobridge from the console would look like this:

¨ $ ./jvb.sh --secret=xxxxx –host=localhost --domain=atalk.org --port=5275

You may need to issue “sudo /etc/init.d/jitsi-videobridge stop” to stop current running daemon service. The general synopsis of the command is:

jvb.sh [OPTIONS], where options can be:

§ --secret=SECRET sets the shared secret used to authenticate to the XMPP server

§ --domain=DOMAIN sets the XMPP domain (default: host, if host is set, none otherwise)

§ --min-port=MP sets the min port used for media (default: 10000)

§ --max-port=MP sets the max port used for media (default: 20000)

§ --host=HOST sets the hostname of the XMPP server (default: localhost)

§ --port=PORT sets the port of the XMPP server (default: 5275)

Note: The jitsi-videbridge will attempt to connect to the xmpp server using the specified domain ip as given by the jitsi documentation. (cmeng – not true, it always default to localhost)

2. Jitsi-Meet Installation & Setup

Jitsi Meet is an open-source WebRTC JavaScript application that uses Jitsi-Videobridge to provide high quality, scalable video conference. You can see Jitsi-Meet in action <http://youtu.be/7vFUVClsNh0> here at the session #482 of the VoIP Users Conference.

Jitsi-Meet allows for very efficient collaboration. It allows users to stream their desktop or only some windows. It also supports shared document editing with Etherpad and remote presentations with Prezi.

¨ https://github.com/jitsi/jitsi-meet

¨ https://github.com/jitsi/jitsi-meet/blob/master/doc/quick-install.md

¨ https://github.com/jitsi/jitsi-meet/blob/master/doc/manual-install.md

¨ https://github.com/jitsi/jicofo

¨ https://github.com/jitsi/jigasi

Jitsi-Meet setup requires the installation of the following components. See respective sections for the details of the individual components:

¨ Jitsi-Videobridge

¨ Jitsi Conference Focus (jicofo)

¨ Jitsi-Meet web application

¨ Jitsi Gateway to SIP – Jigasi – optional

¨ Apache SSL, RewriteRule and Reverse Proxy setup

Jitsi-Meet official documentation provides instructions on the setup using nginx and prosody. Both nginx and prosody services are not being used in this setup; but instead replace their equivalents with apache and ejabberd xmpp services respectively. All jitst-meet components etc are assumed to be installed on the same machine.

Please take note of the following:

¨ Jitsi-meet creates a new user account during first jitsi-meet WebRTC lauch; and logs in using anonymous authentication method.

¨ focus@atalk.org, an admin account, via jicofo service, required by jitsi-meet as focus agent, uses an authentication method: i.e.
<auth mechanism="DIGEST-MD5" xmlns="urn:ietf:params:xml:ns:xmpp-sasl"></auth>

¨ Due to these differences in login authentication nature, each ejabberd user requires its own virtual host for login as ejabberd cannot support anonymous and authentication method on the same virtual host.

§ atalk.org – secure host for authenticated user focus login.

§ atalk.sytes.net – public host for jitsi-meet users login

2.1 Jitsi-Meet Supporting Components Installation

This section describes the setup of apache, ejabberd xmpp services and the jitsi-meet components. All services are deployed and resided on the same physical machine.

2.1.1 Jitsi-Videobridge Installation

See section 16. Jitsi-Videobridge Component for installation and setup. Its remote debug method also apply to Jicofo application.

2.1.2 Jitsi Conference Focus (jicofo) Installation

Install JDK and ant etc if missing:

¨ $ sudo apt-get install default-jdk ant

¨ $ sudo apt-get install authbind

¨ When installing jitsi-meet to work with jitsi-videobridge, is best to use JVM >= 1.8.

§ $ sudo add-apt-repository ppa:webupd8team/java

§ $ sudo apt-get update

§ $ sudo apt-get install oracle-java8-installer

§ $ java -version

§ java version "1.8.0_101"

§ Java(TM) SE Runtime Environment (build 1.8.0_101-b13)

§ Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)

Clone source from Github repo:

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

Jicofo use jetty server with default port 8888, and is in conflict with ejabberd jinglenodes port number. Before build, update /org/jitsi/jicofo/auth/AutoBundleActivator.java to return a different port number e.g. 8880

§ protected int getDefaultPort()

§ {

§ // The idea of overriding Videobridge's default is probably an attempt

§ // to have Videobridge and Jicofo running on the same machine with their

§ // defaults and without them clashing.

§ return 8880;

§ }

Update both the Maven tools and jicofo build.xml as per steps outlines in section 16.3.

¨ Update build.xml deb release version number to the latest nightly build e.g.

§ <!-- jicofo version number - use last nightly release-->

§ <condition property="label" value="1.0-330">

§ <not>

§ <isset property="label"/>

§ </not>

§ </condition>

¨ Update ./resources/install/debian/postinst file to change relevant parameters. These parameters are used to create /etc/jitsi/jicofo/config file during package installation/update:

§ # try to get host from pre-installed jitsi-videobridge config file

§ . /etc/jitsi/videobridge/config







§ OLD_JITSI_CONFIG="/usr/share/jicofo/.sip-communicator/sip-communicator.properties"

§ NEW_JITSI_CONFIG="/etc/jitsi/jicofo/sip-communicator.properties

§ # cmeng - do not override if $NEW_JITSI_CONFIG exist. $OLD_JITSI_CONFIG is used in live mode

§ if [ ! -f $NEW_JITSI_CONFIG ] && [ -f $OLD_JITSI_CONFIG ]; then



§ elif [ ! -f $NEW_JITSI_CONFIG ]; then

§ # if sip-communicator.properties file is missing create it

§ # as jicofo will search for it and if cannot create it will fail starting



§ fi

¨ Like jitsi-videobridge section, .resources/install/debian/init.d, .resources/install/linux-64/jicofo.sh & ./lib/jicofo.rc have been updated or created to support live mode and remote debug. Reference to the actual modified files in the release directories.

From within eclipse, execute ‘Run As-> Ant Build…”, “copy-runtime-dependencies-from-maven”, then selects other ant scripts as below for released source or deb package creation respectively:

¨ copy-runtime-dependencies-from-maven

¨ deb-src [from import resources/install/build-debian.xml]

¨ deb-64 [from import resources/install/build-debian.xml]

Alternatively build distribution package using ant commands from terminal. Replace {os-name} with one of: 'lin', 'lin64', 'macosx', 'win', 'win64'.

¨ cd jicofo

¨ ant dist.{os-name}

After jicofo installation, update ejabberd & Jitsi jicofo service configurations.

¨ Edit the configuration file /etc/ejabberd/ejabberd.yml, find the relevant section that starts with ‘listen’ and add the following:

§ -

§ port: 5347

§ module: ejabberd_service

§ access: all

§ shaper_rule: fast

§ hosts:

§ "focus.atalk.org":

§ password: "xxxxxx"

¨ Edit the configuration file /etc/jitsi/jicofo/config, update the relevant information (matching with ejabberd xmpp server relevant settings). e.g.:

§ # Jitsi Conference Focus settings

§ # sets the host name of the XMPP server

§ JICOFO_HOST=localhost


§ # sets the XMPP domain (default: none)



§ # sets the secret used to authenticate as an XMPP component



§ # sets the port to use for the XMPP component connection



§ # sets the XMPP domain name to use for XMPP user focus logins



§ # sets the username to use for XMPP user logins



§ # sets the focus password to use for XMPP user logins



§ # extra options to pass to the jicofo daemon


Run jicofo with optios [start|stop|reload|status]:

¨ $ sudo /etc/init.d/jicofo start

Live mode execution is possible if the live scripts have been added to ./resources/install/debian/init.d. Startup jicofo in live mode displays all log messages in terminal for easy debug & verification of config settings. Please ensure you specify “–u jicofo” option, to ensure the correct config settings as daemon service are being used.

¨ $ sudo –u jicofo /etc/init.d/jicofo live

2.1.3 Jicofo Ping and Other settings

Jicofo is configured by default to ping the xmpp server every 10 seconds for channel keepalive; it also updates disco#info every 30 seconds. If you run jicofo and xmpp server on the same server; you may disable the ping by adding PING_INTERVAL=-1 in /etc/jitsi/jicofo/sip-communicator.properties. You may also change the disco#info interval as shown below i.e. SERVICE_REDISCOVERY_INTERVAL

¨ org.jitsi.jicofo.PING_INTERVAL=-1

¨ org.jitsi.jicofo.HEALTH_CHECK_INTERVAL=600000

¨ # Re-discover interval = 10 * 60 * 1000 (10 minutes)

¨ org.jitsi.jicofo.SERVICE_REDISCOVERY_INTERVAL=600000

2.2 Jitsi-Meet WebRTC

The following section describes the deployment of Jitsi-Meet WebRTC based on web server apache and xmpp ejabberd server. The default installed directory is assumed to be /usr/share/jitsi-meet, i.e. same as the default used in deb installation.

2.2.1 Jitsi-Meet WebRTC Deployment with Pre-compiled CSS & Lib

Follow the method given below if you do not want to perform a source build installation.

Clone source from Github repo:

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

Copy source to apache web document directory:

¨ $ sudo cp –R ./jitsi-meet /usr/share/

Note: jitsi-meet repository contains other files specifically for prosody and nginx. No attempt has been made to remove the unused files at this moment.

To ensure lib functions compatibility with the cloned source, you need to download the latest nightly built deb e.g. jitsi-meet_1.0.xxx_1_all.deb; use an archive manager to extract the following two directories and their contents to /usr/share/jitsi-meet. The contents are the compiled css/libs required by index.html during launching:

§ /usr/share/jitsi-meet/css/all.css

§ /usr/share/jitsi-meet/libs/*

Edit the /usr/share/jitsi-meet/config.js file to reflect actual environment setup:

§ /* jshint -W101 */

§ var config = {

§ // configLocation: './config.json', // see ./modules/HttpConfigFetch.js

§ hosts: {

§ // domain: 'jitsi-meet.example.com',

§ domain: 'atalk.sytes.net',


§ // anonymousdomain: 'guest.example.com',

§ // authdomain: 'jitsi-meet.example.com', // defaults to <domain>


§ // muc: 'conference.jitsi-meet.example.com', // FIXME: use XEP-0030

§ muc: 'conference.atalk.sytes.net',


§ // bridge: 'jitsi-videobridge.jitsi-meet.example.com', // FIXME: use XEP-0030

§ bridge: 'jitsi-videobridge.atalk.org',


§ // jirecon: 'jirecon.jitsi-meet.example.com',

§ // call_control: 'callcontrol.jitsi-meet.example.com',


§ //focus: 'focus.jitsi-meet.example.com', // defaults to 'focus.jitsi-meet.example.com'

§ focus: 'focus.atalk.org'

§ },


§ // Note: cmeng- you may uncomment getroomnode and modify the actual roomName used in conference

§ // getroomnode: function (path) { return 'someprefixpossiblybasedonpath'; },

§ // useStunTurn: true, // use XEP-0215 to fetch STUN and TURN server

§ // useIPv6: true, // ipv6 support. use at your own risk

§ useNicks: false,

§ bosh: '//atalk.sytes.net/http-bind', // FIXME: use xep-0156 for that

§ clientNode: 'http://atalk.sytes.net/jitsimeet', // The name of client node advertised in XEP-0115 'c' stanza

§ focusUserJid: 'focus@atalk.org', // The real JID of focus participant - can be overridden here

§ //defaultSipNumber: '', // Default SIP number

§ …..

2.2.2 Jitsi-Meet Patches

A script file /usr/share/jitsi-meet/jvb_jms script has been created to generate/update jitsi-videobridge conf and sip-communicator.properties for use with jitsi-meet service. Refer to local released source directory.

2.2.3 Jitsi-Meet WebRTC Deployment with Source Build

Jitsi-meet uses Browserify <http://browserify.org/> . If you want to make changes in the code, you need to install Browserify <http://browserify.org/#install> . Browserify requires nodejs <https://nodejs.org/en/> . The official jitsi nodejs-legacy installation has some compatibility issues. Follow steps below to update both the tools to nodejs v0.10.42 and npm v3.7.2

On Debian/Ubuntu systems, the required packages can be installed with:

¨ $ sudo apt-get install nodejs-legacy npm

¨ To update nodejs to version 0.10.41

§ echo 'deb https://deb.nodesource.com/node_0.10 xenial main' > /etc/apt/sources.list.d/nodesource.list

§ echo 'deb-src https://deb.nodesource.com/node_0.10 xenial main' >> /etc/apt/sources.list.d/nodesource.list

§ sudo apt-get update

§ sudo apt-get install nodejs

¨ $ sudo npm -g install npm@latest

Note: If your jisti-meet directory is accessible without root, then issue all below commands without the $ sudo

¨ $ cd jitsi-meet

¨ $ npm install

To build the Jitsi-Meet application, just type

¨ $ make

During make process, you may experience some missing commands in ./node_modules/.bin. Create the missing command links in .bin directory as below in particular e.g.

¨ $ ln –s ../browerfly/bin/cmd.js browerify

¨ $ ln –s ../clean-css/bin/cleancss cleancss

2.2.4 Working with the library sources (lib-jitsi-meet)

By default the lib-jitsi-meet library is built from its git repository sources. The default dependency path in package.json is: "lib-jitsi-meet": "jitsi/lib-jitsi-meet".

To work with local copy you must download the source to e.g. “/usr/share/jitsi-meet/lib-jitsi-meet” and change the path to: "lib-jitsi-meet": "./lib-jitsi-meet".

Before “make” the project, you must force it to take the local “./lib-jitsi-meet” sources; as 'npm update' will not do it automatically.

¨ $ npm install lib-jitsi-meet –force

To build the jitsi-meet application using local “./lib-jitsi-meet”, just type

¨ $ npm install

¨ $ make

2.3 Apache Setup

Default apache installation on Ubuntu 16.04 is version 2.4.23. If your version (e.g. with ubuntu 14.04) does not fully support the RewriteRule features. Follow the steps given below to upgrade apache to latest 2.4.x release i.e. 2.4.23 as of Aug 20, 2016.

Add apache PPA to the system manually by copying the lines below and adding them to your system's “Software Sources” in “Other Software|APT line:” entries.

¨ Display sources.list entries:

§ deb http://ppa.launchpad.net/ondrej/apache2/ubuntu xenial main

§ deb-src http://ppa.launchpad.net/ondrej/apache2/ubuntu xenial main

¨ Second entry can be omitted if you click “Add Source” during first entry process.

¨ Launch “Software Updater” to upgrade apache to latest release

Starting with version 47, Chrome does not longer support getUserMedia on non-ssl Domains. It is no longer possible to access the video and audio from a Web camera in Web applications which are loaded from a non-ssl origin. If a page is loaded via HTTP one gets the error: "getUserMedia() no longer works on insecure origins. Jitsi-meet uses this feature, hence access to jitsi-meet application must use a secure origin, such as HTTPS.

Jitsi-Meet requires both ssl and reverse-proxy support on web server. Refer to the following sites on how to create a self-signed SSL certificate; and update the /etc/apache2/sites-avalable/default-ssl.conf

¨ https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-apache-in-ubuntu-16-04

¨ http://www.liquidweb.com/kb/how-to-create-a-self-signed-ssl-certificate-on-ubuntu/

2.3.1 Create Apache SSL certificate

¨ Create self-signed SSL certificate

§ $ sudo mkdir /etc/apache2/ssl

§ $ sudo openssl req -x509 -nodes -days 10000 -newkey rsa:2048 -keyout /etc/apache2/ssl/atalk.sytes.net.key -out /etc/apache2/ssl/atalk.sytes.net.crt

¨ Command definitions:

§ openssl: This is the basic command line tool provided by OpenSSL to create and manage certificates, keys, signing requests, etc.

§ req: This specifies a subcommand for X.509 certificate signing request (CSR) management. X.509 is a public key infrastructure standard that SSL adheres to for its key and certificate management. Since we want to create a new X.509 certificate, this is what we want.

§ -x509: This option specifies that we want to make a self-signed certificate file instead of generating a certificate request, as would normally happen.

§ -nodes: This option tells OpenSSL that we do not wish to secure our key file with a passphrase. Having a password protected key file would get in the way of Apache starting automatically as we would have to enter the password every time the service restarts.

§ -days 10000: This specifies that the certificate we are creating will be valid for ~30 years.

§ -newkey rsa:2048: This specifies that we want to generate a new certificate and a new private key at the same time. We did not create the private key that is required to sign the certificate in a previous step, so we need to create it along with the certificate. The rsa:2048 portion tells it to make an RSA key that is 2048 bits long.

§ -keyout: This parameter names the output file for the private key file that is being created.

§ -out: This option names the output file for the certificate that we are generating.

¨ Following is an example what will be the information requested during ssl certificate generation.

§ Country Name (2 letter code) [AU]:SG

§ State or Province Name (full name) [Some-State]:Singapore

§ Locality Name (eg, city) []:Singapore City

§ Organization Name (eg, company) [Internet Widgits Pty Ltd]:atalk.sytes.net

§ Organizational Unit Name (eg, section) []:Department of atalk

§ Common Name (e.g. server FQDN or YOUR name) []:atalk.syte.net

§ Email Address []:your_email@gmail.com

2.3.2 Apache SSL, RewriteRule and Reverse Proxy Configuration & Setup

Note: Apache2 mod_rewrite execution order has precedence over mod_alias irrespective of their orders appear in the configuration files.

¨ Proceed to edit the /etc/apache2/sites-avalable/default-ssl.conf to add/modify the lines:

§ <VirtualHost *:443>

§ ServerName atalk.sytes.net

§ DocumentRoot /usr/share/jitsi-meet


§ SSLEngine on

§ SSLCertificateFile /etc/apache2/ssl/atalk.sytes.net.crt

§ SSLCertificateKeyFile /etc/apache2/ssl/atalk.sytes.net.key


§ # RewriteRule for jitsi-meet

§ RewriteEngine on

§ RewriteCond %{REQUEST_URI} /([a-zA-Z0-9=\?]+)$

§ RewriteRule ^/(.*)$ / [L,PT]


§ # Reverse proxy setup for http-bind

§ <Location /http-bind>

§ ProxyPass http://localhost:5280/http-bind

§ ProxyPassReverse http://localhost:5280/http-bind

§ AllowOverride all

§ Require all granted

§ </Location>

§ </VirtualHost>

¨ Refer to the links below on Apache 2.4.x for more information:

§ https://httpd.apache.org/docs/2.4/mod/mod_proxy.html

§ http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html

§ https://www.leaseweb.com/labs/2014/12/tutorial-apache-2-4-transparent-reverse-proxy <https://www.leaseweb.com/labs/2014/12/tutorial-apache-2-4-transparent-reverse-proxy/>

§ https://www.digitalocean.com/community/tutorials/how-to-use-apache-http-server-as-reverse-proxy-using-mod_proxy-extension

2.3.3 Jitsi-Meet Site Configuration

Edit /etc/apache2/apache2.conf for Jitsi-meet share directory and ServerSideIncludes (SSI) support in index.html.

§ # Enable to support jitsi meet

§ <Directory /usr/share/>

§ Options Indexes FollowSymLinks Includes

§ XBitHack on

§ AllowOverride all

§ Require all granted

§ </Directory>

We also need to create a configuration file inside the /etc/apache2/conf-available/ directory, e.g. jitsi-meet.conf with the following contents:

§ # jitsimeet default Apache configuration


§ # Use Document Root and RewriteRule instead

§ # Alias /jitsimeet /usr/share/jitsi-meet


§ <Directory /usr/share/jitsi-meet>

§ Options FollowSymLinks

§ DirectoryIndex index.html

§ </Directory>

Execute the following commands to enable jitsimeet site & apache modules support; then retart apache

¨ Enable the required apache2 modules and restart apache2:

§ $ sudo a2enconf jitsi-meet

§ $ sudo a2ensite default-ssl

§ $ sudo a2enmod include

§ $ sudo a2enmod ssl rewrite proxy proxy_http

§ $ sudo /etc/init.d/apache2 restart

2.4 Launch Jitsi-Meet conference

Launch a web browser (Chrome, Chromium, Opera or fireFox) and enter in the URL bar the hostname (or IP address) e.g. Second URL (do not end with back slash) specifies the jitsimeet conference room name i.e jmconfroom etc:

¨ https://atalk.sytes.net/

¨ https://atalk.sytes.net/jmconfroom

Confirm that you trust the self-signed certificate of the newly installed Jitsi-Meet host site.

2.5 Jitsi Gateway to SIP – Jigasi Installation

Jitsi Gateway to SIP: jigasi is a server-side application that links & allows regular SIP clients to join Jitsi-Meet conferences hosted by Jitsi-Videobridge.


Install Jigasi

¨ $ sudo apt-get -y install jigasi


¨ $ sudo wget https://download.jitsi.org/jigasi_1.0-1_amd64.deb

¨ $ sudo dpkg -i jigasi_1.0-1_amd64.deb

During the installation, you will be asked to enter your SIP account and password. This account will be used to invite the other SIP participants.

2.5.1 Reload Jitsi-Meet

Launch again a browser with the Jitsi-Meet URL and you'll see a telephone icon on the right end of the toolbar. Use it to invite SIP accounts to join the current conference.

2.6 Basic Jitsi-Meet installation (nginx and prosody)

Jitsi-Meet installation from deb will default to use both the prosody and nginx; the tools are equivalent of apache and ejabberd as in atalk.org. Therefore deb installation given here is for reference, and is not use in atalk.org server setup.

Add the repository

¨ $ sudo echo 'deb http://download.jitsi.org/nightly/deb unstable/' >> /etc/apt/sources.list

¨ $ sudo wget -qO - https://download.jitsi.org/nightly/deb/unstable/archive.key | apt-key add -

Update the package:

¨ $ sudo apt-get update

Install Jitsi-Meet

¨ apt-get -y install jitsi-meet

During the installation, you will be asked to enter the hostname of the Jitsi-Meet instance. If you have a FQDN hostname for the instance already set up in DNS, enter it there. If you don't have a resolvable hostname, you can enter the IP address of the machine (if it is static or doesn't change).

This hostname (or IP address) will be used for virtual host configuration inside the Jitsi-Meet and also, you and your correspondents will be using it to access the web conferences.

2.7 Jitsi-Meet Uninstall

¨ $ sudo apt-get purge jigasi jitsi-meet jicofo jitsi-videobridge

Sometimes the following packages will fail to uninstall properly:

¨ jigasi

¨ jitsi-videobridge

When this happens, just run the uninstall command a second time and it should be ok.

The reason for failure is that sometimes, the uninstall script is faster than the process that stops the daemons. The second run of the uninstall command fixes this, as by then the jigasi or jvb daemons are already stopped.


-----Original Message-----
From: dev [mailto:dev-bounces@jitsi.org] On Behalf Of dev-request@jitsi.org
Sent: Saturday, April 08, 2017 12:35 AM
To: dev@jitsi.org
Subject: dev Digest, Vol 49, Issue 29

Send dev mailing list submissions to

                 <mailto:dev@jitsi.org> dev@jitsi.org

To subscribe or unsubscribe via the World Wide Web, visit

                 <http://lists.jitsi.org/mailman/listinfo/dev> http://lists.jitsi.org/mailman/listinfo/dev

or, via email, send a message with subject or body 'help' to

                 <mailto:dev-request@jitsi.org> dev-request@jitsi.org

You can reach the person managing the list at

                 <mailto:dev-owner@jitsi.org> dev-owner@jitsi.org

When replying, please edit your Subject line so it is more specific than "Re: Contents of dev digest..."

Today's Topics:

   1. Re: jitsi-meet depends on prosody? (Damian Minkov)

   2. Re: [jitsi/jitsi-videobridge] Bandwidth estimation and

      probing for bandwidth fixes (#446) (George Politis)

   3. [lib-jitsi-meet] change Camera (Alfredo Guzman)

   4. Re: [jitsi/libjitsi] Bandwidth estimation and probing for

      bandwidth fixes (#297) (bbaldino)


Message: 1

Date: Fri, 7 Apr 2017 11:04:49 -0500

From: Damian Minkov < <mailto:damencho@jitsi.org> damencho@jitsi.org>

To: Jitsi Developers < <mailto:dev@jitsi.org> dev@jitsi.org>

Subject: Re: [jitsi-dev] jitsi-meet depends on prosody?


                < <mailto:CAE07f0JMgWrRy1B=j-ohV9rz-sU4MH1fWadWQSo3sNhH7Oqkvw@mail.gmail.com> CAE07f0JMgWrRy1B=j-ohV9rz-sU4MH1fWadWQSo3sNhH7Oqkvw@mail.gmail.com>

Content-Type: text/plain; charset=UTF-8


The package you install jitsi-meet is a meta package and consist of various components in order for users to install using a single command and at the end have a working conference solution. These dependencies consist of a web application, a way to serve it nginx,

apache2 or jetty from jvb, a video bridge, a controlling component called jicofo and a XMPP server that connects them all which we chose back in time and is prosody.

If you want to customize this solution you can install separate packages and configure them one by one. You can use your web server and your XMPP server and install just jitsi-meet-web, jitsi-videobridge and jicofo.

A PR for configuring different XMPP servers in the system is welcome.



On Thu, Apr 6, 2017 at 10:15 AM, Hadmut Danisch < <mailto:hadmut@danisch.de> hadmut@danisch.de> wrote:


I just had some trouble installing jitsi-videobridge and jitsi-meet

from the ubuntu-package provided by jitsi, because jitsi-meet depends

on jitsi-meet-prosody, and jitsi-meet-prosody depends on prosody, thus

the presence of prosody is enforced.

I wanted to install this with ejabberd, and the docs for

jitsi-videobridge contain details about configuring ejabberd, so it is


Furthermore and as far as I understand (and supported by the graphics


<https://github.com/jitsi/jitsi-meet/blob/master/doc/manual-install.md> https://github.com/jitsi/jitsi-meet/blob/master/doc/manual-install.md

jitsi-meet should be a web/js application and not bound to a

particular jabber server.

I found that ejabberd could not start since the ports were already

occupied by prosody, and I am wondering why jitsi-meet does enforce

prosody, while jitsi-meet is independent of a jabber server and

jitsi-videobridge is said to cope with ejabberd as well.

best regards



dev mailing list

<mailto:dev@jitsi.org> dev@jitsi.org

Unsubscribe instructions and other list options:

<http://lists.jitsi.org/mailman/listinfo/dev> http://lists.jitsi.org/mailman/listinfo/dev


Message: 2

Date: Fri, 07 Apr 2017 09:08:13 -0700

From: George Politis < <mailto:notifications@github.com> notifications@github.com>

To: jitsi/jitsi-videobridge < <mailto:jitsi-videobridge@noreply.github.com> jitsi-videobridge@noreply.github.com>

Cc: Push < <mailto:push@noreply.github.com> push@noreply.github.com>

Subject: Re: [jitsi-dev] [jitsi/jitsi-videobridge] Bandwidth

                estimation and probing for bandwidth fixes (#446)


                < <mailto:jitsi/jitsi-videobridge/pull/446/push/1666130087@github.com> jitsi/jitsi-videobridge/pull/446/push/1666130087@github.com>

Content-Type: text/plain; charset="utf-8"

@gpolitis pushed 1 commit.

68dfc5a fix: Update the bitrate controller when participants leave the conference.


You are receiving this because you are subscribed to this thread.

View it on GitHub:

<https://github.com/jitsi/jitsi-videobridge/pull/446/files/490dc897cf921a4fb3213bea594bf4ef1f5b8c72..68dfc5a4314bf80ab486b6928d64497fbec91af0> https://github.com/jitsi/jitsi-videobridge/pull/446/files/490dc897cf921a4fb3213bea594bf4ef1f5b8c72..68dfc5a4314bf80ab486b6928d64497fbec91af0

-------------- next part --------------

An HTML attachment was scrubbed...

URL: < <http://lists.jitsi.org/pipermail/dev/attachments/20170407/46b4631a/attachment-0001.html> http://lists.jitsi.org/pipermail/dev/attachments/20170407/46b4631a/attachment-0001.html>


Message: 3

Date: Fri, 7 Apr 2017 11:17:33 -0500

From: Alfredo Guzman < <mailto:alfredo.sil.gt@gmail.com> alfredo.sil.gt@gmail.com>

To: <mailto:dev@jitsi.org> dev@jitsi.org

Subject: [jitsi-dev] [lib-jitsi-meet] change Camera


                < <mailto:CAL3Muw406rKDVDnfNv4QLxy+tLZ+bOdC_0iB=MtXjKG9wTXoWw@mail.gmail.com> CAL3Muw406rKDVDnfNv4QLxy+tLZ+bOdC_0iB=MtXjKG9wTXoWw@mail.gmail.com>

Content-Type: text/plain; charset="utf-8"

Hi, everyone.

I'm developing my own app using lib-jitsi-meet.

Now I am trying to write the functionality to change between the cameras detected, but I do not encunetro some method in the documentation that takes care of this in specific. Something like:


How could I do something like that?

thanks to all.

-------------- next part --------------

An HTML attachment was scrubbed...

URL: < <http://lists.jitsi.org/pipermail/dev/attachments/20170407/151bc93b/attachment-0001.html> http://lists.jitsi.org/pipermail/dev/attachments/20170407/151bc93b/attachment-0001.html>


Message: 4

Date: Fri, 07 Apr 2017 09:28:16 -0700

From: bbaldino < <mailto:notifications@github.com> notifications@github.com>

To: jitsi/libjitsi < <mailto:libjitsi@noreply.github.com> libjitsi@noreply.github.com>

Cc: Subscribed < <mailto:subscribed@noreply.github.com> subscribed@noreply.github.com>

Subject: Re: [jitsi-dev] [jitsi/libjitsi] Bandwidth estimation and

                probing for bandwidth fixes (#297)

Message-ID: < <mailto:jitsi/libjitsi/pull/297/review/31604207@github.com> jitsi/libjitsi/pull/297/review/31604207@github.com>

Content-Type: text/plain; charset="utf-8"

bbaldino commented on this pull request.

@@ -29,23 +31,47 @@

public class MediaStreamTrackDesc



+ * The system property name that holds the minimum time (in millis) that is

+ * required for the media engine to generate a new key frame.

`generate a new key frame`? does that mean request a key frame?

@@ -29,23 +31,47 @@

public class MediaStreamTrackDesc



+ * The system property name that holds the minimum time (in millis) that is

+ * required for the media engine to generate a new key frame.

also, i assume the 'wait' here is from a previous keyframe request? or is this a delay from when the user joins/stream is created?

      * The minimum time (in millis) that is required for the media

engine to

      * generate a new key frame.


- private static final int MIN_KEY_FRAME_WAIT_MS = 300;

+ private static final int MIN_KEY_FRAME_WAIT_MS

+ = cfg != null ? cfg.getInt(MIN_KEY_FRAME_WAIT_MS_PNAME, 300) :

+ 300;

why not do a static var for the default value as well?


      * The maximum time interval (in millis) an encoding can be considered

      * active without new frames.


- private static final int SUSPENSION_THRESHOLD_MS = 600;

+ public static final int SUSPENSION_THRESHOLD_MS

+ = cfg != null ? cfg.getInt(SUSPENSION_THRESHOLD_MS_PNAME, 600)

+ : 600;

same as above

@@ -234,8 +240,8 @@ public RTPEncodingDesc(


     private static void applyFrameBoundsHeuristics(FrameDesc a, FrameDesc b)


- int end = a.getEnd(), start = b.getStart();

- if (end != -1 && start != -1)

+ int aEnd = a.getEnd(), bStart = b.getStart();

do these represent timestamps?

+ * @param performTimeoutCheck when true, it requires fresh data

+ and not

+ * just the active property to be set.

+ *

+ * @return true if this instance is streaming, false otherwise.

+ */

+ public boolean isActive(boolean performTimeoutCheck)

+ {

+ if (active && performTimeoutCheck)

+ {

+ if (lastReceivedFrame == null)

+ {

+ return false;

+ }

+ else

+ {

+ long silentIntervalMs

'silent' here is referring to no video packets received? might be a bit confusing with 'audio silence'. `timeSinceLastReceivedFrameMs` maybe?


You are receiving this because you are subscribed to this thread.

Reply to this email directly or view it on GitHub:

<https://github.com/jitsi/libjitsi/pull/297#pullrequestreview-31604207> https://github.com/jitsi/libjitsi/pull/297#pullrequestreview-31604207

-------------- next part --------------

An HTML attachment was scrubbed...

URL: < <http://lists.jitsi.org/pipermail/dev/attachments/20170407/8dc772a2/attachment.html> http://lists.jitsi.org/pipermail/dev/attachments/20170407/8dc772a2/attachment.html>


Subject: Digest Footer


dev mailing list

<mailto:dev@jitsi.org> dev@jitsi.org

<http://lists.jitsi.org/mailman/listinfo/dev> http://lists.jitsi.org/mailman/listinfo/dev


End of dev Digest, Vol 49, Issue 29