<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Synchronisation on mhbxyz.me</title><link>https://mhbxyz.github.io/fr/tags/synchronisation/</link><description>Recent content in Synchronisation on mhbxyz.me</description><generator>Hugo</generator><language>fr</language><lastBuildDate>Mon, 19 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://mhbxyz.github.io/fr/tags/synchronisation/index.xml" rel="self" type="application/rss+xml"/><item><title>OpenWatchParty : synchroniser la lecture malgré la latence</title><link>https://mhbxyz.github.io/fr/articles/openwatchparty-synchroniser-la-lecture-malgre-la-latence/</link><pubDate>Mon, 19 Oct 2026 00:00:00 +0000</pubDate><guid>https://mhbxyz.github.io/fr/articles/openwatchparty-synchroniser-la-lecture-malgre-la-latence/</guid><description>&lt;p&gt;Dans mon &lt;a href="https://mhbxyz.github.io/fr/articles/openwatchparty-visionnage-synchronise-pour-jellyfin/"&gt;premier article sur OpenWatchParty&lt;/a&gt;, je présentais le plugin Jellyfin et son serveur de session Rust. Restait la question la plus difficile : comment faire jouer la même scène au même moment sur plusieurs machines, alors que leurs horloges, leurs réseaux et leurs lecteurs ne réagissent pas de la même façon ?&lt;/p&gt;


&lt;h2 id="se-donner-une-horloge-commune"&gt;Se donner une horloge commune&lt;/h2&gt;
&lt;p&gt;Le serveur ne peut pas supposer que l&amp;rsquo;heure affichée par deux ordinateurs est identique. Le client lui envoie donc un ping horodaté. Au retour, il mesure le temps aller-retour et estime le décalage entre son horloge et celle du serveur. Plusieurs mesures sont lissées pour qu&amp;rsquo;une pointe de latence ne provoque pas un saut brutal.&lt;/p&gt;</description></item><item><title>OpenWatchParty : visionnage synchronisé pour Jellyfin</title><link>https://mhbxyz.github.io/fr/articles/openwatchparty-visionnage-synchronise-pour-jellyfin/</link><pubDate>Mon, 19 Jan 2026 00:00:00 +0000</pubDate><guid>https://mhbxyz.github.io/fr/articles/openwatchparty-visionnage-synchronise-pour-jellyfin/</guid><description>&lt;h2 id="quest-ce-quopenwatchparty-"&gt;Qu&amp;rsquo;est-ce qu&amp;rsquo;OpenWatchParty ?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;OpenWatchParty&lt;/strong&gt; 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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;


&lt;h2 id="architecture"&gt;Architecture&lt;/h2&gt;
&lt;p&gt;Le système comprend trois composants :&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Composant&lt;/th&gt;
 &lt;th&gt;Technologie&lt;/th&gt;
 &lt;th&gt;Rôle&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Plugin Jellyfin&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;C#&lt;/td&gt;
 &lt;td&gt;Fournit le JavaScript client et l’interface de configuration&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Serveur de session&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Rust&lt;/td&gt;
 &lt;td&gt;Gère les salons et relaie les messages par WebSocket&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Client Web&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;JavaScript&lt;/td&gt;
 &lt;td&gt;Intégré à l’interface de Jellyfin, coordonne la lecture&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;pre class="mermaid-source"&gt;&lt;code class="language-mermaid"&gt;flowchart LR
 A[Client A] &amp;lt;--&amp;gt;|WebSocket| S[Serveur Session&amp;lt;br/&amp;gt;Rust]
 B[Client B] &amp;lt;--&amp;gt;|WebSocket| S
 C[Client C] &amp;lt;--&amp;gt;|WebSocket| S&lt;/code&gt;&lt;/pre&gt;



&lt;h2 id="fonctionnalités"&gt;Fonctionnalités&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Synchronisation en temps réel&lt;/strong&gt; : la lecture reste synchronisée entre tous les participants&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gestion par salons&lt;/strong&gt; : créez et rejoignez des salons de visionnage&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contrôle par l’hôte&lt;/strong&gt; : le créateur contrôle la lecture (lancement, pause, déplacement)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Suivi de la latence&lt;/strong&gt; : mesure et affichage du temps aller-retour (RTT)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Correction de dérive&lt;/strong&gt; : ajustement automatique de la vitesse pour maintenir la synchronisation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prise en charge de HLS&lt;/strong&gt; : fonctionne avec les contenus transcodés via HTTP Live Streaming&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Authentification JWT&lt;/strong&gt; : vérification de l’identité des utilisateurs&lt;/li&gt;
&lt;/ul&gt;


&lt;h2 id="installation"&gt;Installation&lt;/h2&gt;


&lt;h3 id="1-déployer-le-serveur-de-session"&gt;1. Déployer le serveur de session&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker run -d &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -p 3000:3000 &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -e ALLOWED_ORIGINS&lt;span style="color:#f92672"&gt;=&lt;/span&gt;https://votre-domaine-jellyfin.com &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ghcr.io/mhbxyz/openwatchparty-session-server:latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3 id="2-ajouter-le-dépôt-de-plugins"&gt;2. Ajouter le dépôt de plugins&lt;/h3&gt;
&lt;p&gt;Dans le tableau de bord de Jellyfin :&lt;/p&gt;</description></item></channel></rss>