Pierwsze kroki

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

  1. Dodaj ExoPlayer 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 biblioteki Gradle.

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 jest preferowaną wersją (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, przez dodanie tego kodu do sekcji android:

compileOptions {
  targetCompatibility JavaVersion.VERSION_1_8
}

Włącz multidex

Jeśli Gradle minSdkVersion ma wartość 20 lub niższą, włącz multidex, aby uniknąć błędów kompilacji.

Tworzenie odtwarzacza

Możesz utworzyć instancję ExoPlayer za pomocą metody ExoPlayer.Builder, która 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 tworzenia 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 żądanie Looper wątku, z którego należy uzyskać dostęp do odtwarzacza, można wysłać za pomocą polecenia Player.getApplicationLooper.

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. Element PlayerView można umieścić w układzie XML aplikacji. 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);

PlayerControlView możesz też używać jako samodzielnego komponentu, co przydaje się w przypadkach użycia tylko 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. Metoda addTextOutput ExoPlayer umożliwia otrzymywanie napisów, które powinny być renderowane podczas odtwarzania.

Wypełnij playlistę i przygotuj odtwarzacz

W odtwarzaczu ExoPlayer każdy plik multimedialny jest reprezentowany przez element 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ć w trakcie 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 najczęściej stosowanych metod:

  • play i pause rozpoczynają i wstrzymują 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

Odtwarzacz powinien być uruchamiany, gdy nie jest już potrzebny, aby zwolnić zasoby, takie jak dekodery wideo, do wykorzystania w innych aplikacjach. Możesz to zrobić, dzwoniąc pod numer ExoPlayer.release.