esup-pod

Arborescence des pages

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.


Avertissement

Cette documentation ne concerne que la version 2.

7.0 et supérieure

X de Pod

.

Sommaire

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 BigBlueButton (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.

Cette solution fonctionne pour BigBlueButton mais également pour Scalelite (cf. https://github.com/blindsidenetworks/scalelite), un système de répartition de charge pour BigBlueButton.

Info
titlePourquoi 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.

De plus, cette solution permet également de n'encoder une présentation Web BigBlueButton qu'une seule fois au maximum; dans le cas où plusieurs modérateurs ont participé à la session BBB, n'importe lequel pourra réaliser cette conversion. Les autres ne pourront plus convertir cette présentation Web, mais ils auront accès à l'information de qui à réaliser cet encodage. Ils pourront alors contacter directement cet utilisateur pour lui demander de partager la vidéo avec eux, voire de les mettre en tant que propriétaire additionnelle de la vidéo.

L'idée de cette solution est de :

...

et non la version 3. X de Pod.

Le module utilisé est supprimé de Pod depuis la version 3.8.2.

D'autres fonctionnalités de Pod peuvent correspondre à vos besoins :

 

Sommaire


Astuce
titleGestion de l'erreur Evaluation failed (Octobre 2021)

En cas d'erreur du type :

Error: Evaluation failed: TypeError: Cannot read properties of null (reading 'duration')
at __puppeteer_evaluation_script__:2:72
at ExecutionContext._evaluateInternal (/home/pod/bbb-recorder/node_modules/puppeteer/lib/ExecutionContext.js:122:13)
at process._tickCallback (internal/process/next_tick.js:68:7)
-- ASYNC --
at ExecutionContext.<anonymous> (/home/pod/bbb-recorder/node_modules/puppeteer/lib/helper.js:111:15)
at DOMWorld.evaluate (/home/pod/bbb-recorder/node_modules/puppeteer/lib/DOMWorld.js:112:20)
at process._tickCallback (internal/process/next_tick.js:68:7)
-- ASYNC --
at Frame.<anonymous> (/home/pod/bbb-recorder/node_modules/puppeteer/lib/helper.js:111:15)
at Page.evaluate (/home/pod/bbb-recorder/node_modules/puppeteer/lib/Page.js:860:43)
at Page.<anonymous> (/home/pod/bbb-recorder/node_modules/puppeteer/lib/helper.js:112:23)
at main (/home/pod/bbb-recorder/export.js:136:38)
at process._tickCallback (internal/process/next_tick.js:68:7)

A priori, en ajoutant une temporisation dans le script export.js de bbb-recorder, le problème ne se présente plus. En attendant une mise à jour de bbb-recorder, il peut-être nécessaire de modifier bbb-recorder/export.js et y ajouter à la ligne 125 :

// Waiting for page loading
await page.waitFor(10000)

D'ailleurs, un commit vient d'être fait dans bbb-recorder pour résoudre ce problème : cf. https://github.com/tdebatty/bbb-recorder/commit/46e7511f035904344a06fc9c346d3f9b8a34ccdf


Info
titleMise à jour en lien avec les présentations Web au format BigBlueButton 2.3 (Juillet 2021) => Résolu en Septembre 2021

Suite à la mise à jour de BigBlueButton ou de Scalelite, il peut arriver que les liens des enregistrements BigBlueButton changent de format.
Ainsi, avant la mise à jour, les liens étaient sous la forme : https://bbb.univ.fr/playback/presentation/2.0/playback.html?meetingId=INTERNAL_MEETING_ID
Après la mise à jour, les liens peuvent se retrouvrer sous la forme : https://bbb.univ.fr/playback/presentation/2.3/INTERNAL_MEETING_ID/?meetingId=INTERNAL_MEETING_ID

Pour gérer ce changement de format vis-à-vis de ce système de publication vers Pod, il est nécessaire de réaliser les modifications suivantes :

  • Remplacer, sur les serveurs d'encodage, le fichier /home/%USERPOD%/bbb-recorder/export.js par le fichier export.js fourni dans ce projet Github : https://github.com/amirhoseinsalimi/bbb-recorder/tree/bbb-v23
    (avertissement) En effet, il semblerait que le projet bbb-recorder (https://github.com/jibon57/bbb-recorder) n'ait pas encore été mis à jour pour prendre en compte ce format 2.3 des enregistrements.

  • Mettre à jour la version de Pod en v2.8.2 ou supérieure.

  • Ajouter à votre settings_local.py : BBB_VERSION_IS_23 = True


Info
titleAstuce en lien avec Scalelite (Juillet 2021) => Résolu en Octobre 2021 (Scalelite v 2.0.1.2)

Cela n'a rien à voir avec le système de publication pour Pod, mais si vous avez un Scalelite et que, parfois, certains enregistrements n'apparaissent pas aux utilisateurs, cela peut provenir de Scalelite.

Après recherche, dans mon cas, il s'avérait que certains enregistrements restaient bloqués, au format .tar, dans le répertoire spool de Scalelite (/mnt/scalelite-recordings/var/bigbluebutton/spool/) et n'étaient alors jamais publiés.

Au final, en mettant à jour la base de données de Scalelite et en le redémarrant, tout est rentré dans l'ordre. Voici les commandes utilisées :

sudo docker exec -t scalelite-api bundle exec rake db:migrate
sudo systemctl restart scalelite.target

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 BigBlueButton (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.

Cette solution fonctionne pour BigBlueButton mais également pour Scalelite (cf. https://github.com/blindsidenetworks/scalelite), un système de répartition de charge pour BigBlueButton.

Info
titlePourquoi 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.

De plus, cette solution permet également de n'encoder une présentation Web BigBlueButton qu'une seule fois au maximum; dans le cas où plusieurs modérateurs ont participé à la session BBB, n'importe lequel pourra réaliser cette conversion. Les autres ne pourront plus convertir cette présentation Web, mais ils auront accès à l'information de qui à réaliser cet encodage. Ils pourront alors contacter directement cet utilisateur pour lui demander de partager la vidéo avec eux, voire de les mettre en tant que propriétaire additionnelle de la vidéo.


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.

Image Added


  • 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.

Image Added


  • 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.

Image Added


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.


Info
titleAucun impact sur BigBlueButton

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


Avertissement
titleLes utilisateurs dans BigBlueButton

Les informations concernant les modérateurs dans BigBlueButton dépendent du client BBB utilisé : Greenlight ou le plugin mod_bigbluebuttonbn pour Moodle.

Le système réalisé n'a été testé qu'avec le plugin mod_bigbluebuttonbn pour Moodle (CASifié, donc les données proviennent de notre annuaire LDAP); cela signifie que les modérateurs sont définis - dans mon cas - sous la forme "Prenom Nom".

Il est possible de paramétrer ce format, via le paramètre BBB_USERNAME_FORMAT (à partir de la version 2.7.2). A l'heure actuelle, les formats "Prenom Nom" ou "Nom Prenom" peuvent être gérés via ce paramétrage.

(avertissement) Ce point est crucial pour que le système fonctionne correctement : une correspondance doit exister sur le "Prenom Nom" ou "Nom Prenom" (selon la configuration BBB_USERNAME_FORMAT) des modérateurs de BigBlueButton et le "Prenom Nom" des utilisateurs dans la base de données de Pod.

(question) A priori, cela devrait pouvoir fonctionner avec Greenlight si celui-ci est configuré pour utiliser l'annuaire LDAP de l'établissement et les champs givenName et sn.

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.


Info
titlePlugin 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
(coche) 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 entre 4 et 6 vCPU + 4 Go RAM
(coche)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).

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)

Bloc de code
languagebash
titleInstallation 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).

Bloc de code
languagebash
titleInstallation 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.

Bloc de code
languagebash
titleCré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


Avertissement

Si bbb-recorder n'a pas été installé avec le bon utilisateur (%userpod%), les fichiers vidéos générés ne seront sûrement pas accessibles par l'utilisateur Pod (%userpod) et ne pourront alors être encodés par les serveurs d'encodage.

Dans les faits, cela se traduit par un 1° encodage réussi : la présentation Web de BBB sera convertie en fichier vidéo, mais ce fichier vidéo ne sera pas accessible à Pod et ne pourra être converti en vidéo Pod.

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

Image Removed

  • 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.

Image Removed

  • 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.

Image Removed

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.
Info
titleAucun impact sur BigBlueButton

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

Avertissement
titleLes utilisateurs dans BigBlueButton

Les informations concernant les modérateurs dans BigBlueButton dépendent du client BBB utilisé : Greenlight ou le plugin mod_bigbluebuttonbn pour Moodle.

Le système réalisé n'a été testé qu'avec le plugin mod_bigbluebuttonbn pour Moodle (CASifié, donc les données proviennent de notre annuaire LDAP); cela signifie que les modérateurs sont définis - dans mon cas - sous la forme "Prenom Nom".

Il est possible de paramétrer ce format, via le paramètre BBB_USERNAME_FORMAT (à partir de la version 2.7.2). A l'heure actuelle, les formats "Prenom Nom" ou "Nom Prenom" peuvent être gérés via ce paramétrage.

(avertissement) Ce point est crucial pour que le système fonctionne correctement : une correspondance doit exister sur le "Prenom Nom" ou "Nom Prenom" (selon la configuration BBB_USERNAME_FORMAT) des modérateurs de BigBlueButton et le "Prenom Nom" des utilisateurs dans la base de données de Pod.

(question) A priori, cela devrait pouvoir fonctionner avec Greenlight si celui-ci est configuré pour utiliser l'annuaire LDAP de l'établissement et les champs givenName et sn.

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.
Info
titlePlugin 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.

...

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

...

(info) 1 stream nécessite entre 4 et 6 vCPU cores + 4 Go RAM
(coche)possibilité de faire plusieurs streams sur une même VM
(ampoule)
le fichier vidéo fait ~19Mo par minute, en mkv

...

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

...

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)

Bloc de code
languagebash
titleInstallation 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).

Bloc de code
languagebash
titleInstallation 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.

Bloc de code
languagebash
titleCré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.

Bloc de code
languagetext
titleEdition 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) :

Bloc de code
languagetext
const BBBUrl = "https://xxxx.umontpellier.fr/bigbluebutton/", 
BBBSalt = "xxxxxxxxxxxxxxxxxxxx", 
joinName = "recorder";

...

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 (sur les encodeurs et sur le frontal) :

Bloc de code
languagetext
titleConfiguration 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'
# Username format in BBB
BBB_USERNAME_FORMAT = 'first_name last_name'
# Type of the generated video by default
DEFAULT_BBB_TYPE_ID = 1
# Number of days before removal the meetings (and associated users) not already published
# To not remove old meetings, set 0 value
BBB_NUMBER_DAYS_BEFORE_DELETE = 0

...

Bloc de code
languagebash
titleCré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 mkdir /data/www/%userpod%/bbb-recorder/logs
%userpod%@ts-sun:~/$ chown %userpod%:www-data /data/www/%userpod%/bbb-recorder/logs
# Ou, selon l'environnement : %userpod%@ts-sun:~/$ chown %userpod%:nginx /data/www/%userpod%/bbb-recorder/logs

...

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 correcttoutes les 5 minutes me paraît un délai correct).

(info) Un délai de 5 minutes est possible en cas d'utilisation du système de publication des présentations Web, mais il est préférable d'utiliser un délai de 2 minutes pour le système de diffusion de webinaires (cf. https://www.esup-portail.org/wiki/x/BgApOQ).

Le script à lancer est positionné dans django_projects/podv2/pod/video/management/commands/bbb.py et permet de gérer les enregistrements effectués par BigBlueButton.

...

Dans le cas normal, où tout se passe bien, ce système ne devrait pas engendrer d'exploitation particulière et vous ne recevrez d'emails de la part du système qu'en cas d'erreurs (typiquement si le serveur BigBlueButton ou Scalelite ne répond plus...).

Cependant, une interface d'administration a été prévue afin de suivi des sessions BigBlueButton mais également pour réaliser l'exploitation en cas d'incidents.

L'interface d'administration

Via l'administration de Pod, vous aurez accès à un nouveau menu, BBB, qui contient les options Sessions et Utilisateurs.

Image Removed

Les sessions BigBlueButton

Voici l'interface de listing des sessions réalisées dans BigBlueButton, et récupérées via le job :

Image Removed

Il est possible de modifier les données si nécessaire.

Image Removed

...

titleExploitation

...

engendrer d'exploitation particulière et vous ne recevrez d'emails de la part du système qu'en cas d'erreurs (typiquement si le serveur BigBlueButton ou Scalelite ne répond plus...).

Cependant, une interface d'administration a été prévue afin de suivi des sessions BigBlueButton mais également pour réaliser l'exploitation en cas d'incidents.

L'interface d'administration

Via l'administration de Pod, vous aurez accès à un nouveau menu, BBB, qui contient les options Sessions et Utilisateurs.

Image Added


Les sessions BigBlueButton

Voici l'interface de listing des sessions réalisées dans BigBlueButton, et récupérées via le job :

Image Added

Il est possible de modifier les données si nécessaire.

Image Added


Astuce
titleExploitation

Par exemple, via cette interface, il est possible de relancer le processus global pour cette session en modifiant l'étape de l'encodage à 0 et en ne choisissant aucun utilisateur (dans la liste de sélection : ------). Suite à ces changements, il sera possible de republier la présentation Web.

Nouveauté de la version 2.8 de Pod

(info) Il est maintenant possible à un administrateur de réencoder une session BigBlueButton qui a déjà été encodée par un utilisateur.

Pour ce faire, il suffit de sélectionner le ou les sessions BBB à réencoder dans le module d'administration et d'utiliser la fonction de réencodage :

Image Added

(avertissement) Réencoder une session qui n'a pas déjà été encodée par un utilisateur ne fonctionnera pas : l'idée de cette fonctionnalité est de permettre à un administrateur de réencoder une session en cas de problème quelconque.


Les utilisateurs BigBlueButton

Voici l'interface de listing des modérateurs de sessions dans BigBlueButton, et récupérées via le job :

Image Modified

Il est possible de modifier les données si nécessaire.

...

Astuce
titleExploitation

Par exemple, via cette interface, il est possible d'affecter un utilisateur à une session, voire modifier une correspondance si celle-ci n'a pas été trouvée ou est erronée.

Exploitation du script lancé par le job CRON

Si nécessaire, il est possible de voir les traitements réalisés par le script - qui doit normalement être exécuté via un job CRON.

Pour ce faire :

  • soit il faut configurer Pod pour être en mode debug (cf. settings_local.py).

    (avertissement) Attention : le mode debug ne doit pas être activé dans un environnement de production.

  • soit modifier directement le script /django_projects/podv2/pod/video/management/commands/bbb.py pour qu'il affiche directement les traitements réalisés (cf. fonction print_if_debug).

Il ne reste plus qu'à exécuter ce script /django_projects/podv2/pod/video/management/commands/bbb.py manuellement via la commande python manage.py bbb main :

Bloc de code
languagebash
titleExécution du script manuellement, compte %userpod%
cd /data/www/%userpod%/django_projects/podv2
 workon django_pod
 python manage.py bbb main

En mode débug, le script affiche l'ensemble des traitements réalisés :

Exploitation courante

Ce système utilise les différents fichiers de logs suivants :

  • Fichier de logs Celery : le nom de ce fichier de logs - disponible sur les serveurs d'encodage - dépend de votre configuration (worker), mais typiquement, il s'agit de : /var/log/celery/worker1.log

    Ce fichier permettra de surveiller l'encodage et des présentations Web BigBlueButton et des encodages standards.

  • Fichier de logs en lien avec bbb-recorder : pour chaque encodage de la présentation Web BigBlueButton, un fichier de logs est créé.

    Ce fichier de logs est créé dans le répertoire configuré via DEFAULT_BBB_PATH/logs (dans mon cas: /data/www/%userpod%/bbb-recorder/logs).

    A chaque encodage, un fichier est généré; son nom correspondant à l'identifiant interne (internal_meeting_id) de BigBlueButton de la session concernée.

    Vous pouvez utiliser la base de données ou l'interface d'administration pour retrouver cette information.