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

future version de Pod v2.8, prévue en avril 2021.

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

Cependant, l'une des plus grosses contraintes de BigBlueButton concerne la limite de 100 étudiants par session (cf. https://docs.bigbluebutton.org/support/faq.html#how-many-simultaneous-users-can-bigbluebutton-support).

Dans la plupart des cas, cette limite de 100 étudiants par session n'est pas un blocage, mais dans certains cas bien précis - par exemple, des cours magistraux pour des L1 - cette limite devient bloquante à l'utilisation de BigBlueButton.

Solution

Pour résoudre cette problématique, je suis parti d'une solution mise en place à l'Université Polytechnique Hauts-de-France et l'ai modifié pour l'intégrer totalement dans Pod v2.

version v2.X de Pod et non la version 3.X de Pod.

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

Une fonctionnalité similaire a été développée pour Pod v3 : 

Sommaire


Astuce
titleMise à jour du script bbb-pod-live.php

Le script pod/scripts/bbb-pod-live.php a été mis à jour dans la version v2.8.2 de Pod. Les modifications réalisées sont les suivantes :

  • Modification du nom du diffuseur créé : les diffuseurs créés par ce script commenceront par [BBB] et non (BBB) (cela permet d'éviter des problèmes en lien avec l'API Rest).
  • Il est maintenant possible de streamer une session BigBlueButton dont le nom contient une quote.
  • Un email est envoyé aux administrateurs en cas de démarrage d'un direct.

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

Cependant, l'une des plus grosses contraintes de BigBlueButton concerne la limite de 100 étudiants par session Cette solution fonctionne pour BigBlueButton mais également pour Scalelite (cf. https://githubdocs.bigbluebutton.comorg/blindsidenetworks/scalelite), un système de répartition de charge pour BigBlueButton.

L'idée de cette solution est de :

...

Avertissement

Il ne faut pas que l'utilisateur utilise de salles privées dans BigBlueButton. En effet, le système de salles privées de BigBlueButton ouvre des popups, et il pourrait arriver que le direct n'affiche que l'appel de la popup.

Image Removed

Image Removed

Il faut également que l'utilisateur mette fin à la réunion pour que le direct s'arrête (une déconnexion n'est pas suffisante et le direct continue alors).

Image Removed

...

Enregistrer la session dans Mes vidéos : Cette option permet l'enregistrement de la vidéo du direct en même temps. Cela signifie qu'une fois le direct réalisé, le fichier vidéo sera automatiquement publié en mode Brouillon pour cet utilisateur et sera alors mis automatiquement dans la file d'attente pour encodage.

Info

Cette option peut être désactivée dans le paramétrage de Pod et ne sera alors pas affiché aux utilisateurs (cf. explications techniques ci-dessous).

support/faq.html#how-many-simultaneous-users-can-bigbluebutton-support).

Dans la plupart des cas, cette limite de 100 étudiants par session n'est pas un blocage, mais dans certains cas bien précis - par exemple, des cours magistraux pour des L1 - cette limite devient bloquante à l'utilisation de BigBlueButton.

Solution

Pour résoudre cette problématique, je suis parti d'une solution mise en place à l'Université Polytechnique Hauts-de-France et l'ai modifié pour l'intégrer totalement dans 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.

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 pour les insérer dans la base de données de Pod.
    Cf. le système de publication des présentations Web de BigBlueButton vers Podv2 : https://www.esup-portail.org/wiki/x/AgCBNg

  • Traiter ces données pour permettre aux utilisateurs, connectés dans Pod, de pouvoir réaliser un direct de leur session BigBlueButton en cours,



    Avertissement

    Il ne faut pas que l'utilisateur utilise de salles privées dans BigBlueButton. En effet, le système de salles privées de BigBlueButton ouvre des popups, et il pourrait arriver que le direct n'affiche que l'appel de la popup.

    Image Added

    Image Added

    Il faut également que l'utilisateur mette fin à la réunion pour que le direct s'arrête (une déconnexion n'est pas suffisante et le direct continue alors).

    Image Added



  • Pour réaliser ce direct, l'utilisateur devra valider les options possibles en validant un formulaire :

    Image Added

    Ces options sont les suivantes :

    • Accès restreint : Mettre l'accès restreint permet que le direct ne soit accessible qu'aux utilisateurs authentifiés, typiquement via le système d'authentification CAS de l'université. Sans accès restreint, le direct peut être accessible à tous.

    • Affichage du tchat public : En cas d'activation, le tchat public sera affiche dans la partie gauche du direct.

    • Enregistrer la session dans Mes vidéos : Cette option permet l'enregistrement de la vidéo du direct en même temps. Cela signifie qu'une fois le direct réalisé, le fichier vidéo sera automatiquement publié en mode Brouillon pour cet utilisateur et sera alors mis automatiquement dans la file d'attente pour encodage.

      Info

      Cette option peut être désactivée dans le paramétrage de Pod et ne sera alors pas affiché aux utilisateurs (cf. explications techniques ci-dessous).


    • Activer le tchat : Via cette option, un tchat sera affiché dans la page de ce direct de Pod, sous la vidéo en direct. Les messages envoyés dans le tchat de cette page de direct se retrouveront dans le tchat public de BigBlueButton. Ainsi, les étudiants qui consultent la page de direct pourront communiquer avec l'enseignant et autres usagers de BigBlueButton.

      Info

      Pour informations, seuls les utilisateurs authentifiés sur la page de direct pourront envoyer des messages, même si le direct est accessible à tous.

      Non authentifié, l'utilisateur obtiendra ce message :

      Image Added

      Une fois authentifié, l'utilisateur pourra envoyer un message :

      Image Added

      Dans BigBlueButton, le nom de l'utilisateur qui a envoyé le message sera bien entendu affiché :

      Image Added


    Une fois le formulaire validé, le direct sera lancé en moins d'une minute.

    Image Added
  • Les étudiants pourront accéder au direct créé automatiquement, via l'onglet des directs de Pod.

    Image Added

    Info

    Le système va créer automatiquement un diffuseur (terminologie Pod) dont le nom correspond à une concaténation de (BBB) et du nom de la session dans BigBlueButton.

    Bien entendu, ce diffuseur sera automatiquement supprimé lors de l'arrêt de la session BigBlueButton.


Remarques importantes


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. 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 diffusion de la session BigBlueButton en direct

Pour diffuser une session BigBlueButton en direct, 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 2 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 et qui permet également une diffusion en direct (flux RTMP) d'un cours BigBlueButton.
  • 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.


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


bbb-recorderBigBlueButton-liveStreaming
Exporte un cours BBB en direct live(coche)(coche)
Enregistre un cours BBB en vidéo(coche) 
format webm, mp4
(avertissement)
peut enregistré le cours qu'il publie en live au format mkv
Indépendance vis-à-vis de BigBlueButton(coche)
peut-être installé sur n'importe quel serveur
(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
(coche) vidéo
(coche) partage d'écran
(coche) chat
(coche) whiteboard
Possibilité de chat depuis la page de direct avec BBB(moins)(coche)
Possibilité de faire plusieurs streams sur une même VM(question)(coche)
TechnologiesNodeJS, xvfb, Chrome, ffmpeg, shellDocker, python, xvfb, ffmpeg, shell
Mise à jour régulière(coche)(coche)
Notion de charge

(question) 

(ampoule)Le fichier vidéo fait entre 2 et 4Mo par minute, en webm ou mp4

(info) 1 stream nécessite 4-6 vCPU + 4 Go RAM

(ampoule)le fichier vidéo fait ~19Mo par minute, en mkv

Aux vues des besoins, et en particulier suite à la possibilité d'ajouter un tchat public à la page de direct, j'ai alors choisi BigBlueButton-liveStreaming comme solution pour la diffusion de sessions BigBlueButton en direct.

De plus, l'université Polytechnique Hauts-de-France avait déjà développé un système (reposant sur un script Bash) utilisant également BigBluButton-liveStreaming, ce qui montre que ce plugin correspond bien aux besoins.

Installation et configuration

Prérequis

Techniquement, la solution repose sur :

  • Le projet Github BigBlueButton-liveStreaming: installé sur les serveurs bbb-pod-live (sous la forme de containers Docker).
    https://github.com/aau-zid/BigBlueButton-liveStreaming
  • Un serveur de streaming pour la publication RTMP reposant sur RTMP Nginx (cf. documentation https://www.esup-portail.org/wiki/x/BgC8KQ)

  • Le système existant de publication des présentations Web de BigBlueButton vers Pod (CRON job, plugin BBB).

  • De nouvelles API REST pour Pod.

  • Un script PHP (CRON job) pour le démarrage/arrêt des directs, création/suppression des diffuseurs…
    • Totalement indépendant des serveurs de Pod et de BigBlueButton.
    • Peut être installé sur des serveurs spécifiques bbb-pod-live (load balancing simpliste).
    • Ce script PHP peut gérer plusieurs instances de BigBlueButton-liveStreaming.

Installation et configuration à réaliser sur les serveurs bbb-pod-live

Installation des prérequis de BigBlueButton-liveStreaming

Pour installer les prérequis de BigBlueButton-liveStreaming, il suffit de consulter la documentation officielle du projet : https://github.com/aau-zid/BigBlueButton-liveStreaming

Au final, il suffit d'avoir Docker et Docker-compose qui tournent sur cette machine bbb-pod-live.

Info

Il n'est pas utile d'installer BigBlueButton-liveStreaming à ce stade. C'est le script PHP qui installera automatiquement BigBlueButton-liveStreaming et qui initialisera sa configuration.

Installation Docker et Docker-compose sous CentOS 7

Personnellement, sous Cent OS 7, j'ai utilisé les documentations suivantes : 

Au final, voici les commandes utilisées.

Installation Docker
Astuce
titleInstallation de Docker sous CentOS 7

#Anciennement
# sudo yum check-update
#curl -fsSL https://get.docker.com/ | sh

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# Installation de la version 20.10.5
#La version 20.10.6 pose problème au serveur n'ayant pas d'adresse IP v6 (Error starting userland proxy: listen tcp6 [::]:9982: socket: address family not supported by protocol) cf. https://forums.docker.com/t/ipv6-disabled-on-my-computer-but-docker-network-seems-looking-for-it/107299
sudo yum install docker-ce-20.10.5 docker-ce-cli-20.10.5 containerd.io

sudo systemctl enable docker && sudo systemctl start docker

Installation Docker-compose
Astuce
titleInstallation de Docker-compose sous CentOS 7

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

docker-compose --version

Gestion des droits

Ces droits permettent de pouvoir lancer docker sans sudo et d'éviter l'erreur de type Permission denied.

Astuce
titleGestion des droits sous CentOS 7

chown %USER% /usr/local/bin/docker-compose -R

#Si le groupe docker n'existe pas, on peut le créer

sudo groupadd docker

#Ajout de l'utilisateur à ce groupe

sudo usermod -aG docker %USER%

#Astuce permettant d'être sûr de ne plus avoir de problèmes de droit

sudo chmod 666 /var/run/docker.sock

(avertissement) Après avoir ajouté le user au groupe docker, ne pas oublier de fermer sa session et de se reconnecter pour que cela soit pris en compte.


Installation Docker et Docker-compose sous Ubuntu 20.04


Astuce
titleInstallation de Docker et Docker-compose sous Ubuntu 20.04

Sous Ubuntu 20.04, j'ai utilisé la documentation suivante : https://docs.docker.com/engine/install/ubuntu/

Ce qui donne :

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo docker run hello-world
docker -v
sudo apt install docker-compose

Activer le tchat : Via cette option, un tchat sera affiché dans la page de ce direct de Pod, sous la vidéo en direct. Les messages envoyés dans le tchat de cette page de direct se retrouveront dans le tchat public de BigBlueButton. Ainsi, les étudiants qui consultent la page de direct pourront communiquer avec l'enseignant et autres usagers de BigBlueButton.

Info

Pour informations, seuls les utilisateurs authentifiés sur la page de direct pourront envoyer des messages, même si le direct est accessible à tous.

Non authentifié, l'utilisateur obtiendra ce message :

Image Removed

Une fois authentifié, l'utilisateur pourra envoyer un message :

Image Removed

Dans BigBlueButton, le nom de l'utilisateur qui a envoyé le message sera bien entendu affiché :

Image Removed

...

Info

Le système va créer automatiquement un diffuseur (terminologie Pod) dont le nom correspond à une concaténation de (BBB) et du nom de la session dans BigBlueButton.

Bien entendu, ce diffuseur sera automatiquement supprimé lors de l'arrêt de la session BigBlueButton.

Remarques importantes

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. 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 diffusion de la session BigBlueButton en direct

Pour diffuser une session BigBlueButton en direct, 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 2 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 et qui permet également une diffusion en direct (flux RTMP) d'un cours BigBlueButton.
  • 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.

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

...

(question) 

(ampoule)Le fichier vidéo fait entre 2 et 4Mo par minute, en webm ou mp4

...

(info) 1 stream nécessite 4-6 vCPU + 4 Go RAM

(ampoule)le fichier vidéo fait ~19Mo par minute, en mkv

Aux vues des besoins, et en particulier suite à la possibilité d'ajouter un tchat public à la page de direct, j'ai alors choisi BigBlueButton-liveStreaming comme solution pour la diffusion de sessions BigBlueButton en direct.

De plus, l'université Polytechnique Hauts-de-France avait déjà développé un système (reposant sur un script Bash) utilisant également BigBluButton-liveStreaming, ce qui montre que ce plugin correspond bien aux besoins.

Installation et configuration

Prérequis

Techniquement, la solution repose sur :

...

  • Totalement indépendant des serveurs de Pod et de BigBlueButton.
  • Peut être installé sur des serveurs spécifiques bbb-pod-live (load balancing simpliste).
  • Ce script PHP peut gérer plusieurs instances de BigBlueButton-liveStreaming.

Installation et configuration à réaliser sur les serveurs bbb-pod-live

Installation des prérequis de BigBlueButton-liveStreaming

Pour installer les prérequis de BigBlueButton-liveStreaming, il suffit de consulter la documentation officielle du projet : https://github.com/aau-zid/BigBlueButton-liveStreaming

Au final, il suffit d'avoir Docker qui tourne sur cette machine bbb-pod-live.

Info

Il n'est pas utile d'installer BigBlueButton-liveStreaming à ce stade. C'est le script PHP qui installera automatiquement BigBlueButton-liveStreaming et qui initialisera sa configuration.

Astuce
titleInstallation de Docker sous CentOS 7

Personnellement, sous Cent OS 7, j'ai utilisé les documentations suivantes : 

Au final, voici les commandes utilisées :

sudo yum check-update

curl -fsSL https://get.docker.com/ | sh
sudo systemctl start docker
sudo systemctl status docker
sudo systemctl enable docker

sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

docker-compose --version

chown %USER% /usr/local/bin/docker-compose -R

En cas d'erreur type Permission denied :

sudo groupadd docker

sudo usermod -aG docker %USER%



Avertissement
titleInformations importantes concernant bigbluebutton-liveStreaming

La solution reposant sur le projet Github bigbluebutton-liveStreaming, il est indispensable de s'assurer que ce dernier fonctionne correctement avant d'installer bbb-pod-live.

Pour ce faire, le mieux est de vérifier, au plus tôt, qu'il n'y ait pas de problème en lien avec ce projet et de réaliser un test simple, dès que possible, en suivant la documentation fournie :  https://github.com/aau-zid/BigBlueButton-liveStreaming

Pour informations, lors de l'exécution de la commande docker-compose up -d, si vous obtenez une erreur de ce style : ERROR: Couldn't connect to Docker daemon at http+docker://localhost - is it running?

Cela signifie que docker nécessite d'être exécuté avec des privilèges. Dans ce cas, 2 possibilités :

  • faire en sorte de pouvoir exécuter docker avec le user connecté.

  • exécuter sudo docker-compose up -d. Par contre, dans ce cas, il sera nécessaire de faire lancer le script bbb-pod-live.php via un CRON installé sous le compte root.

...

Info
titleRépertoire bbb-pod-live

Ce répertoire bbb-pod-live va contenir les différentes instances de BigBlueButton-liveStreaming, qui peuvent contenir les vidéos enregistrées (lorsque l'enseignant a sélectionné l'enregistrement du direct).

Il faut donc prévoir un stockage suffisant (typiquement un minimum de 5Go par instance de BigBlueButton-liveStreaming souhaitée).

 

  • Vérifier qu'il y ait bien le script bbb-pod-live.php et le fichier docker-compose.default.yml dans ce répertoire, avec les bons droits utilisateurs.

...

Fichier docker-compose.yml

 

(avertissement) Il est primordial de ne pas modifier le fichier docker-compose.default.yml : il servira de modèle pour les containers bbb-liveStreaming.

 

Lors de la première exécution, le fichier de référence docker-compose.default.yml va être copié en tant que fichier docker-compose.yml  et sera positionné dans chaque répertoire bbb-live-streaming créé :

...

Bloc de code
languagebash
titleJob CRON
crontab -e
*/1 * * * * /usr/bin/bash -c 'cd /home/user%USER%/bbb-pod-live/; php -f ./bbb-pod-live.php'

...

  • soit il faut configurer Pod pour être en mode debug (cf. settings_local.py).
    (avertissement)(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).

...