Skip to content
khalilbenazPublic

About

Lecteur IPTV pour Android TV / Google TV, smartphone, tablette, Windows et Mac — Xtream Codes et M3U. Guide TV, replay, pause du direct, profils, Google TV, multilingue.

Topics

Resources

Contributing

Security policy

Stars

43 stars

Watchers

0 watching

Forks

Repository files navigation

Ultra TV

Ultra TV

Lecteur IPTV natif pour Android TV et Google TV.
Kotlin · Compose for TV · Media3 (ExoPlayer) + LibVLC · Room · Hilt

CI Release Licence MIT Site

🇬🇧 English version · Site · Télécharger l'APK · Releases · Changelog


Ultra TV lit vos propres abonnements IPTV (Xtream Codes, M3U / M3U8 en lien ou en fichier). Toute l'interface est native et pilotée à la télécommande ; le catalogue (chaînes, films, séries, guide, historique, favoris) vit dans une base Room locale. Il ne fournit aucun contenu.

Les captures ci-dessous utilisent exclusivement des données synthétiques (faux serveur Xtream local, android-native/tools/fake-xtream).

Accueil Direct Guide des programmes Fiche film Lecteur Réglages Qui regarde ? Réglages, panneau Langues

Captures aussi disponibles en anglais (docs/screenshots/en) et en arabe, interface en miroir (docs/screenshots/ar).

Fonctionnalités

  • Recherche depuis n'importe quel écran : bouton en haut du menu latéral, touches Recherche et micro de la télécommande.
  • Direct : Haut/Bas zappent, OK ouvre la liste des chaînes, touches chaîne +/− et TV des télécommandes Google TV ; bandeau chaîne et programme ; zapping par numéro, Retour revient au menu (touche « chaîne précédente » pour la dernière chaîne), 20 chaînes récentes, recherche instantanée (FTS).
  • Catégories : noms et ordre de la playlist tels que fournis par la source, activer / désactiver / réordonner, filtre texte (« FR » = mot entier) ; pastilles de qualité (SD, HD, FHD, 4K, RAW, HEVC…) pour distinguer les flux d'une même chaîne.
  • Guide : grille horaire, rappels, enregistrements programmés, replay (catch-up Xtream) depuis le guide quand la source le permet. Programme repris d'une chaîne du même nom quand le fournisseur n'en donne qu'à une catégorie (HEVC, Général…), chaînes « +1 / +2 » décalées d'autant, programme court du fournisseur en secours, et guide complémentaire gratuit (XMLTV France par défaut, epgshare01 beIN Sports / Arabie saoudite / Émirats) pour les chaînes restées sans programme.
  • Pause du direct (timeshift) : tampon disque circulaire pour les flux MPEG-TS.
  • Films et séries : fiches enrichies via TMDB (affiche, synopsis, distribution), reprise automatique (position enregistrée toutes les 30 s), saisons en onglets, rangées par catégorie.
  • Deux moteurs de lecture : ExoPlayer (Media3) et LibVLC, choix Auto / ExoPlayer / VLC, décodage Auto / Matériel / Logiciel, repli automatique et mémorisation par chaîne.
  • Sous-titres : recherche en ligne (OpenSubtitles via le Worker), style avancé (taille, couleur, fond, contour, position, décalage). Rien à configurer sur l'appareil ; un compte OpenSubtitles personnel se relie, au besoin, depuis le tableau de bord cloud.
  • Trakt : films et épisodes regardés envoyés à Trakt (en cours, puis vu à la fin) ; à l'accueil, watchlist, recommandations, tendances et populaires Trakt limitées aux titres disponibles dans la playlist chargée ; marque « Vu » sur les films et épisodes déjà vus. Connexion depuis le tableau de bord cloud, rien à régler sur la TV.
  • Profils : « Qui regarde ? », profil Enfants, favoris, historique et langues par profil.
  • Abonnement (menu) : état de votre abonnement IPTV tel que l'indique le fournisseur — statut, date d'expiration et jours restants, connexions utilisées / autorisées, compte d'essai, serveur. Android, Windows et macOS.
  • Google TV : « Continuer à regarder » (films, épisodes et dernières chaînes du direct), chaîne d'accueil Ultra TV (favoris puis dernières chaînes) et chaîne Ultra TV · Nouveautés (derniers films et séries ajoutés), recherche vocale et globale, liens profonds ultratv://.
  • Lecture : pas de mise en veille pendant un film ou le direct, pause en quittant l'application (plus de son en arrière-plan) ; horloge sans décalage et fuseau horaire réglable (Réglages › Affichage).
  • Thèmes Sombre / Clair / Automatique (le lecteur reste toujours sombre) ; interface en anglais, français, espagnol et arabe (RTL).
  • Veille : minuterie 30 / 60 / 90 min ou fin de programme ; mise à jour intégrée depuis les releases GitHub.

Appareils

Un seul compte, tous vos écrans : même interface, même fournisseur partout. Ajoutez-le une fois dans le tableau de bord cloud et chaque appareil le reçoit.

Android TV et Google TV

L'application d'origine, pilotée à la télécommande (voir les captures ci-dessus et Fonctionnalités).

Smartphone Android

Interface tactile : barre de navigation en bas, listes et grilles au doigt, lecteur à gestes avec image dans l'image ; les formulaires se calent au-dessus du clavier.

Accueil sur smartphone Direct sur smartphone Fiche film sur smartphone Lecteur sur smartphone

Tablette Android

Menu latéral, liste et fiche côte à côte.

Direct sur tablette Accueil sur tablette

Windows et macOS

Le même design sur ordinateur : l'application web de web/ empaquetée par Electron (electron/), utilisable aussi dans un navigateur. Xtream Codes et M3U (lien ou fichier) ; catalogue gardé en local (IndexedDB), identifiants chiffrés avec le trousseau du système, lecture directe (aucun proxy distant), mise à jour automatique via les Releases GitHub. Recherche : bouton rond sous le logo, raccourci Ctrl/Cmd + K ou / depuis n'importe quel écran.

Direct sur le bureau Réglages sur le bureau

Toutes les captures du bureau (données synthétiques, FR et EN) : docs/screenshots/desktop/. Publication : tag desktop-vX.Y.Z (workflow desktop-release.yml, séparé des tags Android v*).

Tableau de bord cloud

Gérez appareils et sources depuis un navigateur : https://ultratv-config.khalilbenaz.workers.dev.

Appareils appairés Partage des sources par appareil

Chaque source a un bouton Afficher le lien IPTV (lien M3U complet, à la demande, avec bouton Copier) et son abonnement (statut, date d'expiration, jours restants, connexions), lu chez le fournisseur ; listes paginées avec recherche quand elles s'allongent.

Rubrique Compte :

  • Trakt : bouton Connecter Trakt, autorisation chez Trakt ; vos appareils y envoient ensuite ce que vous regardez. Le mot de passe Trakt ne passe jamais par le site.
  • Sous-titres · OpenSubtitles (facultatif) : reliez votre compte OpenSubtitles, gratuit ou VIP, pour utiliser votre propre quota de téléchargements au lieu du quota commun.

Appairage en un scan : la TV affiche un QR, l'appareil photo du téléphone ouvre la page d'appairage avec le code déjà rempli. Le code se saisit aussi à la main, avec ou sans tiret.

Confirmation d'appairage avec le code pré-rempli Tableau de bord sur téléphone, thème clair

Synchronisation multi-appareils

  • Même fournisseur partout : un fournisseur ajouté dans le tableau de bord est reçu par tous les appareils du compte.
  • Source propre à un appareil : une source ajoutée sur un appareil lui reste privée tant que vous ne la partagez pas.
  • Partage choisi par appareil : source par source, vous cochez les appareils destinataires (dans l'application : Réglages › Sources › Partager cette source ; ou dans le tableau de bord).
  • Catégories partagées : activer, désactiver une catégorie sur un appareil s'applique aux autres (la modification la plus récente gagne).
  • Favoris, reprises et derniers vus partagés : un film commencé sur la TV reprend au même endroit sur le Mac ; un favori ajouté ou retiré l'est partout. Par source du compte, profils rapprochés par leur nom.
  • Les modifications d'un compte sont sérialisées côté Worker (verrou Durable Object) : deux appareils qui écrivent en même temps ne s'écrasent pas.

Téléchargements

Appareil Fichier
Android (TV, smartphone, tablette) UltraTV-debug.apk universel, ou un APK par processeur UltraTV-<version>-<abi>.apk (arm64-v8a, armeabi-v7a, x86_64), plus SHA256SUMS.txt
macOS UltraTV-<version>-mac-universal.dmg (Apple Silicon et Intel)
Windows UltraTV-<version>-win-x64.exe (installeur NSIS)
Tableau de bord cloud https://ultratv-config.khalilbenaz.workers.dev (aucune installation)

Tout est sur la page Releases (les fichiers bureau portent les tags desktop-v…).

Installation

Android 9 ou plus récent (API 28).

APK. Téléchargez UltraTV-debug.apk (somme SHA-256 sur la page de la release) et installez-le.

Downloader (box sans navigateur) : ouvrez l'application Downloader, saisissez le code 5248504, autorisez les sources inconnues, installez.

adb :

adb connect IP_DE_LA_BOX:5555
adb install -r UltraTV-debug.apk

Au premier lancement : choisissez le type de source (Xtream Codes, lien M3U, fichier M3U ou Depuis le cloud), saisissez-la, puis choisissez vos catégories (seules les catégories actives sont téléchargées).

Une adresse du type …/get.php?username=…&password=… collée comme lien M3U est reconnue et ajoutée comme source Xtream Codes (beaucoup de fournisseurs bloquent get.php).

Synchronisation cloud

Pour ne pas saisir d'identifiants à la télécommande, gérez vos sources depuis un navigateur : https://ultratv-config.khalilbenaz.workers.dev (l'adresse est aussi affichée, avec un QR code, dans l'application : Réglages › Sources).

  1. Créez un compte sur le tableau de bord et ajoutez vos sources.
  2. Dans le tableau de bord, choisissez Appairer une TV.
  3. Sur la box : Depuis le cloud (écran Source de l'assistant) ou Réglages › Sources › Synchroniser depuis le cloud. Un code à 8 caractères s'affiche ; saisissez-le dans le tableau de bord.
  4. La box importe la configuration puis synchronise.

L'appareil reçoit un jeton aléatoire de 256 bits (haché côté serveur, chiffré dans le Keystore, révocable). Vos identifiants sont chiffrés côté serveur (AES-256-GCM). L'étiquette affichée pour la box (« UTV-XXXXXX ») n'est qu'un nom, jamais une clé.

Auto-hébergement. Vous pouvez déployer votre propre Worker (voir Worker Cloudflare) : créez les espaces KV, définissez les secrets SESSION_SECRET, PROVIDER_ENC_KEY et OPS_TOKEN (aucune valeur n'est publiée), puis wrangler deploy ; dans l'application, Réglages › Sources › Adresse du tableau de bord pointe alors vers le vôtre.

Sécurité

  • Identifiants des sources chiffrés au repos sur l'appareil ; sur le Worker, AES-256-GCM.
  • Aucune URL de flux, aucun identifiant n'est affiché ni journalisé ; les messages d'erreur sont filtrés (UserText). Un nom de source vide ne reprend pas l'adresse du serveur.
  • Aucun jeton partagé dans l'APK. Détails, modèle de menace et rotation des anciens secrets : SECURITY.md.

Réglages automatiques

À la première ouverture, l'AdaptiveProfile mesure l'appareil (mémoire, tas, micro-benchmark) et le classe Bas / Moyen / Haut. Il en déduit tampon, parallélisme et taille des lots de synchro, plafond de résolution et de débit (box à peu de mémoire : 720p / 6 Mb/s) et ajuste le tampon si des coupures surviennent. Tout reste modifiable : Réglages › Lecture (moteur, décodage, préréglage de tampon : Faible latence, Auto, Équilibré, Stable, Personnalisé).

Développement

JDK 17 requis.

git clone https://github.com/khalilbenaz/ultra-tv && cd ultra-tv/android-native
export JAVA_HOME=$(/usr/libexec/java_home -v 17)   # macOS
./gradlew assembleDebug                            # APK universel
./gradlew testDebugUnitTest                        # tests unitaires (JUnit, Robolectric)
./gradlew assembleRelease                          # APK par ABI (arm64-v8a, armeabi-v7a, x86_64)
  • La version vient du fichier VERSION ; versionCode = major×10000 + minor×100 + patch (1.2.0 → 10200).
  • Faux serveur Xtream pour tester sans abonnement : python3 android-native/tools/fake-xtream/server.py (l'émulateur y accède via http://10.0.2.2:8099, identifiants test / test).
  • Build debug : intents de débogage (debug_route, debug_theme, debug_engine, debug_decoder, debug_buffer…) pour les captures et les mesures.
  • CI (ci.yml) : web (tsc + vitest), Android (compilation + tests unitaires), Worker. Publication : release.yml sur tag v* (APK universel UltraTV-debug.apk, APK par processeur UltraTV-<version>-<abi>.apk et SHA256SUMS.txt) ; site : pages.yml.

Worker Cloudflare

cloudflare-config/ : tableau de bord d'appairage, stockage chiffré des sources, ingestion des crashs, proxies TMDB et OpenSubtitles. Procédure complète : cloudflare-config/README.md.

cd cloudflare-config && npm ci
wrangler kv namespace create CONFIG                # coller les ids dans wrangler.toml
wrangler secret put SESSION_SECRET                 # >= 32 caractères aléatoires
wrangler secret put PROVIDER_ENC_KEY               # clé AES-256 en base64
wrangler secret put OPS_TOKEN                      # mot de passe de /crashes et /logs
wrangler secret put TMDB_READ_TOKEN                # jeton de lecture TMDB v4 (fiches enrichies)
wrangler secret put TMDB_API_KEY                   # clé TMDB v3 (repli si pas de jeton v4)
wrangler secret put OPENSUBTITLES_API_KEY          # clé OpenSubtitles (sous-titres en ligne)
wrangler secret put ACCOUNT_RELAY_KEY              # facultatif : relais d'abonnement hors Cloudflare (cloudflare-config/relay)
npm test && wrangler deploy --dry-run

TMDB et OpenSubtitles sont facultatifs : sans leurs secrets, l'application masque les fonctions correspondantes. Trakt utilise TRAKT_CLIENT_ID (wrangler.toml, application Trakt en PKCE : pas de secret client). Pour un fork, compilez avec -PULTRA_WORKER_URL=https://votre-worker.workers.dev.

Limites connues

  • Le replay et la pause du direct dépendent de la source (catch-up Xtream, flux MPEG-TS) ; indisponibles sinon.
  • Les fiches TMDB et les sous-titres en ligne exigent un Worker configuré avec les secrets ci-dessus.
  • Un épisode commencé sur la TV apparaît dans « Reprendre » sur l'ordinateur une fois la série ouverte au moins une fois sur celui-ci.
  • Aucun guide gratuit ne couvre les chaînes marocaines (2M, Al Aoula…) : seul le guide du fournisseur les renseigne.
  • La première synchro d'un très gros catalogue (≈ 55 000 chaînes) prend environ une minute sur un appareil de milieu de gamme et davantage sur un modèle d'entrée de gamme.
  • L'APK grossit avec LibVLC (≈ 53 Mo en arm64-v8a, contre ≈ 9 Mo en 1.0.x).
  • Les mesures publiées dans les notes de version viennent d'émulateurs Android TV (rendu logiciel) : à confirmer sur matériel réel.

Licence

MIT, voir LICENSE. Ultra TV est un client IPTV : utilisez uniquement des listes, guides et identifiants que vous avez le droit d'utiliser. Les polices Sora et Manrope sont sous licence OFL.

About

Lecteur IPTV pour Android TV / Google TV, smartphone, tablette, Windows et Mac — Xtream Codes et M3U. Guide TV, replay, pause du direct, profils, Google TV, multilingue.

Topics

Resources

Contributing

Security policy

Stars

43 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages