Erste Schritte

Bei einfachen Anwendungsfällen besteht der Einstieg in ExoPlayer aus den folgenden Schritten:

  1. Fügen Sie Ihrem Projekt ExoPlayer als Abhängigkeit hinzu.
  2. Erstellen Sie eine ExoPlayer-Instanz.
  3. Fügen Sie den Player einer Ansicht hinzu (für Videoausgabe und Nutzereingaben).
  4. Lege dem Spieler eine MediaItem zum Spielen bereit.
  5. 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 und pause können Sie die Wiedergabe starten und pausieren.
  • Mit seekTo können Sie in den Medien vor- und zurückspringen.
  • Mit hasPrevious, hasNext, previous und next 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.