Für einfache Anwendungsfälle werden zum Einstieg in ExoPlayer
die folgenden Schritte implementiert:
- Fügen Sie Ihrem Projekt ExoPlayer als Abhängigkeit hinzu.
- Erstellen Sie eine
ExoPlayer
-Instanz. - Fügen Sie den Player zu einer Ansicht hinzu (für Videoausgabe und Nutzereingabe).
- Bereite den Spieler mit einem
MediaItem
zum Spielen vor. - Lassen Sie den Player dann los.
Diese Schritte werden unten ausführlicher beschrieben. Ein vollständiges Beispiel finden Sie unter PlayerActivity
in der Demo-Haupt-App.
ExoPlayer als Abhängigkeit hinzufügen
ExoPlayer-Module hinzufügen
Am einfachsten gelingt der Einstieg in AndroidX Media3, wenn Sie Gradle-Abhängigkeiten in den benötigten Bibliotheken in der Datei build.gradle
Ihres App-Moduls hinzufügen.
Wenn Sie beispielsweise auf ExoPlayer mit DASH-Wiedergabeunterstützung und UI-Komponenten angewiesen sind, können Sie den Modulen Abhängigkeiten wie folgt hinzufügen:
Kotlin
implementation("androidx.media3:media3-exoplayer:1.3.1") implementation("androidx.media3:media3-exoplayer-dash:1.3.1") implementation("androidx.media3:media3-ui:1.3.1")
Groovig
implementation "androidx.media3:media3-exoplayer:1.3.1" implementation "androidx.media3:media3-exoplayer-dash:1.3.1" implementation "androidx.media3:media3-ui:1.3.1"
wobei 1.3.1 Ihre bevorzugte Version ist (die neueste Version finden Sie in den Versionshinweisen). Alle Module müssen dieselbe Version haben.
AndroidX Media3 verfügt über Bibliotheksmodule, die von externen Bibliotheken abhängen, um zusätzliche Funktionen bereitzustellen. Einige sind im Maven-Repository verfügbar, andere müssen manuell erstellt werden. Weitere Informationen finden Sie im Bibliotheken-Verzeichnis 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
Falls noch nicht geschehen, musst du die Java 8-Unterstützung in allen build.gradle
-Dateien aktivieren, die von ExoPlayer abhängig sind. Füge dazu im Abschnitt android
Folgendes hinzu:
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
}
Multidex aktivieren
Wenn Ihre Gradle-minSdkVersion
-Datei 20 oder niedriger ist, sollten Sie Multidex aktivieren, um Build-Fehler zu vermeiden.
Player erstellen
Sie können eine ExoPlayer
-Instanz mit ExoPlayer.Builder
erstellen, das 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 zum Threading
Auf ExoPlayer-Instanzen muss von einem einzelnen Anwendungsthread aus zugegriffen werden. In den meisten Fällen sollte dies der Hauptthread der Anwendung sein. Bei Verwendung der UI-Komponenten von ExoPlayer oder der IMA-Erweiterung ist die Verwendung des Hauptthreads der Anwendung erforderlich.
Der Thread, auf den auf eine ExoPlayer-Instanz zugegriffen werden muss, kann explizit durch Übergabe eines Looper
beim Erstellen des Players angegeben werden. Wenn kein Looper
angegeben ist, wird der Looper
des Threads verwendet, in dem der Player erstellt wird. Wenn dieser Thread keine Looper
hat, wird der Looper
des Hauptthreads der Anwendung verwendet. In allen Fällen kann der Looper
des Threads, über den auf den Player zugegriffen werden muss, mit Player.getApplicationLooper
abgefragt werden.
Weitere Informationen zum Threading-Modell von ExoPlayer finden Sie im Abschnitt "Threading-Modell" von ExoPlayer-Javadoc.
Player an eine Ansicht anhängen
Die ExoPlayer-Bibliothek bietet eine Reihe vorgefertigter UI-Komponenten für die Medienwiedergabe. Dazu gehört PlayerView
, das einen PlayerControlView
-, einen SubtitleView
- und einen Surface
kapselt, in dem das Video gerendert wird. Ein PlayerView
kann in die Layout-XML-Datei deiner Anwendung aufgenommen werden.
So binden Sie beispielsweise den Player 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, was für reine Audio-Anwendungsfälle nützlich ist.
Die Verwendung der vordefinierten UI-Komponenten von ExoPlayer ist optional. Bei Video-Apps, die eine eigene Benutzeroberfläche implementieren, können die Ziel-SurfaceView
, TextureView
, SurfaceHolder
oder Surface
mit den ExoPlayer-Methoden setVideoSurfaceView
, setVideoTextureView
, setVideoSurfaceHolder
bzw. setVideoSurface
festgelegt werden. Die addTextOutput
-Methode von ExoPlayer kann verwendet werden, um Untertitel zu erhalten, die während der Wiedergabe gerendert werden sollen.
Die Playlist ausfüllen und den Player vorbereiten
In ExoPlayer wird jedes Medienelement durch einen MediaItem
dargestellt. Für die Wiedergabe eines Medienelements müssen Sie ein entsprechendes MediaItem
erstellen, 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 Media-Elementen für die nacheinander wiedergegebene 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 noch einmal vorbereitet werden muss. Weitere Informationen zum Ausfüllen und Bearbeiten von Playlists findest du auf der Seite „Playlists“. Weitere Informationen zu den verschiedenen Optionen, die beim Erstellen von Medienelementen verfügbar sind, z. B. zum Zuschneiden und Anhängen von Untertiteldateien, finden Sie auf der Seite „Medienelemente“.
Player steuern
Sobald der Player vorbereitet wurde, kann die Wiedergabe durch Aufrufen von Methoden auf dem Player gesteuert werden. Dies sind einige der am häufigsten verwendeten Methoden:
play
undpause
starten und pausieren die Wiedergabe.seekTo
ermöglicht die Suche innerhalb der Medien.hasPrevious
,hasNext
,previous
undnext
ermöglichen die Navigation in der Playlist.setRepeatMode
steuert, ob und wie Medien als Schleife wiedergegeben werden.setShuffleModeEnabled
steuert die Zufallswiedergabe von Playlists.setPlaybackParameters
passt die Wiedergabegeschwindigkeit und die Tonhöhe an.
Wenn der Player an PlayerView
oder PlayerControlView
gebunden ist, werden durch Nutzerinteraktionen mit diesen Komponenten die entsprechenden Methoden im Player aufgerufen.
Player loslassen
Es ist wichtig, den Player freizugeben, wenn er nicht mehr benötigt wird, um begrenzte Ressourcen wie Videodecoder für die Verwendung durch andere Anwendungen freizugeben. Rufen Sie dazu ExoPlayer.release
auf.