Files
iptv-android-tv-2/IA/SPECIFICATIONS_IMEDIA_TV_PLUS.md
T

1579 lines
26 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# iMedia TV+ / Xtream Google TV Player
## Spécifications, architecture et historique des modifications
**Projet :** Lecteur IPTV Xtream pour Google TV / Android TV
**Package Android :** `ma.tkgraph.xtreamtv`
**Plateforme cible :** Google TV / Android TV
**Langage :** Kotlin
**Interface :** Jetpack Compose / Compose TV
**Lecteur vidéo :** AndroidX Media3 ExoPlayer
**API IPTV :** Xtream Codes compatible
**Date du document :** 10/06/2026
---
## 1. Objectif du projet
Le projet consiste à développer une application Google TV permettant de lire des contenus IPTV fournis par un serveur compatible Xtream.
L’application doit permettre :
- la connexion à un serveur Xtream ;
- la mémorisation des identifiants ;
- la lecture des chaînes Live ;
- la gestion des catégories ;
- l’affichage des logos de chaînes ;
- l’affichage de l’EPG ;
- le replay / catch-up TV ;
- la navigation dans un guide TV complet ;
- la lecture des VOD ;
- la lecture des séries ;
- la gestion des favoris ;
- l’épinglage d’une chaîne de démarrage ;
- une navigation fluide avec télécommande Google TV.
L’objectif final est de disposer d’un lecteur TV complet, ergonomique, utilisable au quotidien sur une box Google TV.
---
## 2. Environnement de développement
### 2.1. Système
- OS de développement : Windows 11
- IDE conseillé : Android Studio
- Terminal utilisé : PowerShell
- Appareil cible : box Google TV / Android TV
- Connexion appareil : ADB Wi-Fi
### 2.2. Chemin du projet
```powershell
D:\07-Logiciels\11-IPTV Andoid TV 2
```
### 2.3. Java / JDK
JDK utilisé via Android Studio :
```powershell
D:\Program Files\Android\Android Studio\jbr
```
Version constatée :
```txt
OpenJDK 21.0.10
```
### 2.4. Android SDK
SDK utilisé :
```powershell
C:\Users\abmou\AppData\Local\Android\Sdk
```
Composants installés :
- Android SDK Platform 36.1
- Android SDK Build-Tools
- Android SDK Platform-Tools
- Android SDK Command-line Tools
- Android Emulator
- Android Emulator Hypervisor Driver
### 2.5. Gradle
Gradle installé manuellement :
```powershell
D:\Tools\Gradle\gradle-9.1.0
```
Wrapper Gradle généré dans le projet :
```powershell
gradlew.bat
```
Commande utilisée :
```powershell
gradle wrapper --gradle-version 9.1.0 --distribution-type bin
```
---
## 3. Configuration PowerShell recommandée
Avant compilation :
```powershell
cd "D:\07-Logiciels\11-IPTV Andoid TV 2"
$env:JAVA_HOME = "D:\Program Files\Android\Android Studio\jbr"
$env:ANDROID_HOME = "$env:LOCALAPPDATA\Android\Sdk"
$env:Path = "$env:JAVA_HOME\bin;$env:ANDROID_HOME\platform-tools;$env:ANDROID_HOME\cmdline-tools\latest\bin;D:\Tools\Gradle\gradle-9.1.0\bin;$env:Path"
```
Vérifications :
```powershell
java -version
adb version
gradle -v
```
---
## 4. Compilation APK
### 4.1. Nettoyage
```powershell
.\gradlew.bat clean --no-daemon
```
### 4.2. Compilation debug
```powershell
.\gradlew.bat :app:assembleDebug --no-daemon
```
### 4.3. APK générée
```powershell
.\app\build\outputs\apk\debug\app-debug.apk
```
---
## 5. Installation sur Google TV
### 5.1. Connexion ADB
```powershell
adb connect 192.168.1.124
adb devices
```
Résultat attendu :
```txt
192.168.1.124:5555 device
```
### 5.2. Installation APK
```powershell
adb install -r ".\app\build\outputs\apk\debug\app-debug.apk"
```
Résultat attendu :
```txt
Success
```
### 5.3. Lancement
```powershell
adb shell am start -n ma.tkgraph.xtreamtv/.MainActivity
```
ou :
```powershell
adb shell monkey -p ma.tkgraph.xtreamtv 1
```
---
## 6. Architecture générale
### 6.1. Structure logique
```txt
app/
└── src/
└── main/
├── AndroidManifest.xml
├── java/ma/tkgraph/xtreamtv/
│ ├── MainActivity.kt
│ ├── data/
│ │ ├── model/
│ │ ├── network/
│ │ ├── repository/
│ │ └── storage/
│ ├── ui/
│ │ ├── components/
│ │ ├── screens/
│ │ └── theme/
│ └── util/
└── res/
├── drawable/
├── drawable-nodpi/
├── mipmap/
└── values/
```
### 6.2. Rôle des couches
| Couche | Rôle |
|---|---|
| `MainActivity.kt` | Point d’entrée, navigation principale, état global |
| `data/model` | Modèles DTO Xtream |
| `data/network` | Définition Retrofit de l’API Xtream |
| `data/repository` | Abstraction des appels réseau |
| `data/storage` | Sauvegarde locale des identifiants, favoris, épinglage |
| `ui/screens` | Écrans Compose |
| `ui/components` | Composants réutilisables : logo, cartes, éléments UI |
| `util` | Génération d’URL, tri, helpers |
| `res/drawable-nodpi` | Image de démarrage iMedia TV+ |
---
## 7. Dépendances principales
### 7.1. Lecture vidéo
- `androidx.media3:media3-exoplayer`
- `androidx.media3:media3-exoplayer-hls`
- `androidx.media3:media3-exoplayer-dash`
- `androidx.media3:media3-ui`
- `androidx.media3:media3-session`
### 7.2. Interface
- Jetpack Compose
- Compose TV
- Material 3
### 7.3. Réseau
- Retrofit
- Gson Converter
### 7.4. Images
- Coil Compose
- Coil Network OkHttp
Utilisé pour afficher :
- logos chaînes ;
- affiches VOD ;
- affiches séries ;
- logo dans le lecteur.
---
## 8. Manifest Android TV
Le manifest a été corrigé pour rendre l’application lançable depuis Google TV.
Catégories nécessaires :
```xml
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
```
Sans `LAUNCHER`, l’application était installée, mais le bouton **Ouvrir** restait désactivé dans Google TV. Magnifique démonstration d’une application installée dans un couloir sans porte.
---
## 9. Fichiers de configuration Gradle
### 9.1. Corrections effectuées
Le projet initial a nécessité plusieurs corrections :
- suppression du plugin `org.jetbrains.kotlin.android` devenu inutile avec AGP 9 ;
- suppression du bloc `kotlin { jvmToolchain(17) }` ;
- ajout du Gradle Wrapper ;
- ajout / correction de `gradle.properties` ;
- augmentation de la mémoire Gradle.
### 9.2. Exemple `gradle.properties`
```properties
org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m -Dfile.encoding=UTF-8 -XX:+UseG1GC
org.gradle.parallel=false
org.gradle.configuration-cache=false
android.useAndroidX=true
```
---
## 10. Connexion Xtream
### 10.1. Données utilisateur
L’écran de connexion demande :
- URL serveur ;
- username ;
- password.
Exemple :
```txt
http://serveur.example.com:8080
username
password
```
### 10.2. Validation du compte
Endpoint utilisé :
```txt
/player_api.php?username=USER&password=PASS
```
Vérifications :
- `auth == "1"`
- `status == "Active"`
---
## 11. Sauvegarde des identifiants
### 11.1. Fichier
```txt
data/storage/ConfigStorage.kt
```
### 11.2. Stockage
Utilisation de `SharedPreferences`.
Données sauvegardées :
- serveur ;
- username ;
- password ;
- favoris chaînes ;
- favoris VOD ;
- favoris séries ;
- chaîne épinglée ;
- état de sélection ;
- préférences nécessaires au fonctionnement.
### 11.3. Fonctionnalités
- connexion automatique au démarrage ;
- suppression des données à la déconnexion ;
- conservation des favoris ;
- conservation de la chaîne épinglée.
---
## 12. Écran de démarrage iMedia TV+
### 12.1. Problème initial
Au démarrage, l’application affichait un écran blanc avant le chargement Compose.
### 12.2. Correction
Ajout de l’image fournie par l’utilisateur :
```txt
app/src/main/res/drawable-nodpi/imedia_tv_background.png
```
Ajout du fond de lancement :
```txt
app/src/main/res/drawable/launch_background.xml
```
Modification du thème :
```txt
app/src/main/res/values/themes.xml
```
### 12.3. Résultat attendu
Au lancement :
- affichage du visuel iMedia TV+ ;
- disparition de l’écran blanc ;
- message de chargement superposé pendant la connexion automatique.
---
## 13. Live TV
### 13.1. Endpoints utilisés
Catégories Live :
```txt
/player_api.php?action=get_live_categories
```
Chaînes Live :
```txt
/player_api.php?action=get_live_streams
```
### 13.2. Fonctionnalités
- affichage des catégories ;
- recherche de catégories ;
- recherche de chaînes ;
- filtrage par catégorie ;
- logo chaîne ;
- compteur chaînes ;
- favoris ;
- chaîne épinglée ;
- zapping gauche/droite ;
- retour vers la même chaîne ;
- focus restauré sur la chaîne après retour du lecteur ;
- boutons accessibles avec la télécommande.
### 13.3. URL de lecture Live
```txt
/live/username/password/stream_id.m3u8
```
Fallback possible selon fournisseur :
```txt
/live/username/password/stream_id.ts
```
---
## 14. Tri des catégories
### 14.1. Objectif
Trier les catégories dans cet ordre :
1. catégories françaises ;
2. catégories arabes ;
3. autres catégories.
### 14.2. Catégories prioritaires
Les catégories internes restent toujours en haut :
- Toutes les chaînes ;
- Toutes les VOD ;
- Toutes les séries ;
- Favoris.
### 14.3. Fichier utilitaire
```txt
util/CategorySortUtils.kt
```
### 14.4. Écrans concernés
- Live TV ;
- Guide TV global ;
- VOD ;
- Séries.
---
## 15. Favoris Live
### 15.1. Fonctionnalités
- ajout / retrait d’une chaîne favorite ;
- catégorie automatique `★ Favoris` ;
- sauvegarde persistante ;
- badge favori ;
- focus compatible télécommande.
### 15.2. Comportement
Dans une ligne chaîne :
- OK sur le nom : regarder ;
- bouton `★` : ajouter / retirer favori ;
- bouton `Pin` : épingler.
---
## 16. Chaîne épinglée
### 16.1. Objectif
Permettre à l’utilisateur de choisir une chaîne à ouvrir rapidement au démarrage.
### 16.2. Comportement
- une seule chaîne épinglée à la fois ;
- sauvegarde persistante ;
- bouton d’épinglage dans la ligne chaîne ;
- possibilité de désépingler.
### 16.3. Remarque
La chaîne épinglée est prévue comme point de démarrage rapide. Selon l’état de l’application, elle peut être utilisée pour ouvrir directement la chaîne ou faciliter son accès.
---
## 17. Lecteur vidéo
### 17.1. Fichier principal
```txt
ui/screens/PlayerScreen.kt
```
### 17.2. Fonctionnalités
- lecture Live ;
- lecture Replay ;
- lecture VOD ;
- lecture épisodes séries ;
- affichage du nom ;
- affichage du logo ;
- affichage de la résolution ;
- overlay temporaire ;
- gestion retour ;
- zapping gauche/droite.
### 17.3. Overlay
L’overlay affiche :
- logo ;
- nom de la chaîne / VOD / épisode ;
- résolution détectée ;
- programme en cours si disponible ;
- badge Replay si replay ;
- badge Favori si applicable.
### 17.4. Disparition automatique
Les informations disparaissent après environ **3 secondes**.
### 17.5. Bouton retour
Comportement demandé :
- premier appui sur retour : réaffiche les informations ;
- deuxième appui sur retour : retour au menu.
### 17.6. Zapping
Pendant le Live :
- bouton gauche : chaîne précédente ;
- bouton droite : chaîne suivante.
---
## 18. Résolution affichée
### 18.1. Objectif
Afficher la résolution du flux vidéo dans le lecteur.
### 18.2. Source
La résolution est récupérée depuis le format vidéo exposé par ExoPlayer.
Exemples d’affichage :
```txt
1920x1080
1280x720
SD
HD
FHD
```
Selon les données disponibles, l’app affiche la résolution exacte ou un fallback.
---
## 19. Logos chaînes
### 19.1. Source
Champ Xtream :
```txt
stream_icon
```
### 19.2. Composant
```txt
ui/components/ChannelLogo.kt
```
### 19.3. Comportement
- chargement du logo distant ;
- fallback avec initiales si absent ;
- fallback si URL cassée ;
- affichage dans liste Live ;
- affichage dans lecteur.
---
## 20. EPG court
### 20.1. Endpoint
```txt
/player_api.php?action=get_short_epg
```
### 20.2. Utilisation
Affichage dans la liste Live :
- programme en cours ;
- programme suivant ;
- disponibilité replay.
### 20.3. Modèles
```txt
EpgProgramDto.kt
EpgShortResponse.kt
```
### 20.4. Correction effectuée
Une erreur Kotlin a été corrigée dans une Regex :
Ancienne forme invalide :
```kotlin
Regex("(\d{2}:\d{2})")
```
Correction :
```kotlin
Regex("""(\d{2}:\d{2})""")
```
---
## 21. Replay / Catch-up TV
### 21.1. Objectif initial
Le replay fonctionnait, mais lançait directement un replay sans donner le choix de l’émission.
### 21.2. Correction demandée
Pour chaque chaîne, l’utilisateur doit pouvoir :
- ouvrir la liste des programmes disponibles ;
- voir les jours disponibles ;
- choisir l’émission ;
- lancer le replay de cette émission.
### 21.3. Endpoint guide complet
```txt
/player_api.php?action=get_simple_data_table&stream_id=STREAM_ID
```
### 21.4. URL Replay
```txt
/timeshift/username/password/durée/date/stream_id.ts
```
### 21.5. Écran dédié
```txt
ui/screens/ReplayGuideScreen.kt
```
### 21.6. Fonctionnalités
- liste des émissions disponibles ;
- regroupement par jour ;
- recherche d’émission ;
- bouton Revoir ;
- retour vers la chaîne sélectionnée ;
- lecture replay avec badge spécifique.
---
## 22. Guide TV global
### 22.1. Objectif
Ajouter un écran de guide TV complet avec toutes les chaînes et tous les programmes disponibles.
### 22.2. Écran ajouté
```txt
ui/screens/ProgramGuideScreen.kt
```
### 22.3. Fonctionnalités
- liste des catégories ;
- liste des chaînes ;
- recherche catégorie ;
- recherche chaîne ;
- recherche émission ;
- chargement du programme complet de la chaîne sélectionnée ;
- bouton Direct ;
- bouton Revoir si replay disponible.
### 22.4. Correction du focus
Problème rencontré :
- la zone de recherche perdait le focus après saisie d’une lettre.
Correction :
- le focus automatique sur la chaîne ne se déclenche plus pendant la saisie ;
- le focus revient sur la chaîne uniquement après retour depuis lecteur ou guide.
---
## 23. VOD
### 23.1. Endpoints
Catégories VOD :
```txt
/player_api.php?action=get_vod_categories
```
Films VOD :
```txt
/player_api.php?action=get_vod_streams
```
### 23.2. Écran
```txt
ui/screens/VodScreen.kt
```
### 23.3. Fonctionnalités
- catégories VOD ;
- recherche catégorie ;
- recherche film ;
- affiches ;
- favoris ;
- catégorie `★ Favoris` ;
- lecture film.
### 23.4. URL de lecture VOD
```txt
/movie/username/password/stream_id.extension
```
L’extension vient de :
```txt
container_extension
```
Fallback :
```txt
mp4
```
---
## 24. Séries
### 24.1. Endpoints
Catégories séries :
```txt
/player_api.php?action=get_series_categories
```
Liste séries :
```txt
/player_api.php?action=get_series
```
Détail série :
```txt
/player_api.php?action=get_series_info&series_id=SERIES_ID
```
### 24.2. Écran
```txt
ui/screens/SeriesScreen.kt
```
### 24.3. Fonctionnalités
- catégories séries ;
- recherche catégorie ;
- recherche série ;
- affiches ;
- saisons ;
- épisodes ;
- recherche épisode ;
- favoris séries ;
- catégorie `★ Favoris` ;
- lecture épisode.
### 24.4. URL lecture épisode
```txt
/series/username/password/episode_id.extension
```
Fallback :
```txt
mp4
```
### 24.5. Correction noms épisodes
Problème :
- les noms des épisodes apparaissaient sous forme de points ou étaient vides.
Correction :
- utilisation de plusieurs champs possibles :
- `title`
- `name`
- `episode_name`
Fallback lisible :
```txt
Épisode 1 • Nom de la série
Épisode 2 • Nom de la série
```
---
## 25. Favoris VOD et Séries
### 25.1. VOD
Fonctionnalités ajoutées :
- bouton `☆ / ★` sur chaque film ;
- catégorie automatique `★ Favoris` ;
- badge favori ;
- sauvegarde persistante.
### 25.2. Séries
Fonctionnalités ajoutées :
- bouton `☆ / ★` sur chaque série ;
- catégorie automatique `★ Favoris` ;
- badge favori ;
- sauvegarde persistante.
### 25.3. Stockage
Stockage dans `ConfigStorage.kt`.
---
## 26. Navigation télécommande
### 26.1. Navigation générale
L’application est pensée pour la télécommande Google TV :
- haut / bas : navigation dans les listes ;
- gauche / droite : passage entre zones ou zapping dans lecteur ;
- OK : sélection ;
- retour : retour contextuel ou confirmation.
### 26.2. Menu Live
- focus sur catégories ;
- focus sur chaîne ;
- actions accessibles dans la ligne chaîne ;
- retour depuis lecteur vers la même chaîne.
### 26.3. Lecteur
- gauche : chaîne précédente ;
- droite : chaîne suivante ;
- retour : afficher overlay, puis revenir au menu.
### 26.4. Menu principal
Quand l’utilisateur clique sur retour dans le menu :
- une confirmation de sortie est affichée.
---
## 27. Design UI
### 27.1. Évolution
L’interface a été progressivement corrigée :
1. première version trop massive ;
2. réduction des textes ;
3. réduction des zones ;
4. correction du contraste dans les zones de texte ;
5. affichage lisible des noms de chaînes ;
6. correction des boutons Favori / Épingler inaccessibles ;
7. actions déplacées dans les lignes ;
8. focus restauré sur la chaîne.
### 27.2. Problèmes corrigés
- texte trop gros ;
- boutons trop grands ;
- champs sombres avec texte sombre ;
- noms de chaînes masqués ;
- impossibilité d’atteindre Favori / Épingler ;
- focus dans les champs de recherche après retour ;
- affichage des épisodes incomplet.
---
## 28. Écrans principaux
### 28.1. LoginScreen
```txt
ui/screens/LoginScreen.kt
```
Rôle :
- saisie serveur ;
- saisie username ;
- saisie password ;
- vérification compte ;
- sauvegarde si connexion réussie.
### 28.2. HomeScreen
```txt
ui/screens/HomeScreen.kt
```
Rôle :
- Live TV ;
- catégories ;
- chaînes ;
- favoris ;
- épinglage ;
- recherche ;
- accès Guide TV ;
- accès VOD ;
- accès Séries.
### 28.3. PlayerScreen
```txt
ui/screens/PlayerScreen.kt
```
Rôle :
- lecture vidéo ;
- overlay ;
- résolution ;
- retour ;
- zapping.
### 28.4. ReplayGuideScreen
```txt
ui/screens/ReplayGuideScreen.kt
```
Rôle :
- replay par chaîne ;
- choix de l’émission ;
- recherche émission ;
- lecture catch-up.
### 28.5. ProgramGuideScreen
```txt
ui/screens/ProgramGuideScreen.kt
```
Rôle :
- guide TV global ;
- chaînes + programmes ;
- direct ;
- replay.
### 28.6. VodScreen
```txt
ui/screens/VodScreen.kt
```
Rôle :
- catalogue films ;
- catégories ;
- recherche ;
- favoris ;
- lecture.
### 28.7. SeriesScreen
```txt
ui/screens/SeriesScreen.kt
```
Rôle :
- catalogue séries ;
- catégories ;
- saisons ;
- épisodes ;
- favoris ;
- lecture.
---
## 29. Modèles principaux
### 29.1. XtreamConfig
```txt
serverUrl
username
password
```
### 29.2. LiveStreamDto
Champs typiques :
```txt
name
stream_id
stream_icon
category_id
epg_channel_id
tv_archive
has_archive
container_extension
```
### 29.3. LiveCategoryDto
```txt
category_id
category_name
parent_id
```
### 29.4. EpgProgramDto
Champs possibles selon serveur :
```txt
title
description
start
end
start_timestamp
stop_timestamp
```
### 29.5. VOD
Champs typiques :
```txt
name
stream_id
stream_icon
category_id
container_extension
rating
added
```
### 29.6. Séries
Champs typiques :
```txt
series_id
name
cover
category_id
genre
plot
cast
rating
```
### 29.7. Épisodes
Champs typiques :
```txt
id
episode_num
title
name
episode_name
container_extension
info
```
---
## 30. Génération d’URL
### 30.1. Fichier
```txt
util/XtreamUrlBuilder.kt
```
### 30.2. Live
```txt
/live/username/password/stream_id.m3u8
```
### 30.3. VOD
```txt
/movie/username/password/stream_id.extension
```
### 30.4. Série
```txt
/series/username/password/episode_id.extension
```
### 30.5. Replay
```txt
/timeshift/username/password/durée/date/stream_id.ts
```
---
## 31. Historique des mises à jour
### 31.1. Version initiale
Ajout :
- projet Android TV ;
- connexion Xtream ;
- lecture Live ;
- Media3 ExoPlayer ;
- Retrofit ;
- écran Login ;
- écran Home ;
- lecteur vidéo.
### 31.2. Correction environnement
Ajout / correction :
- Gradle Wrapper ;
- configuration Java ;
- configuration Android SDK ;
- suppression plugin Kotlin obsolète ;
- correction mémoire Gradle.
### 31.3. Correction lancement Google TV
Ajout :
```xml
LAUNCHER
LEANBACK_LAUNCHER
```
Résultat :
- bouton Ouvrir actif ;
- lancement via Google TV ;
- lancement via ADB.
### 31.4. Mémoire Xtream
Ajout :
- `ConfigStorage.kt` ;
- sauvegarde identifiants ;
- connexion automatique ;
- déconnexion.
### 31.5. Catégories Live
Ajout :
- `get_live_categories` ;
- affichage catégories ;
- filtrage chaînes ;
- catégorie Toutes.
### 31.6. UI avancée
Ajout :
- design sophistiqué ;
- favoris Live ;
- état de retour ;
- chaîne épinglée ;
- résolution ;
- recherche catégorie ;
- recherche chaîne ;
- zapping gauche/droite.
### 31.7. UI compacte
Correction :
- textes réduits ;
- champs plus petits ;
- meilleurs contrastes ;
- noms chaînes visibles.
### 31.8. Focus actions
Correction :
- boutons Favori / Épingler accessibles ;
- actions dans chaque ligne.
### 31.9. Player back/focus
Ajout :
- overlay 3 secondes ;
- retour en deux étapes ;
- confirmation sortie ;
- focus sur chaîne après retour.
### 31.10. Logos
Ajout :
- logos chaînes ;
- logos dans lecteur ;
- fallback initiales.
### 31.11. EPG + Replay
Ajout :
- EPG court ;
- programme en cours ;
- programme suivant ;
- replay de base.
### 31.12. Correction EPG Regex
Correction :
- chaîne brute Kotlin pour Regex horaire.
### 31.13. Replay Guide complet
Ajout :
- guide replay par chaîne ;
- liste des émissions ;
- choix émission ;
- replay spécifique.
### 31.14. Guide TV global
Ajout :
- écran guide TV toutes chaînes ;
- programmes complets ;
- recherche émission ;
- direct / replay.
### 31.15. VOD + Séries
Ajout :
- catalogue films ;
- catalogue séries ;
- catégories VOD ;
- catégories séries ;
- saisons ;
- épisodes ;
- lecture VOD ;
- lecture séries.
### 31.16. Favoris VOD + Séries
Ajout :
- favoris films ;
- favoris séries ;
- catégories Favoris ;
- badges.
### 31.17. Correction noms épisodes
Correction :
- affichage titres épisodes ;
- fallback épisode lisible.
### 31.18. Tri catégories
Ajout :
- catégories françaises en premier ;
- catégories arabes ensuite ;
- autres catégories après.
### 31.19. Splash iMedia TV+
Ajout :
- image de démarrage ;
- suppression écran blanc ;
- thème launch background.
---
## 32. Points connus / limites
### 32.1. Dépendance fournisseur
Certaines fonctions dépendent entièrement du serveur Xtream :
- logos ;
- EPG ;
- replay ;
- noms épisodes ;
- durée ;
- extension ;
- catégories propres.
Si le serveur renvoie des données vides ou incohérentes, l’application applique des fallbacks.
### 32.2. Replay
Le replay ne fonctionne que si le serveur fournit :
- `tv_archive` ;
- `has_archive` ;
- données EPG complètes ;
- dates exploitables ;
- durée correcte.
### 32.3. VOD / Séries
Les affiches, catégories, noms et épisodes dépendent aussi de la qualité des métadonnées Xtream.
### 32.4. Sécurité
Les identifiants sont stockés en `SharedPreferences`.
Amélioration recommandée :
- passer à `EncryptedSharedPreferences` ou solution équivalente ;
- éviter tout log contenant username/password.
---
## 33. Roadmap recommandée
### 33.1. Priorité haute
- sécuriser le stockage des identifiants ;
- optimiser le chargement EPG global ;
- ajouter cache local EPG ;
- ajouter historique de lecture ;
- reprendre la lecture VOD / séries ;
- améliorer la page détail VOD ;
- améliorer la page détail série ;
- ajouter choix audio / sous-titres ;
- ajouter option qualité / fallback TS-HLS.
### 33.2. Priorité moyenne
- profils utilisateurs ;
- contrôle parental ;
- thème clair/sombre ;
- tri personnalisé des catégories ;
- masquer catégories inutiles ;
- recherche globale Live + VOD + Séries ;
- écran paramètres ;
- export/import configuration.
### 33.3. Priorité produit
- icône finale ;
- bannière Android TV ;
- politique de confidentialité ;
- conditions d’utilisation ;
- version release signée ;
- préparation publication Play Store TV.
---
## 34. Commandes utiles
### 34.1. Compiler
```powershell
cd "D:\07-Logiciels\11-IPTV Andoid TV 2"
.\gradlew.bat clean --no-daemon
.\gradlew.bat :app:assembleDebug --no-daemon
```
### 34.2. Installer
```powershell
adb install -r ".\app\build\outputs\apk\debug\app-debug.apk"
```
### 34.3. Lancer
```powershell
adb shell am start -n ma.tkgraph.xtreamtv/.MainActivity
```
### 34.4. Voir appareils
```powershell
adb devices
```
### 34.5. Logs
```powershell
adb logcat | findstr ma.tkgraph
```
### 34.6. Désinstaller
```powershell
adb uninstall ma.tkgraph.xtreamtv
```
---
## 35. Sauvegardes recommandées
Avant chaque grande mise à jour :
```powershell
Copy-Item "D:\07-Logiciels\11-IPTV Andoid TV 2" "D:\07-Logiciels\11-IPTV Andoid TV 2 - Backup NOM_VERSION" -Recurse
```
Exemples de sauvegardes utilisées :
```txt
OK lancement
OK mémoire Xtream
Backup avant categories
Backup avant UI compacte
Backup avant EPG replay
Backup avant VOD series
Backup avant splash iMedia
```
---
## 36. Résumé fonctionnel actuel
| Fonction | Statut |
|---|---|
| Connexion Xtream | OK |
| Mémoire identifiants | OK |
| Google TV launcher | OK |
| Live TV | OK |
| Catégories Live | OK |
| Recherche catégories | OK |
| Recherche chaînes | OK |
| Logos chaînes | OK |
| Favoris chaînes | OK |
| Chaîne épinglée | OK |
| Zapping gauche/droite | OK |
| Résolution lecteur | OK |
| Overlay lecteur auto-hide | OK |
| Retour en deux étapes | OK |
| Confirmation quitter | OK |
| EPG court | OK |
| Replay de base | OK |
| Guide replay par chaîne | OK |
| Guide TV global | OK |
| VOD | OK |
| Séries | OK |
| Favoris VOD | OK |
| Favoris séries | OK |
| Tri catégories FR / AR / autres | OK |
| Splash iMedia TV+ | OK |
---
## 37. Conclusion
Le projet est passé d’un simple lecteur Xtream expérimental à une application Google TV structurée avec :
- Live TV ;
- EPG ;
- Replay ;
- Guide TV ;
- VOD ;
- Séries ;
- favoris ;
- logos ;
- écran de démarrage personnalisé ;
- navigation télécommande ;
- sauvegarde locale.
La prochaine étape sérieuse consiste à stabiliser, sécuriser et optimiser :
1. stockage chiffré ;
2. cache local ;
3. performances EPG ;
4. design final ;
5. signature release ;
6. publication éventuelle.
Fin du document. Le logiciel fonctionne, ce qui reste un événement statistiquement respectable.