BigBlueButton est une solution Open Source de conférences Web ayant vu le jour au Canada, à l’université de Carleton, et publiée sur Google Code en 2009. Dans un premier temps, il s’agissait avant tout d’offrir un service de classes virtuelles, permettant de suivre un cours à distance.

Aujourd’hui, BigBlueButton s’intègre avec diverses solutions d’e-learning, comme OpenOLAT, Canvas, … tandis qu’il a fait l’objet d’une ré-écriture complète, ayant mené à la publication de BigBlueButton 2.2 en 2020. Dans cet intervalle de temps, le client Flash a été déprécié, avant de disparaître au profit d’un client HTML5 s’appuyant notamment sur WebRTC.

Relativement mature de nos jours, BigBlueButton répondra aussi bien aux besoin de classes en lignes qu’à celui de visioconférences, publiques ou privées. BigBlueButton

BBB source: wikipedia

Worteks a d’ailleurs mis en ligne gratuitement en 2020 plusieurs instances de BigBlueButton afin de faciliter le travail à distance ([voir notre précédent article sur le sujet]).

Si BigBlueButton permet d’héberger des conférences impliquant plusieurs centaines de participants, nous nous intéresserons aujourd’hui au streaming de présentations vers un service tiers (RTMP).

Début 2020, en plus de la ré-écriture de BigBlueButton, un projet BigBlueButton-liveStreaming a fait son apparition sur GitHub. Livré sous forme d’une image Docker, nous pourrons utiliser un conteneur se connectant à une conférence BigBlueButton existante. Ce conteneur lance un framebuffer, depuis lequel Chromium démarre, Selenium permettant alors de rejoindre la conférence sans activer de micro. Ffmpeg capture l’audio et la vidéo depuis notre framebuffer, renvoyant ce flux vers un serveur RTMP arbitraire.

Plusieurs solutions de serveurs RTMP existent. Nous pourrions citer OpenStreamingPlatform, projet open source assez jeune, dont l’interface web reste minimaliste. L’implémentation qui nous intéresse aujourd’hui est PeerTube.

Projet français, en partie financé par Framasoft dans le cadre du projet Degooglisons Internet, PeerTube a commencé comme une solution de VoD minimaliste. Courant 2020, PeerTube 2.4.0 voit le jour, s’affirmant davantage comme alternative solide à YouTube tout en restant une solution décentralisée, pouvant s’interfacer avec d’autres instances PeerTube, formant une fédération. Notons enfin que le client web, permettant de visualiser un contenu, peut à son tour retransmettre ses données à un autre client, consultant la même video, allégeant la charge sur votre instance.

Peertube source: framablog

Fin 2020, le développement d’un serveur RTMP est en cours, offrant ainsi la possibilité de retransmettre un flux vidéo – sans que ce media n’ait été ajouté à la librairie de votre instance PeerTube. Une fois que le live prend fin, PeerTube va transcoder ce flux, qui intégrera ensuite votre librairie. La version 3.0 devrait voir le jour début 2021, stabilisant la fonction serveur RTMP qui est toujours en cours de test.

Dans un premier temps, nous allons déployer une instance de BigBlueButton, et Greenlight, à l’aide d’un playbook Ansible. Créer un premier compte administratif Greenlight – par défaut, il faudra un compte pour démarrer une conférence. Nous devrons de même déployer un serveur PeerTube, et ses bases Postgres & Redis. Attention : il faudra utiliser au moins ce commit du 9 novembre, voire celui-ci, apportant divers fixes et traductions supplémentaires. Ou master (à vos risques et perils). Le serveur RTMP ne fait pas partie de la release 2.4.0.

PeerTube peut se déployer sur serveurs physiques, virtuels, Heroku, Kubernetes.

Pour activer le serveur RTMP de PeerTube, nous ajouterons à sa configuration :

live:
allow_replay: true
enabled: true
max_duration: 10 hours
max_instance_lives: -1
max_user_lives: -1
rtmp:
port: 1935
transcoding:
enabled: true
resolutions:
240p: false
360p: false
480p: true
720p: true
1080p: true
2160p: false
threads: 8

Ou, depuis l’interface web, s’identifier avec le compte root PeerTube, et se rendre dans les settings de l’instance :

PeertubeAdminSettings Activer la fonction livestreaming depuis les settings de l’instance

Depuis le formulaire de publication d’une vidéo, un nouvel onglet va nous permettre de lancer un live :

Peertube RTMP Publish Création d’un live

Nous arrivons alors sur une page permettant de configurer notre live :

Nom, tags Nom, tags, description, …

En navigant sur le deuxième onglet, on retrouve la clé du stream, et l’URL vers laquelle retransmettre notre flux RTMP :

Peertube Stream Endpoint Configuration Addresse RTMP et clé du stream

Le dernier onglet permet de prévisualiser le flux réceptionné, avant de rendre notre live accessible aux clients de notre instance PeerTube : Peertube Stream Preview PeerTube Stream Preview

De retour sur BigBlueButton, créer une conférence de test.

Récupérer la clé d’API BigBlueButton de votre installation.

Connaissant l’identifiant de conférence, la clé d’API BigBlueButton et les adresse et secret RTMP pour notre stream, nous pourrons démarrer un conteneur, assurant la retransmission entre BigBlueButton et PeerTube. L’exemple suivant utilise docker-compose :

version: '3.3'
services:
MyMeetingId:
container_name: MyMeetingId
environment:
- BBB_DOWNLOAD_MEETING=false
- BBB_MEETING_ID=MyMeetingId
- BBB_SECRET=BigBlueButtonAPISecret
- BBB_URL=https://my-bigbluebutton-server.example.com/bigbluebutton/api
- BBB_STREAM_URL=rtmp://my-peertube-server.example.com/stream/my-peertube-stream-key
image: docker.io/aauzid/bigbluebutton-livestreaming:latest
volumes:
- /tmp/bbb-stream/MyMeetingId:/video

Peu après avoir lancé ce conteneur, depuis PeerTube, nous pourrons accéder au stream, en léger différé par rapport aux clients directement connectés à BigBlueButton.

Au delà de PeerTube, n’importe quel serveur RTMP peut convenir, OpenStreamingPlatform ou Youtube compris.

Un tel montage facilitera la distribution de charge. Notons par contre que l’intégration du Chat BigBlueButton avec le service RTMP dont vous dépendez n’est pas pris en charge par BigBlueButton-liveStream. Il sera en revanche possible de rajouter une variable d’environnement BBB_SHOW_CHAT=true, afin d’inclure le chat BigBlueButton au flux video.