Erste Schritte

Für einfache Anwendungsfälle werden zum Einstieg in ExoPlayer die folgenden Schritte implementiert:

  1. Fügen Sie Ihrem Projekt ExoPlayer als Abhängigkeit hinzu.
  2. Erstellen Sie eine ExoPlayer-Instanz.
  3. Fügen Sie den Player zu einer Ansicht hinzu (für Videoausgabe und Nutzereingabe).
  4. Bereite den Spieler mit einem MediaItem zum Spielen vor.
  5. 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 und pause starten und pausieren die Wiedergabe.
  • seekTo ermöglicht die Suche innerhalb der Medien.
  • hasPrevious, hasNext, previous und next 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.