L'enregistrement Nextcloud Talk ne fonctionne pas avec la seule application Talk. Il demande un High Performance Backend, puis un service d'enregistrement distinct capable de rejoindre l'appel, de piloter un navigateur et d'encoder le résultat avec FFmpeg. Ce service remet ensuite le fichier à l'instance Nextcloud.
Ce guide explique cette chaîne technique, les secrets à configurer, les ressources à prévoir et la recette à mener avant une réunion réelle. Pour replacer Talk dans l'ensemble de la plateforme, consultez d'abord le guide complet de Nextcloud. L'installation de la signalisation et de la SFU est détaillée séparément dans le guide du High Performance Backend Nextcloud Talk.
De quels composants l'enregistrement Talk dépend-il ?
Le serveur d'enregistrement officiel se comporte comme un participant technique. Il reçoit une demande de l'instance Nextcloud, ouvre Talk dans un navigateur automatisé, rejoint le média via le HPB, capture l'affichage et le son, puis lance FFmpeg. À l'arrêt, il téléverse le fichier vers Nextcloud et le modérateur reçoit une notification.
Cette architecture implique quatre services séparés :
- Instance Nextcloud et application Talk : gèrent la conversation, les droits, la demande d'enregistrement et le stockage final. Vérifiez la compatibilité de version, HTTPS et la capacité d'envoi du fichier.
- High Performance Backend : fournit la signalisation et l'accès aux flux WebRTC. Contrôlez le secret interne, le proxy WebSocket et le chemin média.
- Serveur d'enregistrement : orchestre le navigateur automatisé et la capture. Vérifiez Firefox, geckodriver, PulseAudio, Xvfb et les ressources disponibles.
- FFmpeg : encode le son et la vidéo. Mesurez le codec, la résolution, la charge CPU et l'espace temporaire.
Le serveur d'enregistrement exige donc un HPB opérationnel. Un serveur TURN peut aussi intervenir si le service ne peut pas joindre directement la passerelle WebRTC. Le guide général de Nextcloud Talk présente séparément les salons, invités, appels et fonctions de modération.
Le backend d'enregistrement est un service distinct du HPB
Le HPB distribue les flux et gère la signalisation. Le backend d'enregistrement rejoint ces flux, affiche la réunion dans un navigateur et encode un fichier. Installer l'un n'installe pas automatiquement l'autre.
Faut-il placer l'enregistreur sur le même serveur que le HPB ?
La documentation officielle recommande une machine isolée afin que l'encodage ne concurrence pas la signalisation et la distribution des appels. Firefox, Xvfb, PulseAudio, Selenium et FFmpeg ajoutent aussi des dépendances rarement nécessaires sur un serveur de signalisation.
Une machine virtuelle ou un conteneur convient si le navigateur, les périphériques audio virtuels, la mémoire partagée et le démarrage du service sont configurés correctement. Le serveur d'enregistrement peut être placé ailleurs, à condition d'accéder en HTTPS à Nextcloud et au HPB, puis d'atteindre le chemin média direct ou TURN. Un réseau interne commun avec le HPB simplifie généralement les flux et le filtrage.
Ne dimensionnez pas cette machine à partir du seul nombre de participants. Le coût principal vient de l'encodage et du nombre d'enregistrements simultanés. La documentation donne un exemple de référence, pas une garantie : sur un Ryzen 7 3700X à 8 cœurs et 16 threads, un enregistrement avec les réglages par défaut utilise environ 200 % de CPU, soit l'équivalent de deux cœurs pleinement sollicités. Elle estime également qu'un navigateur unique peut tenir avec 2 Gio de RAM, tout en recommandant une marge pour les réunions chargées et l'évolution des navigateurs.
Utilisez l'outil de benchmark fourni par le projet avant de fixer une capacité. Il lit une vidéo d'entrée et mesure la charge de l'enregistreur avec les codecs et paramètres choisis. Il ne reproduit pas toute la charge WebRTC et navigateur, mais permet de comparer plusieurs réglages sur la même machine.
Comment installer le serveur d'enregistrement officiel ?
Au 14 novembre 2026, la dernière version publiée du dépôt officiel est v0.3.1, datée du 16 octobre 2026. Elle corrige notamment l'envoi des téléversements et l'accès de Firefox aux équipements du réseau local. Vérifiez la release et le changelog au moment du déploiement au lieu de recopier un numéro ancien.
Nextcloud propose des paquets préconstruits à ses clients et documente la construction de paquets pour plusieurs distributions. Sans ce canal, l'installation manuelle part du dépôt officiel. Ses dépendances non Python sont :
- FFmpeg ;
- Firefox, seul navigateur officiellement pris en charge par défaut ;
- geckodriver dans une version compatible avec Firefox ;
- PulseAudio ;
- Xvfb.
L'installation Python documentée est :
git clone https://github.com/nextcloud/nextcloud-talk-recording
python3 -m pip install "file://$(pwd)/nextcloud-talk-recording"
Le service ne doit pas tourner avec le compte root. Créez un compte système dédié avec un répertoire personnel, placez la configuration dans un chemin protégé, puis lancez le programme avec :
nextcloud-talk-recording \
--config /etc/nextcloud-talk-recording/server.conf
Un service systemd doit ensuite démarrer l'enregistreur après le réseau et le relancer selon votre politique d'exploitation. Si vous construisez une image conteneur, ne considérez pas le fichier docker-compose.yml d'exemple comme une image prête pour la production. Le dépôt l'utilise pour construire le service depuis les sources et lui attribue 2 Gio de mémoire partagée, sans publier le port par défaut.
Attention aux navigateurs Snap
Le projet ne prend pas officiellement en charge Firefox ou Chromium installés par Snap pour ce service. Sur Ubuntu 22.04 et versions suivantes, sa documentation prévoit l'emploi du paquet Firefox du PPA Mozilla. Sur Debian, elle fournit aussi une méthode pour récupérer geckodriver via les paquets Ubuntu correspondants.
Cette contrainte vient du lancement automatisé du navigateur par un compte système et par systemd. Un navigateur Snap peut exiger une session PAM et des droits supplémentaires sur le répertoire personnel. Pour limiter les variables, partez des dépendances explicitement prises en charge par la documentation de la version choisie.
Comment configurer Nextcloud et les secrets du backend ?
Le fichier server.conf relie trois périmètres : le service HTTP local, l'instance Nextcloud et le serveur de signalisation. Générez deux secrets différents :
openssl rand -hex 32
openssl rand -hex 32
Le premier authentifie les échanges entre Nextcloud Talk et le serveur d'enregistrement. Le second autorise l'enregistreur à rejoindre le serveur de signalisation comme client interne. Ne réutilisez pas le secret public du HPB ni une valeur d'exemple.
Une configuration minimale ressemble à ceci :
[logs]
level = 20
[http]
listen = 127.0.0.1:8000
[backend]
backends = production-cloud
directory = /var/lib/nextcloud-talk-recording/files
[production-cloud]
url = https://cloud.exemple.fr
secret = SECRET_ENREGISTREMENT_NEXTCLOUD
[signaling]
signalings = production-hpb
[production-hpb]
url = https://signaling.exemple.fr/standalone-signaling
internalsecret = SECRET_CLIENT_INTERNE_HPB
[recording]
browser = firefox
driverPath = /usr/bin/geckodriver
La section du backend doit contenir l'URL exacte de l'instance, y compris son éventuel sous-répertoire. Le même secret est saisi dans Paramètres d'administration > Talk > Backend d'enregistrement. La section de signalisation reprend l'URL déjà configurée dans Talk et la valeur clients.internalsecret du fichier de configuration de nextcloud-spreed-signaling.
Ne confondez pas les deux secrets :
secretdans le backend protège les requêtes entre Nextcloud et l'enregistreur ;internalsecretautorise l'enregistreur auprès de la signalisation.
Le bouton de contrôle dans l'administration Talk vérifie que l'URL du backend répond et affiche sa version. La documentation avertit qu'il ne confirme pas actuellement la correspondance du secret partagé. Un contrôle vert ne remplace donc pas un vrai démarrage et arrêt d'enregistrement.
Le serveur d'enregistrement ne fournit qu'une API HTTP. Placez un reverse proxy HTTPS devant son écoute locale, gardez le port applicatif hors d'Internet et configurez uniquement les adresses réelles du proxy dans app.trustedproxies. N'activez pas backend.allowall en production. Cette option accepte n'importe quel nom d'hôte et le modèle de configuration la qualifie d'extrêmement dangereux.
Où le fichier est-il créé et stocké ?
Pendant la réunion, le fichier reste dans le répertoire temporaire de l'enregistreur. Le réglage par défaut est /tmp, souvent monté en mémoire ou nettoyé au redémarrage. Définissez plutôt backend.directory vers un volume persistant, dimensionné et accessible uniquement au compte du service.
Après l'arrêt, le backend téléverse la vidéo vers Nextcloud. Depuis la version 0.3.0, le projet prend en charge les téléversements découpés. L'API Talk crée alors un partage public protégé, limité à la création dans le dossier d'enregistrement de la conversation, puis le backend envoie les blocs par WebDAV avant de demander l'assemblage et la notification.
Si le téléversement échoue, le fichier reste sur le serveur d'enregistrement jusqu'à son retrait manuel. Sur le répertoire /tmp par défaut, un redémarrage peut donc supprimer la seule copie restante. Supervisez l'espace libre, les erreurs d'envoi et l'âge des fichiers temporaires, puis définissez une procédure de reprise qui ne publie pas le média au mauvais endroit.
Les anciennes voies d'envoi direct restent limitées par upload_max_filesize et post_max_size côté PHP. La documentation recommande encore de vérifier ces valeurs. Une erreur après l'encodage peut donc venir du stockage, du proxy, de PHP ou de l'assemblage WebDAV, pas seulement de FFmpeg.
Quels formats et réglages d'encodage utiliser ?
La configuration par défaut emploie VP8 pour la vidéo, Opus pour l'audio et WebM comme conteneur. Pour un enregistrement audio seul, l'extension par défaut est Ogg. Ces choix peuvent être remplacés par d'autres encodeurs pris en charge par FFmpeg, mais le conteneur doit rester compatible avec les codecs retenus.
Le fichier de configuration fixe par défaut une résolution de 1920 × 1080 et un débit vidéo de 1 Mbit/s avec l'encodeur libvpx. Augmenter la résolution ou durcir les paramètres de qualité accroît la charge, le volume temporaire et la durée de téléversement. Une valeur plus élevée n'améliore pas une source déjà limitée par les caméras, le partage d'écran ou le réseau.
L'outil officiel nextcloud-talk-recording-benchmark permet de tester un fichier d'entrée avec plusieurs options FFmpeg. Mesurez au minimum :
- l'utilisation CPU moyenne et maximale ;
- la mémoire du navigateur et du processus d'encodage ;
- les images perdues pendant le test ;
- la taille produite par minute ;
- le temps nécessaire pour envoyer le fichier vers Nextcloud ;
- la lisibilité d'un partage d'écran contenant du petit texte.
Dimensionnez ensuite le nombre d'enregistrements simultanés à partir du pire cas observé, avec une marge pour Talk, le système et les tâches de fond. Le guide de monitoring Nextcloud avec Prometheus peut servir de base pour l'instance, mais l'enregistreur demande aussi ses propres métriques CPU, mémoire, disque, erreurs et disponibilité HTTP.
Comment gérer le consentement et les droits ?
L'API Talk réserve le démarrage et l'arrêt de l'enregistrement au propriétaire ou à un modérateur. Un invité ne peut pas déclencher l'action. Selon la configuration de la conversation et de l'instance, Talk peut aussi enregistrer les consentements donnés pendant l'appel. La commande suivante permet à l'administration d'interroger ces données pour une conversation :
sudo -E -u www-data php occ talk:recording:consent \
--token TOKEN_DE_LA_CONVERSATION
Cette trace technique ne suffit pas à définir le droit applicable. Avant d'activer la fonction, documentez qui peut enregistrer, comment les participants sont informés, sur quelle base l'organisation conserve le fichier, qui y accède, combien de temps il reste disponible et comment une demande de suppression est traitée.
Un enregistrement peut contenir la voix, l'image, un nom affiché, un partage d'écran et des informations confidentielles. Limitez les modérateurs, protégez le dossier final avec les droits adaptés et évitez les liens publics permanents. La politique doit aussi traiter les invités et les participants qui rejoignent la réunion après son démarrage.
La notification technique ne remplace pas la règle interne
Testez l'information visible dans chaque client réellement utilisé, puis annoncez l'enregistrement avant son démarrage. Conservez uniquement les traces nécessaires et ne présentez pas la fonction comme une preuve automatique de conformité.
Quelle recette valider avant la première réunion ?
Le contrôle d'URL dans Talk ne valide ni les secrets, ni le navigateur, ni FFmpeg, ni le chemin média, ni le téléversement final. Réalisez une réunion pilote avec un modérateur et au moins un autre participant depuis un réseau extérieur.
La documentation officielle propose cette séquence : démarrer l'appel, lancer l'enregistrement, parler quelques secondes avec la vidéo active, arrêter l'enregistrement, attendre la notification, puis ouvrir le fichier. Ajoutez les contrôles suivants :
- vérifier dans les journaux le navigateur et le geckodriver réellement utilisés ;
- confirmer que Selenium n'a pas téléchargé automatiquement un navigateur ou un pilote non maîtrisé ;
- tester une réunion audio seule et une réunion avec vidéo ;
- partager un écran contenant du texte et relire le résultat ;
- contrôler la date, la durée, le propriétaire et le dossier du fichier ;
- simuler un manque d'espace ou un refus de téléversement sur une recette ;
- redémarrer le service, puis vérifier qu'aucun fichier abandonné n'est perdu ;
- contrôler l'information des participants et l'accès au média final.
Un enregistrement bloqué sur « Démarrage » indique souvent un secret différent entre Nextcloud et le backend, ou un certificat refusé. Un démarrage qui échoue peut venir du secret interne de signalisation, du pare-feu, du navigateur ou de FFmpeg. Un fichier qui montre une page sans autres participants révèle plutôt un échec du chemin WebRTC vers la passerelle média ou TURN.
Passez temporairement le niveau de journalisation à 10 pendant la recette, puis revenez à un niveau adapté à la production. Les journaux de débogage peuvent être volumineux et exposer davantage de contexte technique. Reliez toujours l'heure du test entre Talk, l'enregistreur, le proxy et le HPB.
Conclusion
Pour enregistrer une réunion Nextcloud Talk, commencez par un HPB déjà validé, puis déployez l'enregistreur sur une machine isolée. Configurez deux secrets distincts, un proxy HTTPS, un répertoire temporaire persistant et des dépendances navigateur maîtrisées. Mesurez ensuite l'encodage, testez le téléversement et définissez les règles de consentement et de conservation avant toute utilisation réelle.
Découvrir l'offre Nextcloud GaprodEspace collaboratif Nextcloud hébergé en FranceSources officielles
- Documentation d'installation du serveur d'enregistrement Nextcloud Talk
- Dépôt officiel du serveur d'enregistrement
- Version 0.3.1 publiée le 16 octobre 2026
- Configuration de référence du serveur d'enregistrement
- Encodeurs et outil de benchmark
- API du serveur d'enregistrement
- API d'enregistrement de l'application Talk
- Commande de consultation des consentements
- Exemple Docker Compose du projet