1579 lines
26 KiB
Markdown
1579 lines
26 KiB
Markdown
# 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.
|