Erste Schritte

Bei einfachen Anwendungsfällen sollten Sie zum Einstieg in ExoPlayer die folgenden Schritte implementieren:

  1. Fügen Sie ExoPlayer als Abhängigkeit zu Ihrem Projekt hinzu.
  2. Erstellen Sie eine ExoPlayer-Instanz.
  3. Verbinden Sie den Player mit einer Ansicht (für die Videoausgabe und Nutzereingabe).
  4. Bereite den Spieler mit MediaItem auf das Spiel vor.
  5. Lassen Sie den Player los, wenn Sie fertig sind.

Diese Schritte werden im Folgenden ausführlicher beschrieben. Ein vollständiges Beispiel finden Sie in der Haupt-Demo-App unter PlayerActivity.

ExoPlayer als Abhängigkeit hinzufügen

ExoPlayer-Module hinzufügen

Die einfachste Möglichkeit, AndroidX Media3 zu verwenden, besteht darin, der Datei build.gradle Ihres App-Moduls Gradle-Abhängigkeiten zu den benötigten Bibliotheken hinzuzufügen.

Wenn Sie beispielsweise auf ExoPlayer mit DASH-Wiedergabeunterstützung und UI-Komponenten angewiesen sind, können Sie den Modulen Abhängigkeiten wie die folgenden 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")

Cool

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 hat Bibliotheksmodule, die für zusätzliche Funktionen von externen Bibliotheken abhängen. 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

Falls dies noch nicht geschehen ist, müssen Sie die Java 8-Unterstützung in allen build.gradle-Dateien aktivieren, die von ExoPlayer abhängen. Fügen Sie dazu im Abschnitt android Folgendes hinzu:

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. Diese Option bietet eine Reihe von Anpassungsoptionen. 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 über einen einzelnen Anwendungsthread 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 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 die Looper des Threads verwendet, in dem der Player erstellt wird. Wenn dieser Thread keine Looper hat, wird die Looper des Hauptthreads der Anwendung verwendet. In allen Fällen kann das Looper des Threads, von dem aus auf den Player zugegriffen werden muss, mit Player.getApplicationLooper abgefragt werden.

Weitere Informationen zum Threading-Modell von ExoPlayer finden Sie im Abschnitt "Threading-Modell" des 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 ein PlayerControlView-, ein SubtitleView- und ein Surface-Objekt kapselt, in dem das Video gerendert wird. Eine PlayerView kann in die Layout-XML deiner App eingefügt werden. So binden Sie 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, was in reinen Audioanwendungen nützlich ist.

Die Verwendung der vordefinierten UI-Komponenten von ExoPlayer ist optional. Für Video-Apps, die eine eigene UI implementieren, kann das Ziel SurfaceView, TextureView, SurfaceHolder oder Surface mit den ExoPlayer-Methoden setVideoSurfaceView, setVideoTextureView, setVideoSurfaceHolder bzw. setVideoSurface festgelegt werden. Mit der Methode addTextOutput von ExoPlayer können Untertitel empfangen werden, die während der Wiedergabe gerendert werden sollten.

Playlist füllen und Player vorbereiten

In ExoPlayer wird jedes Medium durch ein 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 Hinzufügen und Bearbeiten von Playlists findest du auf der Playlists-Seite. Weitere Informationen zu den verschiedenen Optionen, die beim Erstellen von Medienelementen zur Verfügung stehen, finden Sie auf der Seite mit Medienelementen.

Player steuern

Sobald der Player vorbereitet wurde, kann die Wiedergabe durch Aufrufen von Methoden im Player gesteuert werden. Dies sind einige der am häufigsten verwendeten Methoden:

  • play und pause starten und pausieren die Wiedergabe.
  • seekTo ermöglicht die Suche innerhalb der Medien.
  • Mit hasPrevious, hasNext, previous und next kann die Playlist navigiert werden.
  • setRepeatMode legt fest, ob und wie Medien als Schleife wiedergegeben werden.
  • setShuffleModeEnabled steuert den Zufallsmix der Playlist.
  • setPlaybackParameters passt die Wiedergabegeschwindigkeit und die Tonhöhe an.

Wenn der Player an ein PlayerView oder PlayerControlView gebunden ist, führen Nutzerinteraktionen mit diesen Komponenten dazu, dass die entsprechenden Methoden im Player aufgerufen werden.

Lasse den Player los.

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.