Bei einfachen Anwendungsfällen besteht der Einstieg in ExoPlayer
aus den folgenden Schritten:
- Fügen Sie Ihrem Projekt ExoPlayer als Abhängigkeit hinzu.
- Erstellen Sie eine
ExoPlayer
-Instanz. - Fügen Sie den Player einer Ansicht hinzu (für Videoausgabe und Nutzereingaben).
- Lege dem Spieler eine
MediaItem
zum Spielen bereit. - Lassen Sie den Player los, wenn Sie fertig sind.
Diese Schritte werden unten genauer beschrieben. Ein vollständiges Beispiel finden Sie unter PlayerActivity
in der Hauptdemo-App.
ExoPlayer als Abhängigkeit hinzufügen
ExoPlayer-Module hinzufügen
Die einfachste Möglichkeit, mit AndroidX Media3 zu beginnen, besteht darin, in der build.gradle
-Datei Ihres App-Moduls gradle-Abhängigkeiten zu den benötigten Bibliotheken hinzuzufügen.
Wenn du beispielsweise ExoPlayer mit DASH-Wiedergabeunterstützung und UI-Komponenten verwenden möchtest, kannst du Abhängigkeiten zu den Modulen so hinzufügen:
Kotlin
implementation("androidx.media3:media3-exoplayer:1.4.1") implementation("androidx.media3:media3-exoplayer-dash:1.4.1") implementation("androidx.media3:media3-ui:1.4.1")
Groovy
implementation "androidx.media3:media3-exoplayer:1.4.1" implementation "androidx.media3:media3-exoplayer-dash:1.4.1" implementation "androidx.media3:media3-ui:1.4.1"
Dabei ist 1.4.1 die gewünschte Version. Die neueste Version finden Sie in den Versionshinweisen. Alle Module müssen dieselbe Version haben.
AndroidX Media3 enthält Bibliotheksmodule, die für zusätzliche Funktionen auf externen Bibliotheken basieren. Einige sind im Maven-Repository verfügbar, andere müssen manuell erstellt werden. Weitere Informationen finden Sie im Verzeichnis der Bibliotheken und in den einzelnen README-Dateien.
Weitere Informationen zu den verfügbaren Bibliotheksmodulen finden Sie auf der Google Maven AndroidX Media-Seite.
Java 8-Unterstützung aktivieren
Wenn die Java 8-Unterstützung noch nicht aktiviert ist, musst du sie in allen build.gradle
-Dateien aktivieren, die vom ExoPlayer abhängen. Füge dazu Folgendes in den Abschnitt android
ein:
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
}
Multidex aktivieren
Wenn Ihre Gradle-minSdkVersion
20 oder niedriger ist, sollten Sie Multidex aktivieren, um Buildfehler zu vermeiden.
Player erstellen
Sie können eine ExoPlayer
-Instanz mit ExoPlayer.Builder
erstellen, die eine Reihe von Anpassungsoptionen bietet. Der folgende Code ist das einfachste Beispiel für das Erstellen einer Instanz.
Kotlin
val player = ExoPlayer.Builder(context).build()
Java
ExoPlayer player = new ExoPlayer.Builder(context).build();
Hinweis zu Threads
Der Zugriff auf ExoPlayer-Instanzen muss über einen einzigen Anwendungs-Thread erfolgen. In den allermeisten Fällen sollte dies der Hauptthread der Anwendung sein. Die Verwendung des Hauptthreads der Anwendung ist erforderlich, wenn du die UI-Komponenten von ExoPlayer oder die IMA-Erweiterung verwendest.
Der Thread, auf den eine ExoPlayer-Instanz zugreifen muss, kann explizit angegeben werden, indem beim Erstellen des Players ein Looper
übergeben wird. Wenn kein Looper
angegeben ist, wird das Looper
des Threads verwendet, in dem der Player erstellt wird. Wenn dieser Thread kein Looper
hat, wird das Looper
des Hauptthreads der Anwendung verwendet. In allen Fällen kann die Looper
des Threads, über den auf den Spieler zugegriffen werden muss, mit Player.getApplicationLooper
abgefragt werden.
Weitere Informationen zum Thread-Modell von ExoPlayer findest du im Abschnitt „Threading-Modell“ der ExoPlayer-Javadocs.
Player an eine Ansicht anhängen
Die ExoPlayer-Bibliothek bietet eine Reihe vorgefertigter UI-Komponenten für die Medienwiedergabe. Dazu gehört PlayerView
, das ein PlayerControlView
, ein SubtitleView
und ein Surface
umschließt, auf das das Video gerendert wird. Ein PlayerView
kann in das Layout-XML Ihrer Anwendung aufgenommen werden.
So bindest du den Player beispielsweise an die Ansicht:
Kotlin
// Bind the player to the view. playerView.player = player
Java
// Bind the player to the view. playerView.setPlayer(player);
Sie können PlayerControlView
auch als eigenständige Komponente verwenden. Das ist nützlich für Anwendungsfälle, die sich nur auf Audio beziehen.
Die Verwendung der vordefinierten UI-Komponenten von ExoPlayer ist optional. Bei Video-Apps, die eine eigene Benutzeroberfläche implementieren, kann das Ziel SurfaceView
, TextureView
, SurfaceHolder
oder Surface
mit den Methoden setVideoSurfaceView
, setVideoTextureView
, setVideoSurfaceHolder
und setVideoSurface
von ExoPlayer festgelegt werden. Mit der addTextOutput
-Methode von ExoPlayer können Untertitel empfangen werden, die während der Wiedergabe gerendert werden sollen.
Playlist mit Inhalten füllen und Player vorbereiten
In ExoPlayer wird jedes Medienelement durch eine MediaItem
dargestellt. Wenn du ein Medium abspielen möchtest, musst du ein entsprechendes MediaItem
erstellen, es dem Player hinzufügen, den Player vorbereiten und play
aufrufen, um die Wiedergabe zu starten:
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 unterstützt Playlists direkt. Du kannst den Player also mit mehreren Medienelementen vorbereiten, die nacheinander wiedergegeben werden sollen:
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();
Die Playlist kann während der Wiedergabe aktualisiert werden, ohne dass der Player neu vorbereitet werden muss. Weitere Informationen zum Befüllen und Bearbeiten der Playlist findest du auf der Playlist-Seite. Weitere Informationen zu den verschiedenen Optionen beim Erstellen von Medienelementen, z. B. zum Zuschneiden und Anhängen von Untertiteldateien, findest du auf der Seite „Medieneinträge“.
Player steuern
Nachdem der Player vorbereitet wurde, kann die Wiedergabe durch Aufrufen von Methoden auf dem Player gesteuert werden. Hier sind einige der am häufigsten verwendeten Methoden:
- Mit
play
undpause
können Sie die Wiedergabe starten und pausieren. - Mit
seekTo
können Sie in den Medien vor- und zurückspringen. - Mit
hasPrevious
,hasNext
,previous
undnext
kannst du durch die Playlist navigieren. - Mit
setRepeatMode
wird festgelegt, ob und wie Medien in einer Schleife abgespielt werden. - Mit
setShuffleModeEnabled
kannst du die Zufallswiedergabe der Playlist steuern. - Mit
setPlaybackParameters
kannst du die Wiedergabegeschwindigkeit und die Tonlage anpassen.
Wenn der Player an eine PlayerView
oder PlayerControlView
gebunden ist, werden durch die Nutzerinteraktion mit diesen Komponenten entsprechende Methoden auf dem Player aufgerufen.
Spieler freigeben
Es ist wichtig, den Player freizugeben, wenn er nicht mehr benötigt wird, damit begrenzte Ressourcen wie Videodekoder für andere Anwendungen freigegeben werden können. Rufen Sie dazu ExoPlayer.release
auf.