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
- mettre le module au démarrage
- 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”
Sélectionnez les options appropriées et cliquez sur “Aller au direct”
Sur la page suivante, cliquez sur la tabulation “Paramètres du direct”
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.
Dans les options, une nouvelle option est apparue “Démarrer la diffusion en direct”
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
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 !