Technologie

Swift natif. Notre propre moteur. Notre propre build de libmpv.

Neverlag pour Mac, iPhone, iPad et Apple TV est une app Swift native. Entre le fournisseur et le décodeur se trouve notre propre moteur, qui va chercher le flux, le garde et le raccorde. Le décodeur est notre propre build de libmpv. Cette page dit ce que cela signifie – pour ceux qui veulent savoir exactement.

État au 12 octobre 2026mpv 0.41.0FFmpeg 8.0.3

Neverlag est un lecteur IPTV pour Apple TV, iPhone, iPad, Mac et Fire TV, pour les fournisseurs Xtream Codes et M3U. Il sépare la récupération du flux de sa lecture, pour qu’une coupure de connexion ne provoque pas de rechargement. Mesuré : 60 secondes sans connexion, zéro rechargement.

En bref

  • Neverlag pour Mac, iPhone, iPad et Apple TV est une app Swift native – pas de webview, pas de framework multiplateforme, une cible de build par plateforme.
  • Le décodeur est libmpv, la forme bibliothèque de mpv, dans notre propre build : mpv 0.41.0 avec FFmpeg 8.0.3, LGPL, sans parties GPL, sans le lecteur mpv.
  • Entre le fournisseur et le décodeur se trouve le moteur propre à Neverlag. Il tient la connexion, constitue une réserve, détecte les coupures, les pauses de livraison et les sauts d’horodatage, se reconnecte et raccorde les morceaux en un flux continu.
  • Le décodeur reçoit ce flux continu. Lors d’une coupure de connexion, il ne recharge pas. Mesuré : ligne coupée 60 secondes, zéro rechargement.
  • Le cœur du moteur est indépendant du décodeur : aucune de ses parties n’appelle libmpv. Seule une fine couche parle au décodeur.
  • Sur Mac, le décodeur tourne dans son propre processus, séparé de l’app.
  • Décodage matériel via VideoToolbox d’Apple ; FFmpeg est compilé avec sur toutes les plateformes.
  • Neverlag règle l’écran sur le rythme de la diffusion là où l’appareil le permet : 50 Hz sur Mac en plein écran, 120 Hz sur les iPhone ProMotion. À partir de la version 1.0.2 (bientôt disponible).
  • Neverlag mixe le son multicanal en stéréo là où c’est nécessaire – et emporte le dialogue que certains films placent dans le canal des basses. Les lecteurs courants laissent ce canal de côté ; mesuré face à VLC et à l’AudioToolbox d’Apple.
  • Neverlag IPTV Bench, un banc d’essai pour lecteurs sous les mêmes perturbations, est en préparation.

Technologie

Le chemin du flux

Un flux IPTV est un flux de données venant du serveur du fournisseur, qui ne doit jamais se rompre – et qui se rompt pourtant. Ce qui compte, c’est qui voit la rupture : le décodeur, ou quelque chose devant lui.

Schéma : le flux va du fournisseur au moteur Neverlag, de là en flux continu vers le décodeur libmpv et jusqu’à l’écran. Fournisseur Moteur Neverlag Connexion · Réserve · Détecter Reconnecter · Raccorder flux continu Décodeur libmpv Démultiplexage · Décodage VideoToolbox Écran Schéma : le flux va du fournisseur au moteur Neverlag, de là en flux continu vers le décodeur libmpv et jusqu’à l’écran. Fournisseur Moteur Neverlag Connexion · Réserve · Détecter Reconnecter · Raccorder flux continu Décodeur libmpv Démultiplexage · Décodage · VideoToolbox Écran
Le décodeur ne voit que le flux continu venant du moteur – jamais le fournisseur.

Un lecteur courant

Un lecteur courant laisse le décodeur aller chercher le flux lui-même. Si la connexion se rompt, le décodeur s’en aperçoit quand son tampon est vide – et recharge. L’image se fige, la phrase se répète, le retour en arrière est perdu.

Sa réserve est un tampon de lecture fixe de quelques mégaoctets : en HD, quelques secondes à une demi-minute, et il ne se reconstitue pas. Si la connexion se rompt, le décodeur doit recharger – nouvelle connexion, nouveau départ, le tampon de retour en arrière repart de zéro. Il n’existe aucun point où la nouvelle connexion pourrait se raccorder à l’ancienne. Il ne peut pas cacher la coupure au décodeur.

Neverlag

Neverlag est construit autrement. Le moteur va chercher le flux chez le fournisseur et garde une réserve sur l’appareil. Il surveille la livraison, détecte les coupures, les pauses de livraison et les sauts d’horodatage, se reconnecte en arrière-plan et raccorde la nouvelle connexion à la réserve.

Le décodeur reçoit un flux continu. Lors d’une coupure de connexion, il ne voit aucune coupure et ne recharge pas. Si le fournisseur redémarre le flux, le moteur le reprend proprement : 0,44 seconde d’image figée, aucune image noire.

Mesuré le 8 septembre 2026 : ligne de l’appareil coupée 20, 30, 45 et 60 secondes – zéro rechargement à chaque passage, nouvelle connexion 1,1 à 2,1 secondes après le retour du serveur.

Ce que fait le moteur

Sept tâches, toutes devant le décodeur. Chacune avec une mesure du Playback Lab quand il y en a une.

  1. 01

    Tenir la connexion

    Le moteur tient la connexion au fournisseur et va chercher le flux à l’avance – séparément de la lecture.

    5 minutes sans perturbation : 2 requêtes au compte, 2 connexions au flux, 0 rechargement (24 septembre 2026).

  2. 02

    Réserve

    30 à 60 secondes de programme sont sur l’appareil avant d’être lues. La réserve est la marge que chaque perturbation doit d’abord épuiser.

    Ligne coupée 20 s avec 30 s de réserve : 0 rechargement, 0 changement, un arrêt de 0,6 s (25 septembre 2026).

  3. 03

    Détecter

    Coupure, pause de livraison, saut d’horodatage, ligne trop lente : le moteur détecte la perturbation dans le flux de données avant que l’image ne s’arrête – pas à partir de l’image figée.

    Chaîne morte chez le fournisseur : passage à l’autre chemin après 14 s, première image 1,2 s après le changement (24 septembre 2026).

  4. 04

    Reconnecter

    La nouvelle connexion se fait en arrière-plan pendant que la réserve continue d’être lue.

    Nouvelle connexion 1,1 à 2,1 s après le retour du serveur (8 septembre 2026).

  5. 05

    Raccorder

    Le moteur raccorde la nouvelle connexion à la réserve. Le décodeur reçoit un flux continu et ne recharge pas.

    Ligne coupée 60 s : 0 rechargement (8 septembre 2026).

  6. 06

    Un seul arbitre

    Lors d’une perturbation, exactement un mécanisme réagit – reconnecter, baisser la qualité ou changer de chemin, jamais tout à la fois. Chaque décision est inscrite dans le diagnostic.

  7. 07

    Ligne lente

    Si la ligne livre durablement moins que ce dont la chaîne a besoin, Neverlag adapte la lecture au lieu de recharger.

    15 minutes bridées à environ 90 % du besoin : 42 décrochages sans l’adaptation, 0 avec, 1 connexion (9 septembre 2026).

libmpv

Le décodeur : libmpv, notre propre build

Neverlag décode avec libmpv, la forme bibliothèque du lecteur mpv. Le lecteur mpv lui-même n’est pas inclus : pas de ligne de commande, pas de Lua, pas de JavaScript, pas de parties GPL.

Le build est le nôtre. mpv 0.41.0 et FFmpeg 8.0.3 viennent des archives de release non modifiées, plus libplacebo 7.360.1, libass 0.17.3, FreeType 2.13.3, FriBidi 1.0.16 et HarfBuzz 10.1.0 – compilés avec le clang d’Apple pour arm64 (Mac aussi en x86_64), liés en un framework par plateforme et intégrés à l’app comme Libmpv.xcframework.

FFmpeg est compilé en configuration strictement LGPL – sans parties GPL ni non libres. Pas de x264, pas de x265, pas de fdk-aac, pas d’OpenSSL – les connexions chiffrées passent par le système d’Apple. Le build s’interrompt si du code GPL devait y entrer.

FFmpeg, libplacebo, libass, FreeType, FriBidi et HarfBuzz sont non modifiés – aucun patch, seulement de la configuration. Le jeu de codecs est le jeu natif de FFmpeg, sans bibliothèques de codecs externes.

Décodage matériel par VideoToolbox, décodage logiciel en repli là où le matériel d’Apple n’accepte pas un format – le contenu entrelacé, par exemple. Son par la pile audio d’Apple, sous-titres par libass, traitement GPU par libplacebo sur Mac, iPhone et iPad ; sur l’Apple TV, Neverlag affiche lui-même chaque image à l’écran.

Le framework média (Libmpv.framework) se trouve comme fichier séparé, chargé dynamiquement, dans le bundle de l’app. L’app n’utilise que l’interface publique de libmpv. Tu peux remplacer le framework par ta propre compilation avec la même interface (LGPL 2.1 § 6 b) ; sur Mac, tu remplaces chaque copie présente dans le bundle. Sur iPhone, iPad et Apple TV, Apple exige en plus que tout le bundle de l’app soit re-signé avec ton propre certificat de développeur – c’est la plateforme qui l’impose, pas la licence. Les sources, le patch et les scripts de compilation nécessaires sont disponibles par l’offre écrite. Le moteur de flux lui-même n’est pas dans le framework mais dans l’app – remplacer le framework ne le touche pas.

Ce que nous avons modifié dans mpv

Nous n’avons pas simplement repris mpv tel quel. Pour les plateformes Apple, nous avons remanié le système de build afin que libmpv fonctionne sur Mac, iPhone, iPad et Apple TV sans les dépendances de bureau du lecteur mpv. Et nous avons étendu l’interface de rendu de libmpv d’un chemin par lequel les images décodées vont directement dans l’affichage propre de Neverlag – sans passer par les voies de sortie de mpv. C’est la base de Neverlag sur l’Apple TV : là, l’app affiche elle-même chaque image à l’écran. FFmpeg et toutes les autres bibliothèques sont inchangés. Les modifications sont sous LGPL 2.1 ou ultérieure ; nous fournissons le patch par l’offre écrite sur la page open source.

Open source : composants, licences, sommes de contrôle et offre de code source

La frontière entre moteur et décodeur

Le moteur est indépendant du décodeur. Son cœur – connexion, réserve, détection, reconnexion, arbitre, diagnostic – ne contient pas un seul appel à libmpv.

Seule une fine couche parle au décodeur, via l’API publique de libmpv. Le cœur ne dépend pas de mpv.

Sur Mac, le décodeur tourne dans son propre processus, séparé de l’app. Un plantage du décodeur n’entraîne pas l’app. Sur iPhone, iPad et Apple TV, il tourne dans le processus de l’app – la plateforme n’en permet pas un second.

Le diagnostic se trouve dans le moteur, pas dans le décodeur. Il voit la connexion, la réserve et chaque décision de l’arbitre. Son verdict s’affiche dans l’app : si c’était le fournisseur, ton Wi-Fi ou ton appareil. Le journal consigne, pour chaque perturbation, qui l’a déclenchée – fournisseur, réseau ou appareil.

Image et son

Neverlag règle l’écran sur le rythme de la diffusion là où l’appareil le permet. À partir de la version 1.0.2 (bientôt disponible), le Mac passe en plein écran à 50 Hz pour les programmes à 25 et 50 images par seconde, puis revient. Mesuré : 50 Hz tenu, intervalle entre images 20,0 ms, aucune image hors du rythme.

Les iPhone ProMotion affichent la vidéo à 120 Hz. Sur l’Apple TV, « Adapter la fréquence d’images » est un réglage du système.

Neverlag mixe le son multicanal (5.1) en stéréo là où c’est nécessaire. Pour chaque fichier, il vérifie si le dialogue se trouve dans le canal des basses et l’emporte. Les lecteurs courants laissent ce canal de côté en mixant vers deux haut-parleurs – mesuré face à VLC et à l’AudioToolbox d’Apple. À partir de la version 1.0.2 (bientôt disponible).

Playback Lab

D’où viennent les chiffres

Chaque installation de Neverlag tient un journal de lecture sur l’appareil : connexions, réserve, perturbations, chaque décision de l’arbitre. Il ne quitte pas l’appareil, sauf si tu le partages toi-même avec le support.

Dans le Playback Lab, nous rejouons des perturbations enregistrées contre le build de release : ligne coupée, ligne bridée, flux redémarré, chaîne morte. Chaque passage figure avec sa date dans le Lab et dans les Faits.

Neverlag IPTV Bench – un banc d’essai qui mesure les lecteurs sous les mêmes perturbations – est en préparation.

rechargement
ligne coupée 60 s, 8 septembre 2026
image figée
flux redémarré chez le fournisseur, 24 septembre 2026
nouvelle connexion
après le retour du serveur, 8 septembre 2026
connexions
en 5 minutes sans perturbation, 24 septembre 2026

Composants et licences

Neverlag lui-même n’est pas open source. Les bibliothèques le sont et restent sous leurs licences. Les versions viennent de la configuration de build, lues à la construction de cette page.

ComposantVersionLicenceRôle
mpv (libmpv) 0.41.0 LGPL-2.1-or-later Cœur de lecture, remanié par Neverlag pour les plateformes Apple. (toutes les plateformes)
FFmpeg 8.0.3 LGPL-2.1-or-later Conteneurs, protocoles et décodeurs. (toutes les plateformes)
libplacebo 7.360.1 LGPL-2.1-or-later Traitement GPU : gestion des couleurs, mise à l’échelle, tone mapping. (toutes les plateformes)
libass 0.17.3 ISC Affichage des sous-titres. (toutes les plateformes)
FreeType 2.13.3 FTL Rendu des polices pour les sous-titres. (toutes les plateformes)
FriBidi 1.0.16 LGPL-2.1-or-later Texte bidirectionnel pour les sous-titres. (toutes les plateformes)
HarfBuzz 10.1.0 MIT Mise en forme du texte pour les sous-titres. (toutes les plateformes)
GRDB.swift 7.11.1 MIT Base de données pour le catalogue et le guide des programmes. (toutes les plateformes)

Les composants avec versions et licences, les sommes de contrôle des archives sources et l’offre écrite de code source selon la LGPL 2.1 sont sur la page open source.

Plateformes

AppareilTechnique
Mac macOS 14 ou plus récent, Apple Silicon et Intel. Décodeur dans son propre processus, image via OpenGL.
iPhone et iPad iOS et iPadOS 17 ou plus récent, arm64. Décodeur dans le processus de l’app, image via OpenGL.
Apple TV tvOS 17 ou plus récent, arm64. Décodeur dans le processus de l’app ; notre propre backend de rendu, image sans copie, dessinée avec Metal.
Fire TV App séparée en téléchargement direct, avec les mêmes mécanismes : réserve, nouvelle connexion en arrière-plan, autre chemin, la 4K revient d’elle-même.
Android Android — en cours, la version Play Store suivra.

Questions sur la technologie

Sur quoi repose Neverlag ?

Sur notre propre moteur en Swift, qui va chercher le flux, le garde et le raccorde, et sur libmpv comme décodeur – notre propre build LGPL de mpv 0.41.0 avec FFmpeg 8.0.3. L’app est en Swift natif pour Mac, iPhone, iPad et Apple TV.

Neverlag n’est-il qu’un frontend pour mpv ?

Non. La plupart des lecteurs décodent avec FFmpeg – VLC, mpv et Kodi compris. La différence se fait en amont : dans la façon de récupérer, de mettre en réserve, de maintenir et de recoller le flux. C’est exactement cette partie que Neverlag a construite de A à Z. mpv décode – tout ce qui précède est le moteur de flux propre de Neverlag : maintenir la connexion, constituer une réserve, détecter les coupures, se reconnecter en arrière-plan, assembler les morceaux en un flux continu, diagnostic. Son cœur ne contient pas un seul appel à libmpv. En plus, nous avons remanié libmpv pour les plateformes Apple et étendu son interface de rendu ; sur l’Apple TV, l’app affiche elle-même chaque image à l’écran, sur Mac le décodeur tourne dans son propre processus.

Neverlag est-il une webview ou un framework multiplateforme ?

Non. Neverlag est écrit en Swift et compilé comme app native séparée par plateforme – Mac, iPhone et iPad, Apple TV. Pas de webview, pas d’Electron, pas de Flutter, pas de React Native.

Pourquoi le décodeur ne recharge-t-il pas lors d’une coupure ?

Parce qu’il ne voit pas la coupure. Le moteur garde une réserve de 30 à 60 secondes sur l’appareil, se reconnecte en arrière-plan et raccorde la nouvelle connexion à la réserve. Le décodeur reçoit un flux continu.

Mesuré le 8 septembre 2026 : ligne coupée 60 secondes, zéro rechargement, nouvelle connexion 2,1 secondes après le retour du serveur.

Quels formats et codecs Neverlag lit-il ?

MPEG-TS et HLS du fournisseur ; comme conteneurs aussi MP4/MOV, Matroska, MPEG-PS et FLV. Vidéo : H.264, HEVC, MPEG-2, MPEG-4 et VP9 – en matériel via VideoToolbox là où la puce prend en charge le codec, sinon en logiciel ; AV1 uniquement sur les appareils dotés d’un décodeur AV1 matériel. Son : AAC, AC-3, E-AC-3, MP2, MP3, Opus, FLAC. Uniquement des décodeurs natifs de FFmpeg, aucune bibliothèque de codecs externe. Pas de DRM.

Quelles données quittent l’appareil ?

Aucune vers Neverlag. L’app parle à ton fournisseur et à l’App Store. Pas de compte, pas de pistage, pas d’analyse d’audience. Le journal de lecture reste sur l’appareil ; tu l’exportes toi-même si tu veux l’envoyer au support.

Puis-je remplacer le framework média ?

Oui. Le framework média (Libmpv.framework) se trouve comme fichier séparé, chargé dynamiquement, dans le bundle de l’app. L’app n’utilise que l’interface publique de libmpv. Tu peux remplacer le framework par ta propre compilation avec la même interface (LGPL 2.1 § 6 b) ; sur Mac, tu remplaces chaque copie présente dans le bundle. Sur iPhone, iPad et Apple TV, Apple exige en plus que tout le bundle de l’app soit re-signé avec ton propre certificat de développeur – c’est la plateforme qui l’impose, pas la licence. Les sources, le patch et les scripts de compilation nécessaires sont disponibles par l’offre écrite. Le moteur de flux lui-même n’est pas dans le framework mais dans l’app – remplacer le framework ne le touche pas.

Qu’est-ce que le Neverlag IPTV Bench ?

Un banc d’essai qui mesure les lecteurs sous les mêmes perturbations enregistrées que le Playback Lab. En préparation ; la suite quand il tournera.

État au 12 octobre 2026

Neverlag est un lecteur. Il te faut ta propre playlist M3U ou les identifiants d’un fournisseur IPTV. Neverlag ne contient, ne fournit et ne procure aucun contenu.