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. - Den Player an eine Ansicht anhängen (für Videoausgabe und Nutzereingaben)
- Bereite den Spieler mit
MediaItem
auf das Spiel vor. - 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")
Cool
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. Durchsuchen Sie das Bibliotheksverzeichnis. In den einzelnen README-Dateien finden Sie weitere Informationen.
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 die Gradle-minSdkVersion
von Version 20 oder niedriger ist, aktivieren Sie Multidex, um Build-Fehler 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. Bei Verwendung der UI-Komponenten von ExoPlayer oder der IMA-Erweiterung muss der Hauptthread der Anwendung verwendet werden.
Der Thread, auf den eine ExoPlayer-Instanz zugegriffen werden 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
-Objekt kapselt, in dem 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 Methode addTextOutput
von ExoPlayer können Untertitel empfangen werden, die während der Wiedergabe gerendert werden sollten.
Playlist mit Inhalten füllen und Player vorbereiten
In ExoPlayer wird jedes Medienelement durch eine MediaItem
dargestellt. Um ein Medienelement abzuspielen, müssen Sie 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. Daher kann der Player mit mehreren Medienelementen für die nacheinander abgespielte Wiedergabe vorbereitet werden:
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
Sobald der Player vorbereitet wurde, kann die Wiedergabe durch Aufrufen von Methoden im 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.