Pierwsze kroki

W przypadku prostych zastosowań rozpoczęcie korzystania z usługi ExoPlayer obejmuje wykonanie tych czynności:

  1. Dodaj ExoPlayer jako zależność do projektu.
  2. Utwórz instancję ExoPlayer.
  3. Dołącz odtwarzacz do widoku (na potrzeby wyjścia wideo 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łatwiejszym sposobem na rozpoczęcie korzystania z AndroidX Media3 jest dodanie zależności Gradle do bibliotek, których potrzebujesz, w build.gradle pliku modułu aplikacji.

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

Kotlin

implementation("androidx.media3:media3-exoplayer:1.7.1")
implementation("androidx.media3:media3-exoplayer-dash:1.7.1")
implementation("androidx.media3:media3-ui:1.7.1")
implementation("androidx.media3:media3-ui-compose:1.7.1")

Groovy

implementation "androidx.media3:media3-exoplayer:1.7.1"
implementation "androidx.media3:media3-exoplayer-dash:1.7.1"
implementation "androidx.media3:media3-ui:1.7.1"
implementation("androidx.media3:media3-ui-compose:1.7.1")

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

AndroidX Media3 ma moduły biblioteki, które zależą od bibliotek zewnętrznych, aby zapewnić dodatkowe funkcje. Niektóre są dostępne w repozytorium Maven, a inne trzeba skompilować ręcznie. Przejrzyj katalog bibliotek i zapoznaj się z poszczególnymi plikami README, aby uzyskać więcej informacji.

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ę co najmniej Javy 8 we wszystkich plikach build.gradlezależnych od ExoPlayera, dodając do sekcji androidten kod:

compileOptions {
  targetCompatibility JavaVersion.VERSION_1_8
}

Tworzenie odtwarzacza

Instancję ExoPlayer możesz utworzyć za pomocą ExoPlayer.Builder, która udostępnia szereg opcji dostosowywania. Poniższy kod to najprostszy przykład tworzenia instancji.

Kotlin

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

Java

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

Uwaga dotycząca wątków

Dostęp do instancji ExoPlayera musi być uzyskiwany 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 w przypadku używania komponentów interfejsu ExoPlayera lub rozszerzenia IMA.

Wątek, w którym należy uzyskać dostęp do instancji ExoPlayera, można jawnie określić, przekazując Looper podczas tworzenia odtwarzacza. Jeśli nie określono Looper, używany jest Looper wątku, w którym utworzono odtwarzacz. Jeśli ten wątek nie ma Looper, używany jest Looper głównego wątku aplikacji. We wszystkich przypadkach Looper wątku, z którego należy uzyskać dostęp do odtwarzacza, można wysłać zapytanie za pomocą Player.getApplicationLooper.

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

Dołączanie odtwarzacza do widoku

Biblioteka ExoPlayer udostępnia szereg gotowych komponentów interfejsu do odtwarzania multimediów. Obejmują one PlayerView, który zawiera PlayerControlView, SubtitleView i Surface, na których renderowany jest film. Element PlayerView można umieścić w pliku XML układu 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);

Korzystanie z gotowych komponentów interfejsu ExoPlayera jest opcjonalne. W przypadku aplikacji wideo, które implementują własny interfejs, docelowy element SurfaceView, TextureView, SurfaceHolder lub Surface można ustawić za pomocą metod setVideoSurfaceView, setVideoTextureView, setVideoSurfaceHoldersetVideoSurface w ExoPlayerze. Wywołanie zwrotne Listener.onCues może służyć do odbierania napisów, które mają być renderowane podczas odtwarzania, a setImageOutput – do odbierania zdekodowanych obrazów.

Aby zwiększyć komfort użytkowników, możesz dodać atrybut keepScreenOn lub ustawić blokadę wybudzania w ExoPlayerze. Inne działania, które utrzymują urządzenie w stanie aktywności, możesz sprawdzić na stronach dotyczących pracy w tle.

android:keepScreenOn="true"

Więcej informacji o używaniu komponentów interfejsu Media3 i ich dostosowywaniu znajdziesz na stronie interfejsu.

wypełnianie playlisty i przygotowywanie odtwarzacza;

W ExoPlayer każdy element multimedialny jest reprezentowany przez MediaItem. Aby odtworzyć plik multimedialny, musisz utworzyć odpowiedni obiekt MediaItem, dodać go do odtwarzacza, przygotować odtwarzacz i wywołać metodę 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 playlisty bezpośrednio, więc można przygotować odtwarzacz z wieloma elementami multimedialnymi, które będą 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 Playlista. Więcej informacji o różnych opcjach dostępnych podczas tworzenia komponentów multimedialnych, takich jak przycinanie i dołączanie plików z napisami, znajdziesz na stronie Komponenty multimedialne.

Sterowanie odtwarzaczem

Po przygotowaniu odtwarzacza można sterować odtwarzaniem, wywołując metody odtwarzacza. Oto kilka najczęściej stosowanych metod:

  • playpause – rozpoczynanie i wstrzymywanie odtwarzania;
  • seekTo umożliwia przewijanie multimediów.
  • hasPrevious, hasNext, previousnext umożliwiają poruszanie się po liście odtwarzania.
  • setRepeatMode określa, czy i jak multimedia są odtwarzane w pętli.
  • setShuffleModeEnabled steruje losowym odtwarzaniem playlisty.
  • setPlaybackParameters dostosowuje szybkość odtwarzania i ton dźwięku.

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

Zwolnij gracza

Ważne jest, aby zwolnić odtwarzacz, gdy nie jest już potrzebny, aby zwolnić ograniczone zasoby, takie jak dekodery wideo, do użytku przez inne aplikacje. Możesz to zrobić, dzwoniąc pod numer ExoPlayer.release.