Cette documentation permet de comprendre comment réaliser une publication de vidéos, semi automatisée, depuis un enregistreur - permettant à minima un export FTP - vers la plateforme vidéo Pod v2.
Plus précisément, cette fonctionnalité est accessible depuis la version 2.3 de Pod, sortie en novembre 2019.
A priori, de nombreux enregistreurs, de différentes sociétés - telles que Inwicast, Rapidmooc, Ubicast, Multicam, Kalizee, Extron... - permettent un export FTP des vidéos réalisées et pourraient alors bénéficier de cette fonctionnalité de Pod (en nécessitant peut-être quelques adaptations).
Le principe de publication est le suivant :
Côté enregistreur, avant de réaliser une publication de vidéos vers un serveur FTP, il est nécessaire de réaliser la configuration adéquate, à savoir :
Par exemple, voici à quoi ressemble cet écran de paramétrage pour un enregistreur de type MultiCAM Systems :
Côté Pod, il est également nécessaire de réaliser le paramétrage via :
Plusieurs propriétés sont indispensables pour le paramétrage dans le fichier de configuration :
USE_RECORD_PREVIEW : utiliser ou non la prévisualisation des fichiers sources des enregistrements dans l'interface de revendication.
ALLOW_INSECURE_REQUESTS : Autoriser la requête sur l'application en elle même sans vérifier le certificat SSL
## # Recorder settings # ALLOW_MANUAL_RECORDING_CLAIMING = True ALLOW_RECORDER_MANAGER_CHOICE_VID_OWNER = True DEFAULT_RECORDER_ID = 1 DEFAULT_RECORDER_PATH = '/data/www/%userpod%/uploads/' DEFAULT_RECORDER_TYPE_ID = 3 DEFAULT_RECORDER_USER_ID = 1 RECORDER_SKIP_FIRST_IMAGE = False RECORDER_TYPE =(('video', ('Video')), ('audiovideocast', ('Audiovideocast')),) USE_RECORD_PREVIEW = False PUBLIC_RECORD_DIR = 'records' SELF_REQUESTS_PROXIES = { "http": None, "https": None} ALLOW_INSECURE_REQUESTS = False BASE_URL = 'https://pod.univ.fr/' |
Après avoir fait la configuration adéquate et s'être connecté avec un compte super-utilisateur à l'interface d'administration, nous obtenons un menu Recorder supplémentaire :
Quelques informations concernant ce menu :
Techniquement, nous utilisons le modèle pod/recorder/models.py, classes Recorder, Recording et RecordingFileTreatment, et la page d'administration pod/recorder/admin.py.
Avant de réaliser une publication de vidéo, il est nécessaire de définir - à minima - un enregistreur :
Voici les informations utiles à la saisie d'un enregistreur :
L'enregistreur réalise une copie du fichier vidéo (ce qui peut-être long selon la taille de la vidéo) sur le serveur FTP paramétré, dans le répertoire de publication défini. Ce répertoire doit être positionné dans DEFAULT_RECORDER_PATH.
Par exemple, si nous avons le paramétrage suivant :
Les vidéos seront déposées dans le répertoire : /data/www/%userpod%/uploads/test/ |
A ce niveau là, la publication de la vidéo par l'enregistreur est terminée : le fichier vidéo a été déposé sur le serveur Pod, dans un répertoire bien précis.
Une fois la copie réalisée, un script - qui s'exécute régulièrement grâce à la mise d'un CRON - traite ce fichier vidéo.
Ce script correspond à une commande de gestion des vidéos. Techniquement, il s'agit du script pod/video/management/commands/recorder.py. Il sera appelé via un CRON, mais si nécessaire, il est possible de l'exécuter manuellement via : python manage.py recorder checkDirectory Il est possible d'exécuter ce script en mode débug en modifiant le paramètre DEBUG dans son settings_local. |
Pour réaliser le CRON, voici ce qui a été fait sous le user %userpod% : crontab -e */2 * * * * /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 recorder checkDirectory' |
Pour ce faire, ce script :
Cas d'un enregistreur paramétré avec un gestionnaire. |
Pour permettre la notification au gestionnaire de l'enregistreur, le script va réaliser une requête HTTPS vers l'adresse suivante :
https://[WEB_HOSTNAME]/mediacourses_notify/?recordingPlace=[IP_ADDRESS_UNDERSCORED]&mediapath=[FILENAME.MP4]&key=[HASHKEY]
Exemple de requête : https://xxxxx.umontpellier.fr/mediacourses_notify/?recordingPlace=192_168_1_1&mediapath=file.zip&key=77fac92a3f06....98187e50e5 |
L'URL utilisée correspond à :
A ce niveau là, le fichier vidéo a été déposé sur le serveur Pod et une requête HTTPS a été envoyé.
Techniquement, la requête précédente est traitée par Pod via la vue pod/recorder/views.py, par la fonction recorder_notify().
Cet email est de la forme suivante :
[Pod] Nouvel enregistrement ajouté Bonjour, un nouvel enregistrement est arrivé sur la plateforme "Pod" depuis l'enregistreur "MultiCAM de Polytech". Cordialement |
Le lien présent dans cet email dépend de la configuration du CAS (USE_CAS) dans le fichier custom/settings_local.py.
Une fois l'email reçu, l'utilisateur concerné devra cliquer sur le lien dans cet email.
Ce lien renvoie l'utilisateur - qui doit s'authentifier à ce moment là (si ce n'est déjà fait) - sur le formulaire d'ajout de la vidéo. A partir de ce formulaire il peut également supprimer l'enregistrement (si celui-ci est une erreur par exemple) en cochant la case et en validant le formulaire.
Techniquement, ce formulaire est défini grâce à la page pod/recorder/forms.py, par la classe RecordingForm() ainsi que la vue pod/recorder/templates/recorder/add_recording.html.
Pour un utilisateur de type "staff", avec le paramètre ALLOW_RECORDER_MANAGER_CHOICE_VID_OWNER = False, ce formulaire est de la forme suivante :
Pour un utilisateur de type "staff", avec le paramètre ALLOW_RECORDER_MANAGER_CHOICE_VID_OWNER = True, ce formulaire est de la forme suivante :
Dans ce cas là, le gestionnaire de l'enregistreur peut attribuer la vidéo à un autre utilisateur.
Pour un utilisateur de type "superadmin", ce formulaire est de la forme suivante :
Un utilisateur de type "superadmin" peut, si nécessaire, réaliser le traitement de toutes les vidéos précédemment publiées sur n'importe quel enregistreur.
Le fait de sauvegarder ce formulaire permet le traitement et l'encodage du fichier fourni par l'enregistreur, et de le positionner à l'utilisateur concerné (selon le cas).
Techniquement, nous utilisons le modèle pod/recorder/models.py, classes Recorder, Recording et RecordingFileTreatment, ainsi que la fonction process_recording().
Cette dernière utilise le plugin pod/recorder/plugins/type_audiovideocast.py ou pod/recorder/plugins/type_video.py qui permet la copie des slides (dans le cas de type_audiovideocast.py), ainsi que le traitement et l'encodage de la vidéo publiée par l'enregistreur.
Cas d'un enregistreur paramétré sans gestionnaire et avec utilisation de ALLOW_MANUAL_RECORDING_CLAIMING = True |
Dans cas précis, les utilisateurs ont la possibilité de revendiquer un enregistrement depuis le menu de profil :
Le fait de revendiquer un enregistrement affiche la liste de toutes les vidéos non attribuées :
Un utilisateur de type "superadmin" peut, si nécessaire, supprimer des enregistrements à partir de cette interface.
Si le mode de prévisualisation est activé un bouton apparaît (l’œil sur la capture) pour afficher une fenêtre qui va lire la vidéo source si le format est supporté.
Si le mode de prévisualisation est activé (USE_RECORD_PREVIEW = True), il faut renseigner le chemin public (PUBLIC_RECORD_DIR = 'records') du répertoire de dépôt des enregistrements (DEFAULT_RECORDER_PATH = '/data/www/%userpod%/uploads/') et ajouter dans la conf de NGINX :
|
En revendiquant une vidéo, un formulaire apparaît :
Le fait de sauvegarder ce formulaire permet le traitement et l'encodage du fichier fourni par l'enregistreur, et de se l'affecter.
Une fois les vidéos publiées par l'enregistreur et une fois traitées par Pod, il est possible de suivre ces enregistrements via le module Enregistrements, accessible dans l'interface d'administration.
Il est également possible au super utilisateur d'ajouter manuellement un nouvel enregistrement, correspondant aux fichiers vidéos situés dans le répertoire défini par DEFAULT_RECORDER_PATH et le répertoire de l'enregistreur. Cela peut être utile si la revendication n'est pas activée et qu'un utilisateur n'a pas cliqué sur le lien dans le mail de notification (ce qui signifie que le fichier MP4 (ou ZIP) contenant la vidéo (et les slides) se trouve sur le serveur Pod, mais la vidéo n'a pas été traitée ni encodée). |