Sous le capot

Docker & les serveurs

Studio Local n’est pas une application unique : c’est un petit centre de diffusion complet installé sur votre machine. Cette page ouvre le capot — ce qui tourne, pourquoi, et comment tout se met en route.

Vous n’avez rien à faire de tout ceci

Studio Local démarre, surveille et arrête ces services tout seul. Cette page existe pour comprendre ce qui se passe, diagnostiquer un démarrage qui coince, et savoir ce que votre machine héberge réellement. Aucune commande n’est nécessaire en usage normal.

Pourquoi plusieurs serveurs ?

Faire de la visioconférence temps réel, c’est trois métiers très différents :

Aucun logiciel unique ne fait bien les trois. Studio Local assemble donc des briques éprouvées, chacune spécialiste de son métier, et les fait tourner ensemble sur votre machine.

La différence avec un studio en ligne

Chez un service cloud, ces briques tournent dans le datacenter du prestataire, et vos flux y transitent. Ici, elles tournent chez vous. C’est le même type d’infrastructure — simplement, elle vous appartient.

Docker, en deux minutes

Ces serveurs sont des logiciels exigeants : chacun réclame une version précise de ses dépendances, parfois incompatibles entre elles. Les installer directement sur Windows serait un cauchemar de maintenance.

Docker résout ce problème en emballant chaque serveur dans un conteneur : une boîte scellée qui contient le logiciel et tout ce dont il a besoin. La boîte fonctionne à l’identique sur toutes les machines, et n’installe rien dans votre Windows.

TermeCe que c’est
ImageLe modèle figé d’un serveur, téléchargé une fois. Comme un fichier d’installation.
ConteneurUne instance de ce modèle en train de tourner. Comme un programme lancé.
VolumeUn dossier qui survit au conteneur — les données qu’on veut garder.
ComposeLe fichier qui décrit l’ensemble des conteneurs et leurs liens, pour tout démarrer d’un coup.
RéseauLe réseau privé virtuel où les conteneurs se parlent entre eux.
Trois bénéfices concrets pour vous

Isolation : un serveur qui plante n’emporte pas Windows avec lui. Reproductibilité : la version qui marche chez vous est exactement celle qui marche ailleurs. Propreté : désinstaller Studio Local ne laisse pas des services fantômes dans votre système.

Les quatre conteneurs

Studio Local fait tourner exactement quatre conteneurs. Les voici, dans l’ordre d’importance.

1. LiveKit — le distributeur de flux

C’est le cœur. LiveKit est un SFU (Selective Forwarding Unit) : un serveur qui reçoit la vidéo de chaque participant et la redistribue aux autres, sans la décoder ni la ré-encoder.

Pourquoi un SFU et pas une connexion directe ?

En connexion directe, chaque participant envoie sa caméra à tous les autres : avec 5 personnes, chacun envoie 4 flux en montée. Une connexion domestique ne suit pas. Avec un SFU, chacun n’envoie qu’une seule fois, au serveur, qui se charge de la distribution. C’est ce qui rend possible une émission à plusieurs sur une ligne ordinaire.

PortUsage
7880API et WebSocket — la signalisation, c’est-à-dire la négociation d’entrée en session.
7881WebRTC en TCP — solution de repli quand l’UDP est bloqué.
5349TURN chiffré, pour les invités derrière un réseau restrictif.
30000-30020Les flux audio et vidéo eux-mêmes, en UDP.
Pourquoi de l’UDP pour la vidéo

L’UDP ne retransmet pas les paquets perdus. En temps réel, c’est une qualité : une image d’il y a deux secondes n’intéresse plus personne, mieux vaut passer à la suivante. Le TCP, lui, insiste jusqu’à livrer — excellent pour un fichier, désastreux pour un direct, où l’insistance se transforme en latence qui s’accumule.

La plage de ports est volontairement courte — vingt ports au lieu des milliers habituels. La raison est pratique : les box domestiques plafonnent le nombre de redirections automatiques qu’elles acceptent. Vingt ports suffisent largement à une émission, et passent partout.

2. Redis — la mémoire de travail

LiveKit a besoin d’un endroit rapide pour noter qui est connecté, dans quelle session, avec quelles permissions. Redis est une base de données qui garde tout en mémoire vive : les réponses sont quasi instantanées.

Elle est partagée entre LiveKit et le service d’enregistrement, ce qui leur permet de savoir en permanence ce que fait l’autre. Elle écoute sur le port 6379 à l’intérieur du réseau Docker et dispose d’un volume dédié, pour que son état survive à un redémarrage.

Redis n’est pas joignable depuis votre machine

Ce port n’est ouvert qu’entre conteneurs. Redis détient l’état des salles et n’a pas d’authentification : le publier sur l’hôte l’aurait exposé à tout ce qui tourne sur la machine, sans qu’aucun de ses clients en ait besoin.

3. Coturn — le passe-muraille

C’est le service le plus méconnu, et pourtant celui qui décide si votre invité arrive à se connecter.

Deux machines derrière deux box ne peuvent pas se joindre directement : chacune est cachée derrière une adresse partagée. Il faut une négociation, et parfois un intermédiaire. C’est le rôle de Coturn, qui parle deux protocoles :

ProtocoleRôleCoût
STUNDit à chaque machine quelle est son adresse vue de l’extérieur, pour qu’elles tentent une connexion directe.Négligeable — le trafic ne passe pas par lui.
TURNSert de relais quand la connexion directe échoue. Tout le flux transite par lui.Consomme votre bande passante deux fois.
Le relais est un dernier recours

Une connexion relayée fonctionne, mais elle coûte cher : le flux monte chez vous puis redescend. C’est ce qui se produit quand un invité est sur un réseau d’entreprise verrouillé. Si toutes vos connexions passent par le relais, c’est généralement le signe que la configuration réseau de votre box n’est pas complète.

Coturn écoute sur 3478 (en UDP et en TCP) et dispose de sa propre plage de relais, 40000-40020.

4. Egress — l’enregistreur

Egress est le service officiel d’extraction de LiveKit. Il rejoint votre session comme un participant invisible, compose la scène, et l’écrit dans un fichier ou l’envoie vers une plateforme.

Il n’expose aucun port : personne ne s’y connecte, c’est lui qui va chercher ce dont il a besoin. Il écrit directement dans votre dossier d’enregistrements, partagé depuis Windows.

Ce n’est pas le seul chemin d’enregistrement

Egress encode avec le processeur, dans le conteneur. Studio Local dispose aussi d’un encodeur qui tourne hors Docker, directement sur Windows, pour exploiter votre carte graphique — un conteneur n’a pas d’accès simple au moteur d’encodage matériel. C’est le mode GPU décrit dans Streaming & recording.

Le serveur applicatif

Les quatre conteneurs ne servent qu’au transport. L’application elle-même — l’interface, les scènes, les licences, les jeux — tourne en dehors de Docker, dans un serveur Node.js lancé directement par Studio Local.

PortRôle
3000L’application web : la régie, la page d’invitation, les pages de sortie.
3001Un relais interne vers LiveKit.

Pourquoi hors conteneur ? Parce que c’est la partie qui doit toucher Windows : lire vos fichiers, dialoguer avec les composants de capture, piloter l’encodeur matériel. Un conteneur est justement conçu pour ne pas pouvoir faire cela.

La vue d’ensemble

Navigateur (vous)              Navigateur (invité, ailleurs)
        │                                   │
        └──────────────┬────────────────────┘
                       │  HTTPS
                 ┌─────▼─────┐
                 │   Caddy   │  ports 80 / 443
                 └─────┬─────┘
            ┌──────────┴──────────┐
            │                     │
    ┌───────▼───────┐     ┌───────▼───────┐
    │  Node.js      │     │   LiveKit     │  ← SFU
    │  :3000        │     │   :7880       │
    │  l'application│     └───┬───────┬───┘
    └───────┬───────┘         │       │
            │             ┌───▼──┐ ┌──▼─────┐
            │             │Redis │ │ Coturn │
            │             └──────┘ └────────┘
            │                 │
     ┌──────▼──────┐    ┌─────▼─────┐
     │  Encodeur   │    │  Egress   │
     │  GPU        │    │  fichiers │
     │ (hors Docker)│   └───────────┘
     └─────────────┘

     ░░░░ Docker ░░░░  LiveKit · Redis · Coturn · Egress

Le réseau interne

Les quatre conteneurs partagent un réseau privé, avec des adresses fixes plutôt qu’attribuées au hasard.

ConteneurAdresse interne
LiveKit172.18.0.10
Redis172.18.0.11
Coturn172.18.0.12
Egress172.18.0.13
Des adresses identiques sur toutes les machines

C’est un choix de support : quand une installation pose problème, les adresses sont les mêmes partout. Un journal technique venu d’une autre machine se lit sans traduction, et une procédure de diagnostic reste valable pour tout le monde.

Ce qui se passe au démarrage

Lancer Studio Local déclenche une séquence ordonnée. Chaque étape est visible dans la fenêtre de démarrage, ce qui permet de voir précisément où ça bloque le cas échéant.

  1. Nettoyage — les processus d’une session précédente mal fermée sont arrêtés, et le port de l’application est libéré.
  2. Détection réseau — la machine identifie sa propre adresse, puis régénère les fichiers de configuration à partir de modèles. C’est ce qui rend l’installation portable d’une machine à l’autre.
  3. Démarrage des conteneurs — Docker lance les quatre services.
  4. Attente de LiveKit — le shell attend que le serveur réponde vraiment avant de continuer. Démarrer la suite trop tôt donnerait des scènes incapables de se connecter.
  5. Caddy — le point d’entrée HTTPS est lancé s’il ne tourne pas déjà. Voir Caddy & HTTPS.
  6. Serveur applicatif — Node démarre, et le shell interroge son point de santé jusqu’à obtenir une réponse.
  7. Ouverture de la fenêtre — l’interface s’affiche seulement une fois la chaîne complète prête.
L’ordre n’est pas décoratif

Chaque étape attend réellement la précédente. C’est plus lent au lancement, mais cela évite la catégorie de pannes la plus pénible : une interface qui s’ouvre normalement alors qu’un service en dessous n’est pas prêt, et qui échoue seulement au moment où vous lancez le direct.

Les versions sont figées

Aucune image n’est en version « dernière disponible ». Chacune est épinglée à un numéro précis, et les mises à jour sont faites délibérément, après test.

Docker Desktop, onglet Images, avec les conteneurs de Studio Local

Dans Docker Desktop (onglet Images), c’est visible directement dans la colonne Tag : livekit/livekit-server:v1.12.0, livekit/egress:v1.13.0, redis:7.4.7-alpine3.21 — un numéro précis, jamais latest. C’est aussi l’endroit où confirmer que Docker a bien tiré les images de Studio Local, ou pour libérer de l’espace disque si nécessaire.

Coturn est figé autrement, et c’était nécessaire

Il ne portait pas un numéro de version mais un tag edge-debian, qui désigne une image différente selon le jour du téléchargement. Sur le composant qui décide si un invité arrive à se connecter, c’était exactement le risque que cette règle cherche à éviter.

Il est désormais épinglé par empreinte (sha256) : une image précise, identique partout, qui ne peut plus changer sans une décision explicite.

Pourquoi ne pas prendre la dernière version automatiquement

Parce qu’une mise à jour silencieuse d’un serveur de transport peut casser une émission sans prévenir. Un logiciel de production doit être prévisible : la version qui a fonctionné hier doit être celle qui se lance aujourd’hui. Les mises à jour de sécurité sont suivies séparément et intégrées à chaque nouvelle version de Studio Local.

Quand Docker pose problème

SymptômeCause probableCe qu’il faut faire
Le démarrage signale Docker indisponibleDocker Desktop n’est pas lancé, ou pas encore prêt.Lancez-le, attendez qu’il indique être démarré, puis relancez Studio Local.
Un conteneur est signalé absentIl n’a pas démarré ou s’est arrêté.Relancez Studio Local ; la séquence de démarrage les recrée.
Les invités se connectent mais sans imageLes ports de flux ne passent pas.Vérifiez la configuration de votre box. Voir Dépannage.
Le démarrage bloque sur l’attente de LiveKitLe conteneur démarre mais n’arrive pas à écouter.Un autre logiciel occupe déjà son port, ou un VPN capte le trafic local.
Tout fonctionnait, plus rien ne démarreUn arrêt brutal a laissé des processus en place.Redémarrez la machine : le nettoyage de démarrage repart d’un état propre.
Les VPN et les filtres réseau

Un VPN actif, ou un client de filtrage réseau, redirige le trafic local et casse la communication entre les services — qui pourtant tournent tous sur la même machine. C’est une cause de panne fréquente et déroutante, parce que tout semble installé correctement. Studio Local tente d’ailleurs de désactiver certains de ces clients au démarrage.

Ce que cette architecture implique pour vous

ConséquenceDétail
Vos flux ne sortent pasLa vidéo de vos invités arrive chez vous et repart de chez vous. Aucun serveur tiers ne la voit passer.
Aucun abonnement d’infrastructurePas de minutes facturées, pas de quota de participants imposé par un prestataire.
Votre connexion est la limiteC’est votre débit montant qui plafonne le nombre d’invités confortables — pas une offre commerciale.
Les pistes de vos invités vous reviennentLeurs enregistrements en pleine qualité remontent vers votre machine, pas vers le stockage d’un prestataire.
Le diagnostic est à portée de mainTous les journaux sont sur votre disque. Aucun support à contacter pour savoir ce qui s’est passé.