Arborescence des pages

Vous regardez une version antérieure (v. /wiki/pages/viewpage.action?pageId=914423810) de cette page.

afficher les différences afficher l'historique de la page

« Afficher la version précédente Vous regardez la version actuelle de cette page. (v. 7) afficher la version suivante »


DOCUMENTATION EN COURS DE RÉDACTION ET QUI NE CONCERNE QUE LA VERSION DE TEST DE POD

Contexte et solution apportée

Contexte

Suite à la pandémie de COVID-19, il a été mis en place, à l'université de Montpellier, un système de classe virtuelle Open Source reposant sur Big Blue Button (BBB).

Pour informations, BigBlueButton (https://bigbluebutton.org/) est un outil de classe virtuelle ayant les fonctionnalités suivantes :

  • Vidéo/webcam
  • Audio
  • Chat
  • Partage de document + annotation
  • Partage d’écran
  • Sondage
  • Enregistrement
  • Création de groupes
  • Prises de notes partagées
  • Intégration de vidéos externes
  • Intégration Moodle et WordPress

Il faut savoir que l'enregistrement d'une session BBB se fait sous la forme d'une présentation Web. Cette présentation Web peut alors être lue directement depuis un navigateur, en ayant récupéré l'adresse dans le client BBB (typiquement Moodle ou Greenlight).

Bien que cette façon de faire est des avantages - en particulier concernant l'espace de stockage (une présentation Web n'étant pas une vidéo, sa taille est très petite) - elle présente quelques inconvénients, à savoir :

  • cette présentation Web n'est pas une vidéo, elle ne peut être publiée sur des plateformes telles Pod ou Youtube,
  • cette présentation Web n'est pas une vidéo, elle ne peut être coupée,
  • cette présentation Web ne peut être consultée qu'au travers des clients BBB (Moodle ou Greenlight), ou donnée via un lien dans un mail. Si l'on souhaite donner d'autres accès, cela n'est pas possible,
  • cette présentation Web ne peut être lue que sur les navigateurs Firefox et Chrome dans une version à jour.

Au final, certains enseignants souhaitaient convertir ces présentations Web sous la forme de vidéos, et les publier directement dans la plateforme vidéo de l'université, qui repose sur Pod v2.

Solution

Pour résoudre cette problématique et répondre favorablement aux demandes des enseignants de l'université, j'ai conçu la solution suivante, qui se repose totalement sur Pod v2.

Pourquoi cette solution ?

Ne souhaitant pas que l'ensemble des présentations Web BigBlueButton soient converties automatiquement en vidéo, surtout qu'elles n'ont pas toutes vocation à l'être, il fallait trouver une solution permettant que cela soit l'utilisateur qui choisisse s'il souhaite, ou non, convertir ses présentations Web.


L'idée de cette solution est de :

  • Récupérer régulièrement les informations concernant les sessions en cours, ainsi que les usagers, dans BigBlueButton,

  • Positionner ces informations dans la base de données de Pod,

  • Traiter ces données pour permettre aux utilisateurs, connectés dans Pod, de pouvoir consulter leurs enregistrements des sessions BigBlueButton qu'ils ont réalisé,

Par exemple, voici la liste des sessions BigBlueButton réalisée à des fins de test.


  • Permettre à ces utilisateurs, connectés dans Pod, de créer des vidéos à partir de ses présentations BigBlueButton.

Voici l'écran permettant la confirmation de la création d'une vidéo à partir d'une présentation BigBlueButton.


  • Une fois la vidéo créée à partir de la présentation Web BigBlueButton, celle-ci apparaît dans la liste habituelle de mes vidéos.

Voici le rendu d'une vidéo créée à partir d'une présentation Web BigBlueButton.


Une vidéo créée à partir d'une présentation Web BigBlueButton est réellement identique à cette présentation Web, ce qui signifie qu'elle contient :

  • le document de présentation,
  • l'audio,
  • la vidéo/webcam,
  • le partage d'écran,
  • le chat public,
  • le tableau blanc.


Aucun impact sur BigBlueButton

Cette solution repose totalement sur Pod et n'impacte en rien BigBlueButton. Aucune modification n'est à réaliser côté BigBlueButton.

Architecture de la solution

Choix du plugin permettant la conversion d'une présentation Web BigBlueButton en vidéo

Pour convertir une présentation Web BigBlueButton en vidéo, certains plugins existent déjà sur Github; il ne paraît pas raisonnable de redévelopper un tel système.

Pour arriver à faire mon choix, j'ai testé les 3 solutions suivantes :

  • bbb-recorder (https://github.com/jibon57/bbb-recorder) : un plugin, indépendant de BigBlueButton, qui permet de convertir - via un script - une présentation Web BigBlueButton en fichier vidéo. Ce plugin permet également une diffusion en direct (flux RTMP) d'un cours BigBlueButton.
  • bbb-download (https://github.com/createwebinar/bbb-download) : un plugin, totalement couplé à BigBlueButton, qui convertit automatiquement les présentations Web de BigBlueButton en fichier vidéo.
  • BigBlueButton-liveStreaming (https://github.com/aau-zid/BigBlueButton-liveStreaming) : un plugin, indépendant de BigBlueButton, permettant de publier en live (via RTMP) une session BigBlueButton et de l'enregistrer.


Plugin non testé

A l'époque de mes tests, le plugin bbb-video-download (https://github.com/tilmanmoser/bbb-video-download) n'existait pas encore. Il pourrait être intéressant de le tester par la suite, s'il s'avère plus prometteur que bbb-recorder.

Au final, voici ce qui est ressorti de mes tests.


bbb-recorderbbb-downloadBigBlueButton-liveStreaming
Enregistre un cours BBB en vidéo(coche) 
format webm, mp4
(coche)(avertissement)
peut enregistré le cours qu'il publie en live au format mkv
Exporte un cours BBB en direct live(coche)(moins)(coche)
Enregistre un cours en temps réel(coche)(moins)(moins)
Indépendance vis-à-vis de BigBlueButton(coche)
peut-être installé sur n'importe quel serveur

(info)
doit être installé sur tous les serveurs BBB

(coche)
peut-être installé sur n'importe quel serveur
Contenu de la vidéo finale(coche) présentation
(coche) audio
(coche) vidéo
(coche)partage d'écran
(coche)chat
(coche)whiteboard
(coche) présentation
(coche) audio
(moins) vidéo
(coche) partage d'écran
(moins) chat
(moins) whiteboard
(coche) présentation
(coche) audio
(coche) vidéo
(coche) partage d'écran
(coche) chat
(question) whiteboard
TechnologiesNodeJS, xvfb, Chrome, ffmpeg, shellPython, ruby, ffmpeg, shellDocker, python, xvfb, ffmpeg, shell
Mise à jour régulière(coche)(moins) 
Dernière mise à jour en 2018
(coche)
Notion de charge(ampoule)Le fichier vidéo fait entre 2 et 4Mo par minute, en webm ou mp4(ampoule)Encode nécessairement toutes les Web conférences en vidéo

(info) 1 stream nécessite (à minima ?) 8 CPU cores + 4 Go RAM
(question)possibilité de faire plusieurs streams sur une même VM ?
(ampoule)
le fichier vidéo fait ~19Mo par minute, en mkv

CommentairesFacilement modifiable (scripts JS pour NodeJS)Complètement intégré à BBB (une fois un cours enregistré terminé, une vidéo - en plus de la présentation - est générée)

Il faut bien respecter l'ordre de démarrage (session BBB avant liveStreaming).

Remarques sur mes testsPeut également publier en live le cours (publication RTMP).
(erreur) Le fait de partager l'écran semble - dans certains cas - faire planter ce plugin, avec une erreur "Conversion failed ( Error writing trailer of rtmp://xxxx:xxxx@xxxx.umontpellier.fr:1935/live/myStream: Broken pipe)".

Aux vues des besoins, j'ai alors choisi bbb-recorder comme solution pour la conversion des présentations Web BigBlueButton en fichier vidéo.

Installation et configuration

Pré-requis

Techniquement, la solution repose sur :

Le fait d'exécuter le script bbb-recorder réalise les étapes suivantes :

  • Lance un navigateur Chrome en arrière-plan,
  • Chrome visite le lien - correspondant à la présentation Web BigBlueButton - fourni,
  • Il effectue l'enregistrement d'écran sous la forme d'un fichier vidéo.

Installation de bbb-recorder sur les serveurs d'encodage

Il est nécessaire d'installer bbb-recorder sur les serveurs d'encodage.

La documentation de référence est accessible ici : https://github.com/jibon57/bbb-recorder

Pour ma part, sur les serveurs CentOS 7, voici ce qui a été réalisé.

Installation de bbb-recorder sur CentOS7

(info) Ce plugin n'a pas besoin d'être installé sur un serveur BigBlueButton.

Installation de Chrome et des pré-requis (sous root)

Installation réalisée sur un serveur d'encodage, compte root
# Install xvfb
podtest@ts-sun:~/$ yum install xorg-x11-server-Xvfb
podtest@ts-sun:~/$ wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
podtest@ts-sun:~/$ yum localinstall google-chrome-stable_current_x86_64.rpm

(info) Étant un serveur d'encodage, je considère que ffmpeg est déjà installé. Si besoin, il est nécessaire d'installer ffmpeg.


Installation effective

Voici l'installation pour un utilisateur %userpod% (pensez à remplacer %userpod% par votre utilisateur).

Installation réalisée sur un serveur d'encodage, compte %userpod%
%userpod%@ts-sun:~/$ cd ~
%userpod%@ts-sun:~/$ git clone https://github.com/jibon57/bbb-recorder
%userpod%@ts-sun:~/$ cd bbb-recorder
%userpod%@ts-sun:~/bbb-recorder/$ npm install --ignore-scripts
%userpod%@ts-sun:~/bbb-recorder/$ cp .env.example .env

Gestion du répertoire contenant les vidéos : dans mon cas /data/www/%userpod%/bbb-recorder et du répertoire de logs /data/www/%userpod%/bbb-recorder/logs.

Création des répertoires
%userpod%@ts-sun:~/bbb-recorder/$ mkdir /data/www/%userpod%/bbb-recorder
%userpod%@ts-sun:~/bbb-recorder/$ mkdir /data/www/%userpod%/bbb-recorder/logs

Paramétrage

  • Édition du fichier de configuration ~/bbb-recorder/.env pour paramétrer le RTMP (inutile ici) et surtout le répertoire des vidéos.
Edition de /home/sun/bbb-recorder/config.json
{
"rtmpUrl": "rtmp://xxxxxxxx:xxxxxxxxxx@xxxxx.umontpellier.fr:1935/live/stream",
"ffmpegServer": "ws://localhost",
"ffmpegServerPort": 4000,
"auth": "xxxx",
"copyToPath": "/data/www/%userpod%/bbb-recorder"
}
  • Si besoin, réaliser le paramétrage dans le fichier examples/index.js (pour réaliser un live ou enregistrer en direct une Web conférence) :
const BBBUrl = "https://xxxx.umontpellier.fr/bigbluebutton/", 
BBBSalt = "xxxxxxxxxxxxxxxxxxxx", 
joinName = "recorder";
  • Si vous le souhaitez, vous pouvez configurer le bitrate pour contrôler la qualité de la vidéo exportée en ajustant la propriété videoBitsPerSecond dans background.js.


Répertoire Downloads

Il faut bien penser que bbb-recorder utilise un répertoire temporaire pour générer une vidéo, avant que celle-ci ne soit copiée dans le répertoire configurée (cf. copyToPath). Ce répertoire temporaire correspond à ../Downloads.

Ainsi, dans le cas d'une installation dans le home directory de l'utilisateur %userpod%, le répertoire temporaire créé et utilisé par bbb-recorder est /home/%userpod%/Downloads.

Il est nécessaire qu'un espace de stockage suffisant soit alors prévu.

Configuration dans Pod

Une fois bbb-recorder installé sur les différents serveurs d'encodage, il reste à configurer le plugin bbb directement dans Pod, via l'édition de fichier custom/settings_local.py :

Configuration dans custom/settings_local.py
##
# BigBlueButton settings
#
# Use of BigBlueButton
USE_BBB = True
# Directory of bbb-recorder plugin (see documentation https://github.com/jibon57/bbb-recorder)
# bbb-recorder must be installed in this directory, on all encoding servers
# bbb-recorder create a directory 'homedir'/Downloads that needs disk space
DEFAULT_BBB_PLUGIN = '/home/%userpod%/bbb-recorder/'
# Directory that will contain the video files generated by bbb-recorder
DEFAULT_BBB_PATH = '/data/www/%userpod%/bbb-recorder/'
# BigBlueButton or Scalelite server URL, where BBB Web presentation and API are
BBB_SERVER_URL = 'https://bbb.univ.fr/'
# BigBlueButton key or Scalelite LOADBALANCER_SECRET
BBB_SECRET_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxx'
# Type of the generated video by default
DEFAULT_BBB_TYPE_ID = 1

Les éléments de paramétrage sont les suivants :

  • USE_BBB : utilisation (True/False) du plugin BBB pour Pod

  • DEFAULT_BBB_PLUGIN : répertoire d'installation de bbb-recorder sur les serveurs d'encodage (cf. paragraphe précédent)

  • DEFAULT_BBB_PATH : répertoire qui contiendra les fichiers vidéos générés par bbb-recorder et les fichiers de logs inhérents à la conversion

  • BBB_SERVER_URL : URL du serveur BigBlueButton ou Scalelite où est positionné les présentations Web et l'API bbb

  • BBB_SECRET_KEY : la clé de sécurité de BigBlueButton (côté BigBlueButton, il est possible d'obtenir cette clé via la commande sudo bbb-conf secret).

  • DEFAULT_BBB_TYPE_ID : type par défaut de la vidéo générée


Concernant le répertoire contenant les fichiers vidéos générés par bbb-recorder (DEFAULT_BBB_PATH), il est à créer manuellement - en même temps que son sous-répertoire des logs -  avec les lignes de commande suivantes; n'hésitez pas à les modifier à votre convenance selon votre architecture système et vos droits :

Création du répertoire DEFAULT_BBB_PATH et son sous-répertoire logs
%userpod%@ts-sun:~/$ mkdir /data/www/%userpod%/bbb-recorder
%userpod%@ts-sun:~/$ mkdir /data/www/%userpod%/bbb-recorder/logs
%userpod%@ts-sun:~/$ chown %userpod%:nginx /data/www/%userpod%/bbb-recorder/logs

Répertoires

Il est vrai qu'une création automatique de ces répertoires auraient pu être possible, mais aux vues des problèmes que cela aurait pu engendre, en lien avec l'architecture et les droits, il m'a paru préférable que l'administrateur de Pod créé es 2 répertoires à la main.

Il sait ce qu'il fait et pourra ainsi choisir son emplacement, ses droits ou autres.

Mise en place du job CRON

Comme expliqué préalablement, le système repose principalement sur un job CRON. Ce job CRON est à installer sur un serveur Pod de votre choix et devra tourner régulièrement (toutes les  5 minutes me paraît un délai correct).

Le script à lancer est positionné dans django_projects/podv2/pod/video/management/commands/bbb.py.

Personnellement, mon CRON est configuré de la sorte :

Job CRON
crontab -e
*/5 * * * * /usr/bin/bash -c 'export WORKON_HOME=/data/www/%userpod%/.virtualenvs; export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.6; cd /data/www/%userpod%/django_projects/podv2; source /usr/bin/virtualenvwrapper.sh; workon django_pod; python manage.py bbb


Voici les explications techniques sur ce que réalise cette tâche :

Exploitation


  • Aucune étiquette