Pierwsze kroki

W prostych przypadkach, aby zacząć korzystać z ExoPlayer, musisz wykonać te czynności:

  1. Dodaj ExoPlayer jako zależność do projektu.
  2. Utwórz instancję ExoPlayer.
  3. Podłącz odtwarzacz do widoku (na potrzeby wyjścia wideo i danych wejściowych użytkownika).
  4. Do gry przygotuj gracza za pomocą MediaItem.
  5. Gdy skończysz, puść odtwarzacz.

Czynności te zostały szczegółowo opisane poniżej. Pełny przykład znajdziesz w sekcji PlayerActivity w głównej aplikacji demonstracyjnej.

Dodaj ExoPlayer jako zależność

Dodaj moduły ExoPlayer

Najprostszym sposobem na rozpoczęcie korzystania z AndroidX Media3 jest dodanie zależności Gradle do potrzebnych bibliotek w pliku build.gradle Twojego modułu aplikacji.

Jeśli na przykład chcesz korzystać z platformy ExoPlayer z obsługą odtwarzania DASH i komponentami interfejsu, możesz dodać zależności między tymi modułami:

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")

Odlotowe

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"

gdzie 1.3.1 to Twoja preferowana wersja (najnowsza wersja jest dostępna w informacjach o wersji). Wszystkie moduły muszą być w tej samej wersji.

AndroidX Media3 ma moduły bibliotek zależne od bibliotek zewnętrznych, które zapewniają dodatkowe funkcje. Niektóre są dostępne z repozytorium Maven, a inne trzeba skompilować ręcznie. Aby uzyskać szczegółowe informacje, przejrzyj katalog bibliotek i wyświetl poszczególne pliki README.

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

Włącz obsługę języka Java 8

Musisz włączyć obsługę języka Java 8 we wszystkich plikach build.gradle zależnych od ExoPlayer, dodając do sekcji android ten kod:

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 to najprostszy przykład tworzenia instancji.

Kotlin

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

Java

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

Uwaga na temat tworzenia wątków

Dostęp do instancji ExoPlayer musi być możliwy z poziomu pojedynczego wątku aplikacji. W większości przypadków powinien to być główny wątek aplikacji. Jeśli używasz komponentów interfejsu ExoPlayer lub rozszerzenia IMA, musisz użyć głównego wątku aplikacji.

Wątek, do którego należy uzyskać dostęp do instancji ExoPlayer, można wyraźnie określić, przekazując Looper podczas tworzenia odtwarzacza. Jeśli nie określono obiektu Looper, używane jest pole Looper wątku, w którym został utworzony odtwarzacz, a jeśli wątek nie ma parametru Looper, używana jest właściwość 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 podziału na wątki w odtwarzaczu ExoPlayer znajdziesz w sekcji „Modelowanie wątków” w dokumencie Javadoc ExoPlayer.

Podłączanie odtwarzacza do widoku

Biblioteka ExoPlayer zawiera szereg gotowych komponentów interfejsu do odtwarzania multimediów. Należą do nich PlayerView, który obejmuje znaczniki PlayerControlView, SubtitleView i Surface, na których ma być renderowany 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 gotowych komponentów interfejsu ExoPlayer jest opcjonalne. W przypadku aplikacji wideo, które mają własny interfejs użytkownika, docelowe SurfaceView, TextureView, SurfaceHolder lub Surface można ustawić za pomocą metod ExoPlayera setVideoSurfaceView, setVideoTextureView, setVideoSurfaceHolder i setVideoSurface. 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ć plik multimedialny, musisz utworzyć odpowiedni obiekt MediaItem, dodać go do odtwarzacza, przygotować odtwarzacz i wywołać funkcję play, by 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żesz przygotować odtwarzacz z wieloma elementami multimedialnymi do odtwarzania 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 playlist i manipulowaniu nimi 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żesz sterować odtwarzaniem, korzystając z dostępnych w nim metod. Oto kilka najczęściej stosowanych metod:

  • play i pause rozpoczynają i wstrzymują odtwarzanie.
  • seekTo umożliwia przewijanie w obrębie multimediów.
  • hasPrevious, hasNext, previous i next umożliwiają poruszanie się po playliście.
  • setRepeatMode określa, czy i w jaki sposób mają być zapętlone multimedia.
  • setShuffleModeEnabled kontroluje odtwarzanie losowe playlisty.
  • Urządzenie setPlaybackParameters dostosowuje szybkość odtwarzania oraz tonację 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 odtwarzacz

Odtwarzacz powinien być uruchamiany, gdy nie jest już potrzebny, aby zwolnić zasoby, takie jak dekodery wideo, do wykorzystania w innych aplikacjach. Aby to zrobić, wywołaj ExoPlayer.release.