Pierwsze kroki

W przypadku prostych zastosowań rozpoczęcie korzystania z ExoPlayer polega na wykonaniu tych czynności:

  1. Dodaj ExoPlayera jako zależność do projektu.
  2. Utwórz instancję ExoPlayer.
  3. Załącz odtwarzacz do widoku (do wyświetlania filmu i danych wejściowych użytkownika).
  4. Przygotuj odtwarzacz z MediaItem do odtwarzania.
  5. Gdy skończysz, puść odtwarzacz.

Poniżej znajdziesz szczegółowe instrukcje. Pełny przykład znajdziesz w PlayerActivitygłównej aplikacji demonstracyjnej.

Dodawanie ExoPlayera jako zależności

Dodawanie modułów ExoPlayer

Najłatwiej zacząć korzystać z AndroidX Media3, dodając w pliku build.gradle modułu aplikacji odpowiednie zależności gradle’a od potrzebnych bibliotek.

Aby na przykład korzystać z odtwarzacza ExoPlayer z obsługą odtwarzania DASH i komponentów interfejsu użytkownika, możesz dodać zależności od modułów w ten sposób:

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"

gdzie 1.4.1 to preferowana wersja (najnowszą wersję znajdziesz w informacjach o wersji). Wszystkie moduły muszą być tej samej wersji.

AndroidX Media3 zawiera moduły bibliotek, które korzystają z bibliotek zewnętrznych, aby zapewniać dodatkowe funkcje. Niektóre z nich są dostępne w repozytorium Maven, a inne trzeba skompilować ręcznie. Przejrzyj katalog bibliotek i szczegółowe informacje w poszczególnych plikach README.

Więcej informacji o dostępnych modułach biblioteki znajdziesz na stronie Google Maven AndroidX Media.

Włączanie obsługi Javy 8

Jeśli nie jest jeszcze włączona, musisz włączyć obsługę Java 8 we wszystkich plikach build.gradle, które zależą od ExoPlayera, dodając do sekcji android następujące informacje:

compileOptions {
  targetCompatibility JavaVersion.VERSION_1_8
}

Włącz multidex

Jeśli Gradle minSdkVersion to 20 lub mniej, włącz multidex, aby uniknąć błędów kompilacji.

Tworzenie odtwarzacza

Możesz utworzyć instancję ExoPlayer za pomocą narzędzia ExoPlayer.Builder, które udostępnia różne opcje dostosowywania. Poniższy kod jest najprostszym przykładem tworzenia instancji.

Kotlin

val player = ExoPlayer.Builder(context).build()

Java

ExoPlayer player = new ExoPlayer.Builder(context).build();

Uwaga na temat wątków

Do instancji ExoPlayera można uzyskać dostęp z jednego wątku aplikacji. W większości przypadków powinien to być główny wątek aplikacji. Korzystanie z głównego wątku aplikacji jest wymagane, gdy używasz komponentów interfejsu użytkownika ExoPlayera lub rozszerzenia IMA.

Nitka, w której musi być dostępny element ExoPlayer, może być jawnie określona przez przekazanie wartości Looper podczas tworzenia odtwarzacza. Jeśli nie zostanie określony parametr Looper, używany jest parametr Looper wątku, w którym utworzono odtwarzacz. Jeśli ten wątek nie ma parametru Looper, używany jest parametr Looper głównego wątku aplikacji. We wszystkich przypadkach za pomocą Player.getApplicationLooper można zapytać o Looper wątku, z którego należy uzyskać dostęp do odtwarzacza.

Więcej informacji o modelu wątków ExoPlayera znajdziesz w sekcji „Model wątków” w dokumentacji ExoPlayera Javadoc.

Dołączanie odtwarzacza do widoku

Biblioteka ExoPlayer udostępnia szereg gotowych komponentów interfejsu użytkownika do odtwarzania multimediów. Dotyczy to PlayerView, który zawiera PlayerControlView, SubtitleView i Surface, na których renderowany jest film. W pliku XML układu aplikacji można umieścić element PlayerView. Aby na przykład powiązać odtwarzacz z widokiem:

Kotlin

// Bind the player to the view.
playerView.player = player

Java

// Bind the player to the view.
playerView.setPlayer(player);

Możesz też użyć komponentu PlayerControlView jako samodzielnego komponentu, co jest przydatne w przypadku zastosowań ograniczonych do dźwięku.

Korzystanie z wstępnie skonfigurowanych komponentów interfejsu ExoPlayer jest opcjonalne. W przypadku aplikacji wideo, które implementują własne interfejs użytkownika, docelowe wartości SurfaceView, TextureView, SurfaceHolder lub Surface można ustawić za pomocą metod ExoPlayera setVideoSurfaceView, setVideoTextureView, setVideoSurfaceHoldersetVideoSurface. Metody addTextOutput ExoPlayera można używać do odbierania napisów, które powinny być renderowane podczas odtwarzania.

Wypełnianie playlisty i przygotowanie odtwarzacza

W ExoPlayer każdy element multimediów jest reprezentowany przez MediaItem. Aby odtworzyć element multimedialny, musisz utworzyć odpowiednią MediaItem, dodać ją do odtwarzacza, przygotować odtwarzacz i wywołać play, aby rozpocząć odtwarzanie:

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 obsługuje bezpośrednio playlisty, więc można przygotować odtwarzacz z wieloma elementami multimedialnymi, które mają być odtwarzane jeden po drugim:

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();

Playlistę można aktualizować podczas odtwarzania bez konieczności ponownego przygotowywania odtwarzacza. Więcej informacji o wypełnianiu playlisty i manipulowaniu nią znajdziesz na stronie Playlisty. Więcej informacji o różnych opcjach dostępnych podczas tworzenia elementów multimedialnych, takich jak przycinanie i dołączanie plików z napisami, znajdziesz na stronie Elementy multimedialne.

Sterowanie odtwarzaczem

Po przygotowaniu odtwarzacza można sterować odtwarzaniem, wywołując metody odtwarzacza. Oto kilka najpopularniejszych metod:

  • playpause uruchamiają i wstrzymywają odtwarzanie.
  • seekTo umożliwia przeskakiwanie w multimediach.
  • hasPrevious, hasNext, previous i next umożliwiają poruszanie się po playliście.
  • setRepeatMode określa, czy i jak multimedia mają być odtwarzane w pętli.
  • setShuffleModeEnabled steruje losowym odtwarzaniem na playliście.
  • setPlaybackParameters dostosowuje prędkość odtwarzania i ton głosu.

Jeśli odtwarzacz jest powiązany z elementem PlayerView lub PlayerControlView, interakcja użytkownika z tymi komponentami spowoduje wywołanie odpowiednich metod odtwarzacza.

Zwolnij odtwarzacz

Ważne jest, aby odtwarzacz był dostępny, gdy nie jest już potrzebny, aby zwolnić zasoby, takie jak dekodery wideo, do wykorzystania przez inne aplikacje. Można to zrobić, dzwoniąc pod numer ExoPlayer.release.