Qu’est-ce qu’OpenWatchParty ?
OpenWatchParty est un plugin Jellyfin qui permet la lecture synchronisée de médias sur plusieurs clients. Regardez des films et des séries avec vos amis, où qu’ils se trouvent.
Contrairement au SyncPlay intégré de Jellyfin, OpenWatchParty utilise un serveur de session externe dédié, offrant une synchronisation plus fiable et une meilleure gestion de la latence.
Architecture
Le système comprend trois composants :
| Composant | Technologie | Rôle |
|---|---|---|
| Plugin Jellyfin | C# | Fournit le JavaScript client et l’interface de configuration |
| Serveur de session | Rust | Gère les salons et relaie les messages par WebSocket |
| Client Web | JavaScript | Intégré à l’interface de Jellyfin, coordonne la lecture |
flowchart LR
A[Client A] <-->|WebSocket| S[Serveur Session<br/>Rust]
B[Client B] <-->|WebSocket| S
C[Client C] <-->|WebSocket| SFonctionnalités
- Synchronisation en temps réel : la lecture reste synchronisée entre tous les participants
- Gestion par salons : créez et rejoignez des salons de visionnage
- Contrôle par l’hôte : le créateur contrôle la lecture (lancement, pause, déplacement)
- Suivi de la latence : mesure et affichage du temps aller-retour (RTT)
- Correction de dérive : ajustement automatique de la vitesse pour maintenir la synchronisation
- Prise en charge de HLS : fonctionne avec les contenus transcodés via HTTP Live Streaming
- Authentification JWT : vérification de l’identité des utilisateurs
Installation
1. Déployer le serveur de session
docker run -d \
-p 3000:3000 \
-e ALLOWED_ORIGINS=https://votre-domaine-jellyfin.com \
ghcr.io/mhbxyz/openwatchparty-session-server:latest
2. Ajouter le dépôt de plugins
Dans le tableau de bord de Jellyfin :
- Aller dans Dashboard > Plugins > Repositories
- Ajouter l’URL du dépôt OpenWatchParty
- Installer le plugin depuis le Catalogue
3. Activer le script client
Dans le tableau de bord de Jellyfin :
- Aller dans Dashboard > Général
- Ajouter le script HTML personnalisé pour activer le client
Comment ça fonctionne
- Synchronisation des horloges : les clients estiment leur décalage avec le serveur au moyen d’une moyenne mobile exponentielle (EMA)
- Création d’un salon : l’hôte crée un salon et partage son code
- Arrivée des participants : les autres rejoignent le salon avec son code
- Événements de lecture : quand l’hôte lance la lecture, met en pause ou change de position, l’action est diffusée à tous
- Détection de dérive : si un client se désynchronise, sa vitesse de lecture est ajustée pour rattraper le retard
Développement
# Cloner le dépôt
git clone https://github.com/mhbxyz/OpenWatchParty.git
cd OpenWatchParty
# Démarrer l'environnement de dev
make up
# Lancer en mode dev
make dev
# Surveiller les changements
make watch
Ressources
- Documentation : https://mhbxyz.github.io/OpenWatchParty/
- GitHub : https://github.com/mhbxyz/OpenWatchParty
- Licence : MIT
Discussion