Dans cet article, nous allons détailler les différentes étapes pour réussir à diffuser votre conférence Jitsi sur Peertube.

1. Pourquoi ?

C’est sans doute la question la plus importante, pourquoi vouloir diffuser une conférence Jitsi au plus grand nombre, pourquoi passer par Peertube ?

D’abord on parle ici de diffusion en direct (ou streaming pour nos amis anglophiles) et non de rediffusion (donc du contenu enregistré et remis à la disposition du plus grand nombre après).

Ensuite nous parlons ici d’outils Open Source. Que ce soit Jitsi ou Peertube, ce sont des projets disponibles au public sans restriction, que tout le monde peut mettre en place sur un serveur et adapter à ses besoins (ce point là est particulièrement important). Il existe des alternatives propriétaires : Zoom, Twitch, Youtube, mais qui sont toutes la propriété de grands groupes et ne vous donnent que peu de marge de manoeuvre et surtout vont vouloir monétiser d’une façon ou d’une autre leur bande passante, stockage ou utilisation de serveur.

Le cas de figure classique va être une conférence avec quelques intervenants (qui sont physiquement à des endroits différents, de deux à dix intervenants par exemple) et une audience massive (plusieurs centaines / milliers de spectateurs).

La première solution va être de mettre tout le monde sur Jitsi… plusieurs milliers d’utilisateurs dont seulement quelques-uns vont avoir la parole semble vain, mais surtout va mettre à mal votre infrastructure (aussi bien le réseau que vos serveurs).

Le principe est donc ici de mettre en place une conférence relativement classique via Jitsi et de la diffuser massivement via Peertube. On limite ainsi aussi bien la bande passante, vos serveurs, mais on peut aussi mettre en place un replay pour les personnes qui auraient raté la conférence.

2. Jitsi c’est quoi ?

Jitsi est une solution Open Source de conférence, incluant audio et vidéo.

Pour faire court, c’est une alternative à d’autres solutions de conférence propriétaires comme Zoom. Elle va donc vous permettre de mettre en place des conférences privées ou publiques. Pour installer Jitsi, je vous conseille de suivre ce lien : Guide de démarrage

3. Peertube c’est quoi ?

Peertube est une solution Open Source d’hébergement et de diffusion de vidéo, un peu comme Youtube mais avec quelques fonctionnalités intéressantes, comme la fédération (le fait de pouvoir distribuer des vidéos sur différentes instances de Peertube, une sorte de redondance des vidéos si on veut), le partage de la bande passante entre clients via Peer to Peer, etc.

Cet outil va donc vous permettre d’héberger vos vidéos, mais ici surtout elle vous permettra de diffuser en direct (ou streamer) du contenu au plus grand nombre.

Pour installer Peertube, je vous conseille le lien suivant : Guide d’installation

4. La mise en place

Avant de pouvoir diffuser vos conférences Jitsi, il vous faudra installer différents éléments comme Jibri, Jicofo, Chromium, FFmpeg, Java8, … Voyons ensemble comment les mettre en place.

Configurer Jitsi et permettre à Jibri de se connecter et “participer” aux conférences vidéos

Quelques définitions:

  • Prosody - serveur XMPP qui permet à tous les composants de se connecter les uns aux autres : web, jicofo, jvb et tous les autres composants
  • Jicofo - service qui s’occupe de répartir les processus entre les participants à la conférence et le bridge video
  • Jitsi (ou Jitsi Meet) - service maître, visible, qui affiche les fonctionnalités à l’écran

Configurer Prosody

nano /etc/prosody/prosody.cfg.lua

Enlever les commentaires dans la section “conference”

---Set up a MUC (multi-user chat) room server on conference.example.com:
Component "conference.jitsi.example.com" "muc"
--- Store MUC messages in an archive and allow users to access it
modules_enabled = { "muc_mam" }

Créer une entrée dans le composant MCU interne. Indispensable pour que Jicofo puisse trouver des clients Jibri sur une MCU qui n’est pas accessible en externe.

Créez une entrée dans votre vhost pour le compte de session chrome de Jibri

A ajouter donc pour se “logger” sur le serveur jitsi

nano /etc/prosody/conf.avail/meet.worteks.com.cfg.lua

A la fin du fichier

-- internal muc component, meant to enable pools of jibri and jigasi clients
Component "internal.auth.meet.worteks.com" "muc"
    modules_enabled = {
	    "ping";
    }
    storage = "memory"
    muc_room_cache_size = 1000

VirtualHost "recorder.meet.worteks.com"
    modules_enabled = {
        "ping";
    }
    authentication = "internal_plain"

Recharger Prosody

systemctl reload prosody

Et on ajoute deux comptes sur Jibri (un pour le contrôle et un pour l’enregistrement)

prosodyctl register jibri auth.meet.worteks.com JibrisPass
prosodyctl register recorder recorder.meet.Worteks.com RecordersPass

Configurer Jicofo

Faire pointer le MCU vers les controllers Jibri

nano /etc/jitsi/jicofo/sip-communicator.properties

Ajouter ces deux lignes pour la salle de contrôle Jibri et le timeout

org.jitsi.jicofo.jibri.BREWERY=JibriBrewery@internal.auth.meet.worteks.com
org.jitsi.jicofo.jibri.PENDING_TIMEOUT=90

On recharge Jicofo

systemctl reload Jicofo

Configurer Jitsi Meet

S’assurer qu’il existe un bouton pour enregistrer et diffuser dans la configuration

nano /etc/jitsi/meet/meet.worteks.com-config.js

Utiliser les adresses ip plus que les noms de domaines pour la connection Bosh

Configuration par défaut avec nom de domaine

bosh: '//meet.worteks.com/http-bind'

Changé en

bosh: '//192.168.10.10/http-bind'

Et ajouter les propriétés suivantes

fileRecordingsEnabled: true, // If you want to enable file recording
liveStreamingEnabled: true, // If you want to enable live streaming
hiddenDomain: 'recorder.meet.worteks.com',

Installer Jibri

Pré-requis

ALSA et LoopBack Device

  • Assurez vous que le module Loopback Device est disponible. Ces modules peuvent être installés sur une Ubuntu 20.04 en utilisant le nom de paquet linux-image-extra-virtual
  • Faites les tâches suivantes en tant que root:
    • mettre le module au démarrage echo "snd-aloop" >> /etc/modules
    • charger le module dans le kernel modprobe snd-aloop
    • vérifier que le module est déjà chargé lsmod | grep snd_aloop
  • Si la sortie montre que le module snd_aloop est chargé, la configuration est finie.

FFmpeg et le support de X11 capture

Jibri requiert une version relativement moderne de FFmpeg avec le support x11 compilé dedans. Ceci est fait par défaut sur Ubuntu 16.04/18.04/20.04 en installant le package ffmpeg. Pour les versions précédentes c’est un peu plus complexe (et on n’abordera pas le sujet ici).

Autres paquets

sudo apt-get install wget gnupg software-properties-common default-jre-headless  curl alsa-utils icewm xdotool xserver-xorg-input-void xserver-xorg-video-dummy

Installer Google Chrome

curl -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add
echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list
apt update
apt install google-chrome-stable

Installer Chrome Driver

CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE`
wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/
unzip ~/chromedriver_linux64.zip -d ~/
rm ~/chromedriver_linux64.zip
sudo mv -f ~/chromedriver /usr/local/bin/chromedriver
sudo chmod 0755 /usr/local/bin/chromedriver

Enlever les alertes de contrôle de script dans Chrome

mkdir -p /etc/opt/chrome/policies/managed

echo '{ "CommandLineFlagSecurityWarningsEnabled": false }' >>/etc/opt/chrome/policies/managed/managed_policies.json

Installer Jibri (enfin !)

Il s’installe sur le même serveur que Jitsi

sudo apt-get install jibri

Ajouter Jibri dans les bons groupes

sudo usermod -aG adm,audio,video,plugdev jibri

Configurer Jibri

Nous allons installer les paquets nécessaires depuis le repository par défaut des Debian 10. Nous allons configurer l’environnement XMPP et l’endroit où vont être stockés les enregistrements

On ouvre donc le fichier de configuration

nano /etc/jitsi/jibri/config.json

Avec les options suivantes

{
    "recording_directory":"/srv/recordings",
    "finalize_recording_script_path": "/path/to/finalize_recording.sh",
    "xmpp_environments": [
        {
            "name": "prod environment",
            "xmpp_server_hosts": [
                "meet.worteks.com"
            ],
            "xmpp_domain": "meet.worteks.com",
            "control_login": {
                // The domain to use for logging in
                "domain": "auth.meet.worteks.com",
                // The credentials for logging in
                "username": "jibri",
                "password": "JibrisPass"
            },
            "control_muc": {
                "domain": "internal.auth.meet.worteks.com",
                "room_name": "JibriBrewery",
                "nickname": "jibri-nickname"
            },
            "call_login": {
                "domain": "recorder.meet.worteks.com",
                "username": "recorder",
                "password": "RecordersPass"
            },
            "room_jid_domain_string_to_strip_from_start": "conference.",
            "usage_timeout": "0"
        }
    ]
}

Code Jibri (disponible ici)

/src/main/kotlin/org/jitsi/jibri/selenium/JibriSelenium.kt

Changer le code pour accepter des certificats non sécurisés ou auto-signés

chromeOptions.addArguments("--ignore-certificate-errors")

chromeOptions.setAcceptInsecureCerts(true)

URL RTMP

src/main/kotlin/org/jitsi/jibri/service/impl/StreamingJibriService.kt

const val YOUTUBE_URL = "rtmp://zb01.lmt.glcx.cnpc:1935/myapp"

On compile le code de Jibri

mvn package -DskipTests

Après sa compilation on remplace l’ancien fichier jar par le nouveau

sudo /opt/jibri/target/jibri-8.0-Snapshot-with-dependies.jar /opt/jitsi/jibri

On recharge Jibri

systemctl reload jibri

On crée le répertoire pour les enregistrements et on lui donne les droits

mkdir /recordings
chown jibri:jibri /recordings

Installer Java 8 et configuration par défaut pour Jibri

Installer Java 8

wget -O - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | sudo apt-key add -
add-apt-repository https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/
apt update
apt install adoptopenjdk-8-hotspot

Ouvrir launch.sh

nano /opt/jitsi/jibri/launch.sh

Mettre Java8 par défaut pour Jibri au lieu de du java par défaut, remplacer le mot “java” par le chemin vers Java 8

/usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/bin/java

Redémarre tous les services, mettre dispo et démarrer Jibri

systemctl restart prosody
systemctl restart jicofo
systemctl restart jitsi-videobridge2
systemctl enable --now jibri

5. La diffusion

Maintenant que tout le setup un peu fastidieux a été fait, il est temps de mettre en place les éléments sur les deux logiciels utilisés, c’est à dire Jitsi pour la conférence et Peertube pour la diffusion.

Peertube

La première étape va être de mettre en place la session live, le streaming si vous voulez sur Peertube.

Cliquez sur “Publier” (le bouton en haut à droite) et sélectionnez la tabulation “aller au direct”

Création du direct Peertube

Sélectionnez les options appropriées et cliquez sur “Aller au direct”

Sur la page suivante, cliquez sur la tabulation “Paramètres du direct”

Paramètres du direct Peertube

Vous avez accès aux informations de diffusion, en particulier l’url RTMP du direct ainsi que la clef de diffusion qui vous seront utiles dans l’étape suivante, copiez ces données temporairement quelque part.

Jitsi Meet

Sur votre session Jitsi, créez une conférence, invitez les personnes dont vous avez besoin pour votre diffusion/conférence, réglez l’audio, la vidéo, toutes ces choses qui feront de votre conférence un intérêt pour le public.

Diffusion en direct Jitsi

Dans les options, une nouvelle option est apparue “Démarrer la diffusion en direct”

Diffusion en direct Jitsi

Vous pouvez rentrer vos informations l’url RTMP vers votre Peertube ainsi que la clef de diffusion

Concaténez votre URL comme rtmp://peertube.olicha:1935/live avec un slash / suivi de votre clef de diffusion

url et clef de diffusion

Cliquez sur “Démarrer la diffusion en direct” et voilà votre conférence est visible par tous

6. Et après?

Vous n’avez pas de Jitsi ou Peertube disponible et installé et cherchez une solution OpenSource pour diffuser au plus grand nombre ?

Il existe des alternatives comme BBB qui peuvent vous permettre de faire ça… mais ce sera pour un autre article !