Media3 / ExoPlayer pour Kotlin : guide complet avec exemples
1. Qu'est-ce que c'est et pourquoi l'utiliser
Media3 (anciennement connu sous le nom ExoPlayer) est une bibliothèque moderne, puissante et flexible pour la lecture audio et vidéo sur la plateforme Android, développée par Google. Elle succède au vétuste MediaPlayer du SDK Android et offre des fonctionnalités bien plus étendues, de meilleures performances et un contrôle accru sur le processus de lecture.
Pourquoi utiliser Media3 / ExoPlayer ? Contrairement au MediaPlayer standard, qui ne convient qu'aux tâches les plus simples, ExoPlayer donne au développeur un contrôle total sur le pipeline multimédia. Elle prend en charge de nombreux formats (DASH, HLS, SmoothStreaming, MP4, MP3, WebM, etc.), la commutation adaptative du débit (ABR), la personnalisation du rendu, la gestion des sous-titres (y compris WebVTT, TTML), la protection DRM (Widevine, PlayReady) et bien plus encore. La bibliothèque est activement développée, optimisée et utilisée dans des applications comme YouTube, Google Photos et de nombreux autres services populaires.
Pour les développeurs Kotlin, Media3 est la norme de facto pour créer toute application multimédia : du simple lecteur de musique au lecteur vidéo complexe avec streaming adaptatif et support DRM. Elle permet d'écrire un code propre, modulaire et testable, tout en contrôlant entièrement le cycle de vie de la lecture.
2. Installation
Media3 est une bibliothèque Android, elle s'installe donc via le système de build Gradle. Ajoutez les dépendances suivantes dans votre fichier build.gradle.kts (ou build.gradle) de votre module app :
// build.gradle.kts (Module :app)
dependencies {
// Bibliothèque de base Media3 (obligatoire)
implementation("androidx.media3:media3-exoplayer:1.4.1")
// Composants UI (PlayerView, PlayerControlView, etc.)
implementation("androidx.media3:media3-ui:1.4.1")
// Pour le support HLS (HTTP Live Streaming)
implementation("androidx.media3:media3-exoplayer-hls:1.4.1")
// Pour le support DASH (Dynamic Adaptive Streaming over HTTP)
implementation("androidx.media3:media3-exoplayer-dash:1.4.1")
// Pour le support SmoothStreaming
implementation("androidx.media3:media3-exoplayer-rtsp:1.4.1")
// Pour le support des sous-titres
implementation("androidx.media3:media3-exoplayer-ima:1.4.1")
// Pour le support DRM (Widevine)
implementation("androidx.media3:media3-exoplayer-drm:1.4.1")
// Pour la gestion des sessions (MediaSession) — obligatoire pour l'intégration avec les contrôles système
implementation("androidx.media3:media3-session:1.4.1")
// Pour les sources de données personnalisées (ex : mise en cache)
implementation("androidx.media3:media3-datasource:1.4.1")
// Pour les codecs personnalisés (ex : FFmpeg)
implementation("androidx.media3:media3-decoder:1.4.1")
// Pour les effets personnalisés (ex : changement de vitesse)
implementation("androidx.media3:media3-effect:1.4.1")
// Pour les transformations personnalisées (ex : recadrage vidéo)
implementation("androidx.media3:media3-transformer:1.4.1")
}
Important : Les versions peuvent changer. Vous pouvez toujours trouver la version la plus récente sur la page officielle des versions.
Après avoir ajouté les dépendances, effectuez une synchronisation Gradle (Sync Now) dans Android Studio.
3. Démarrage rapide — exemple minimal fonctionnel
Créons un lecteur vidéo très simple qui lit une vidéo depuis Internet. Pour cela, nous aurons besoin d'un PlayerView dans le fichier XML de mise en page et du code dans l'Activity ou le Fragment.
Étape 1 : Mise en page (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="htt Aussi dans la bibliothèque
Mise en cache en Java : Redis, Caffeine, Ehcache — guide complet
Bibliothèque standard Swift : aperçu complet pour iOS/macOS
Métriques Prometheus en Rust : bibliothèques prometheus et metrics-exporter-prometheus
Planificateur de tâches PHP : guide complet sur les tâches cron et le Task Scheduler