Pour les cas d'utilisation simples, la prise en main de ExoPlayer
consiste à implémenter les étapes suivantes :
- Ajoutez ExoPlayer en tant que dépendance à votre projet.
- Créez une instance
ExoPlayer
. - Associez le lecteur à une vue (pour la sortie vidéo et l'entrée utilisateur).
- Préparez le lecteur avec un
MediaItem
pour la lecture. - Relâchez le lecteur lorsque vous avez terminé.
Ces étapes sont décrites plus en détail ci-dessous. Pour obtenir un exemple complet, consultez PlayerActivity
dans l'application de démonstration principale.
Ajouter ExoPlayer en tant que dépendance
Ajouter des modules ExoPlayer
Le moyen le plus simple de commencer à utiliser AndroidX Media3 consiste à ajouter des dépendances Gradle sur les bibliothèques dont vous avez besoin dans le fichier build.gradle
de votre module d'application.
Par exemple, pour dépendre d'ExoPlayer avec la prise en charge de la lecture DASH et des composants d'UI, vous pouvez ajouter des dépendances sur les modules comme suit :
Kotlin
implementation("androidx.media3:media3-exoplayer:1.7.1") implementation("androidx.media3:media3-exoplayer-dash:1.7.1") implementation("androidx.media3:media3-ui:1.7.1") implementation("androidx.media3:media3-ui-compose:1.7.1")
Groovy
implementation "androidx.media3:media3-exoplayer:1.7.1" implementation "androidx.media3:media3-exoplayer-dash:1.7.1" implementation "androidx.media3:media3-ui:1.7.1" implementation("androidx.media3:media3-ui-compose:1.7.1")
où 1.7.1 est la version de votre choix (vous trouverez la dernière version dans les notes de version). Tous les modules doivent être de la même version.
AndroidX Media3 comporte des modules de bibliothèque qui dépendent de bibliothèques externes pour fournir des fonctionnalités supplémentaires. Certaines sont disponibles dans le dépôt Maven, tandis que d'autres doivent être créées manuellement. Parcourez le répertoire des bibliothèques et consultez les fichiers README individuels pour en savoir plus.
Pour en savoir plus sur les modules de bibliothèque disponibles, consultez la page Google Maven AndroidX Media.
Activer la prise en charge de Java 8
Si ce n'est pas déjà fait, vous devez activer au moins la compatibilité avec Java 8 dans tous les fichiers build.gradle
qui dépendent d'ExoPlayer, en ajoutant ce qui suit à la section android
:
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
}
Créer le lecteur
Vous pouvez créer une instance ExoPlayer
à l'aide de ExoPlayer.Builder
, qui offre un large éventail d'options de personnalisation. Le code suivant est l'exemple le plus simple de création d'une instance.
Kotlin
val player = ExoPlayer.Builder(context).build()
Java
ExoPlayer player = new ExoPlayer.Builder(context).build();
Remarque sur les threads
Les instances ExoPlayer doivent être accessibles à partir d'un seul thread d'application. Dans la grande majorité des cas, il s'agit du thread principal de l'application. L'utilisation du thread principal de l'application est obligatoire lorsque vous utilisez les composants d'UI d'ExoPlayer ou l'extension IMA.
Le thread sur lequel une instance ExoPlayer doit être accessible peut être spécifié explicitement en transmettant un Looper
lors de la création du lecteur. Si aucun Looper
n'est spécifié, le Looper
du thread sur lequel le lecteur est créé est utilisé. Si ce thread n'a pas de Looper
, le Looper
du thread principal de l'application est utilisé. Dans tous les cas, le Looper
du thread à partir duquel le lecteur doit être accessible peut être interrogé à l'aide de Player.getApplicationLooper
.
Pour en savoir plus sur le modèle de threading d'ExoPlayer, consultez la section "Threading model" de la documentation Javadoc d'ExoPlayer.
Associer le lecteur à une vue
La bibliothèque ExoPlayer fournit une gamme de composants d'UI prédéfinis pour la lecture de contenus multimédias. Il s'agit notamment de PlayerView
, qui encapsule un PlayerControlView
, un SubtitleView
et un Surface
sur lesquels la vidéo est rendue. Un PlayerView
peut être inclus dans le fichier XML de mise en page de votre application.
Par exemple, pour lier le lecteur à la vue :
Kotlin
// Bind the player to the view. playerView.player = player
Java
// Bind the player to the view. playerView.setPlayer(player);
L'utilisation des composants d'UI prédéfinis d'ExoPlayer est facultative. Pour les applications vidéo qui implémentent leur propre UI, la SurfaceView
, TextureView
, SurfaceHolder
ou Surface
cible peut être définie à l'aide des méthodes setVideoSurfaceView
, setVideoTextureView
, setVideoSurfaceHolder
et setVideoSurface
d'ExoPlayer, respectivement. Le rappel Listener.onCues
peut être utilisé pour recevoir les sous-titres à afficher pendant la lecture, et setImageOutput
peut être utilisé pour recevoir les images décodées.
Pour une expérience utilisateur plus confortable, envisagez d'ajouter l'attribut keepScreenOn
ou de définir le verrouillage de l'écran sur ExoPlayer. Vous pouvez examiner d'autres actions qui maintiennent l'appareil en éveil sur les pages sur le travail en arrière-plan.
android:keepScreenOn="true"
Pour en savoir plus sur l'utilisation et la personnalisation des composants d'UI Media3, consultez la page UI.
Remplir la playlist et préparer le lecteur
Dans ExoPlayer, chaque contenu multimédia est représenté par un MediaItem
. Pour lire un contenu multimédia, vous devez créer un MediaItem
correspondant, l'ajouter au lecteur, préparer le lecteur et appeler play
pour démarrer la lecture :
Kotlin
// Build the media item. val mediaItem = MediaItem.fromUri(videoUri) // Set the media item to be played. player.setMediaItem(mediaItem) // Prepare the player. player.prepare() // Start the playback. player.play()
Java
// Build the media item. MediaItem mediaItem = MediaItem.fromUri(videoUri); // Set the media item to be played. player.setMediaItem(mediaItem); // Prepare the player. player.prepare(); // Start the playback. player.play();
ExoPlayer est compatible avec les playlists directement. Il est donc possible de préparer le lecteur avec plusieurs éléments multimédias à lire les uns après les autres :
Kotlin
// Build the media items. val firstItem = MediaItem.fromUri(firstVideoUri) val secondItem = MediaItem.fromUri(secondVideoUri) // Add the media items to be played. player.addMediaItem(firstItem) player.addMediaItem(secondItem) // Prepare the player. player.prepare() // Start the playback. player.play()
Java
// Build the media items. MediaItem firstItem = MediaItem.fromUri(firstVideoUri); MediaItem secondItem = MediaItem.fromUri(secondVideoUri); // Add the media items to be played. player.addMediaItem(firstItem); player.addMediaItem(secondItem); // Prepare the player. player.prepare(); // Start the playback. player.play();
La playlist peut être mise à jour pendant la lecture sans avoir à préparer à nouveau le lecteur. Pour en savoir plus sur l'ajout et la modification de playlists, consultez la page Playlists. Pour en savoir plus sur les différentes options disponibles lors de la création d'éléments multimédias, comme le découpage et l'ajout de fichiers de sous-titres, consultez la page Éléments multimédias.
Contrôler le lecteur
Une fois le lecteur préparé, la lecture peut être contrôlée en appelant des méthodes sur le lecteur. Voici quelques-unes des méthodes les plus couramment utilisées :
play
etpause
permettent de démarrer et de mettre en pause la lecture.seekTo
permet de parcourir le contenu multimédia.hasPrevious
,hasNext
,previous
etnext
permettent de parcourir la playlist.setRepeatMode
contrôle si et comment le contenu multimédia est lu en boucle.setShuffleModeEnabled
contrôle le mode aléatoire des playlists.setPlaybackParameters
: ajuste la vitesse de lecture et le ton de l'audio.
Si le lecteur est lié à un PlayerView
ou un PlayerControlView
, l'interaction de l'utilisateur avec ces composants entraînera l'appel des méthodes correspondantes sur le lecteur.
Libérer le joueur
Il est important de libérer le lecteur lorsqu'il n'est plus nécessaire, afin de libérer des ressources limitées telles que les décodeurs vidéo pour qu'elles puissent être utilisées par d'autres applications. Pour ce faire, appelez ExoPlayer.release
.