Plan Guard définit des limites de streaming par utilisateur ou par formule sur votre serveur Jellyfin, les applique avant et pendant que les gens regardent, et détecte les comptes partagés avec d’autres personnes, par exemple un compte payant utilisé dans plusieurs foyers à la fois. Jellyfin n’a pas de limite de flux simultanés en propre ; Plan Guard en ajoute une.
Ce qu’il fait
- Profils de limites : flux simultanés, qualité à domicile et en déplacement (débit), résolution maximale, si la conversion vidéo (transcodage) est autorisée et si les sources 4K peuvent être converties, et combien d’appareils un compte peut utiliser en 30 jours. Chaque utilisateur reçoit un profil, ou le profil par défaut pour tous les autres. Les administrateurs ne sont jamais limités.
- Avant le démarrage de la lecture : au-dessus de la limite de flux, une nouvelle lecture est refusée, et la qualité demandée est plafonnée au débit du profil pour le domicile ou le déplacement. Le débit à distance et le réglage de conversion vidéo sont aussi écrits dans la stratégie Jellyfin de chaque utilisateur.
- Pendant la lecture : une lecture qui enfreint le profil reçoit un message, puis une commande d’arrêt, puis son transcodage est terminé sur le serveur, et enfin l’appareil est déconnecté. En option, l’appareil est aussi bloqué pour cet utilisateur.
- Difficile à contourner (à partir de la version 0.1.2) : la limite de flux compte les véritables requêtes de lecture par connexion et par titre, y compris les requêtes de fichier direct, de téléchargement et HLS, pour qu’une deuxième connexion avec le même appareil ou un lecteur qui ne déclare pas sa lecture ne la contourne plus. Le plafond de qualité s’applique aussi aux requêtes directes. Vous pouvez traiter chaque client comme en déplacement, et un client sans adresse est compté comme en déplacement.
- Détection des comptes partagés : un score de confiance par compte sur les 30 derniers jours, à partir de lectures simultanées sur des réseaux différents, de déplacements « impossibles », de trop nombreux réseaux en un jour, de trop nombreux appareils et d’appareils nouveaux. Par défaut, elle se contente de notifier ; vous pouvez aussi envoyer un message à l’utilisateur, forcer une nouvelle connexion ou bloquer l’appareil le plus récent.
- Fonctionne avec Cashier : les abonnés reçoivent le profil lié à leur formule payante, et Plan Guard prend en charge l’arrêt des lectures.
- Page d’administration : les flux actifs avec un bouton Stop (avec un message facultatif), les profils, les utilisateurs, les comptes partagés et un journal de chaque action. Les alertes de compte partagé vont aussi dans le journal d’activité de Jellyfin.
Compatibilité des clients
La limite de flux et le débit sont aussi écrits dans les propres réglages utilisateur de Jellyfin, donc ils s’appliquent à chaque client. Tous les lecteurs n’obéissent pas à une commande d’arrêt ; Plan Guard utilise ce que chacun supporte :
- Jellyfin Web (testé de bout en bout) : une lecture supplémentaire est refusée avant de démarrer, Stop est obéi, et une source de 10 Mbit/s est transcodée à 1,6 Mbit/s sous un profil de 2 Mbit/s.
- Les lecteurs sans contrôle à distance, comme Infuse, Kodi et DLNA, ignorent les commandes d’arrêt : pour eux, les arrêter signifie déconnecter l’appareil (l’utilisateur doit se reconnecter sur cet appareil). Vous pouvez désactiver cela dans les réglages. Cela découle du fonctionnement de ces lecteurs ; ce n’est pas encore testé sur les vraies applications.
- Si un lecteur continue à lire après la commande d’arrêt, Plan Guard termine son transcodage sur le serveur, puis déconnecte l’appareil.
- La limite de flux est vérifiée au démarrage de la lecture, y compris pour les lecteurs qui sautent la requête d’information de lecture de Jellyfin et demandent le flux directement.
Les applications natives (Android, Android TV, Swiftfin, Findroid, Kodi/JellyCon, Infuse, Streamyfin) n’ont pas encore été testées ; la liste de la réaction de chacune sera ajoutée après les tests.
Ce qu’il envoie, où
Rien concernant vos utilisateurs ne quitte votre serveur, et les localisations sont résolues localement. Plan Guard télécharge les bases City et ASN gratuites DB-IP Lite depuis download.db-ip.com, puis de nouveau au démarrage quand elles ont plus de 35 jours ; il le fait uniquement tant que la détection des comptes partagés est active (elle l’est par défaut) et quand il ne peut pas réutiliser une base de localisation déjà conservée par Access Log ou Security Notifications. Hormis cela, seule la vérification de licence atteint medialab.works. Sur votre serveur, Plan Guard conserve les accès par session (utilisateur, appareil, IP, localisation approximative) pendant 31 jours, ainsi qu’un journal de ses actions.
Détails complets pour chaque produit, y compris ce qui reste sur votre serveur : Licence, confidentialité et compatibilité.
Géolocalisation IP par DB-IP. Les bases DB-IP Lite sont distribuées sous CC BY 4.0.
Prérequis
- Pour l’instant, medialab Server (la variante MediaLab de Jellyfin 12.2). La version actuelle ne se charge pas dans l’image Docker Jellyfin 12.2 officielle (l’API du serveur cesse de répondre) ; une version vérifiée sur l’image Docker officielle et sur le paquet Debian suivra, et d’ici là le plugin reste « Bientôt disponible ».
- Facultatif : Cashier, pour des profils de limites par formule payante.
Limites
- La résolution et la conversion vidéo sont vérifiées après le démarrage de la lecture (message, puis arrêt) ; seules la limite de flux et le débit sont appliqués avant.
- Les réseaux mobiles, les VPN et les déplacements peuvent ressembler à du partage ; l’action par défaut pour les comptes partagés est donc une simple notification.
Licence
Le plugin est open source (GPL-3.0). Les versions compilées prêtes à l’installation sont publiques, comme le code source. Ce que vous achetez, c’est l’abonnement : la licence d’utilisation du plugin sur un serveur Jellyfin, les mises à jour incluses dans votre formule et le support : chaque mise à jour tant que l’abonnement est actif, via votre dépôt de plugins privé, et de l’aide quand quelque chose ne fonctionne pas. Le plugin vérifie la clé d’abonnement une fois par jour ; sans abonnement valide, il s’arrête jusqu’au renouvellement (rien n’est supprimé). Mensuel, annuel ou à vie (la licence à vie inclut un an de mises à jour), ou inclus dans le pack Jellyfin. Essai gratuit de 30 jours.
Code source. Pour chaque version, le code source complet correspondant est public, à côté de la version compilée, dans l’historique des versions, et aussi dans votre compte (Compte → Licences, Code source) ; chaque archive contient le texte intégral de la GPL-3.0 (LICENSE). Si vous avez besoin du code source d’une version que vous ne pouvez plus télécharger, demandez-nous et nous vous l’envoyons. Voir la section 10 de la Licence (CLUF).
Code écrit par nos soins, par MediaLab Works ; il ne contient aucun code tiers. Le lecteur des fichiers de base de localisation est notre propre implémentation, écrite à partir de la spécification publique du format MaxMind DB. Les données de localisation proviennent de DB-IP et sont téléchargées par votre serveur, non embarquées dans le plugin.
