W przypadku prostych zastosowań rozpoczęcie korzystania z ExoPlayer
polega na wykonaniu tych czynności:
- Dodaj ExoPlayer jako zależność do projektu.
- Utwórz instancję
ExoPlayer
. - Załącz odtwarzacz do widoku (do wyświetlania filmu i danych wejściowych użytkownika).
- Przygotuj odtwarzacz z
MediaItem
do odtwarzania. - Gdy skończysz, puść odtwarzacz.
Poniżej znajdziesz szczegółowe instrukcje. Pełny przykład znajdziesz w PlayerActivity
w głó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
, 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ć 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
ipause
rozpoczynają i wstrzymują odtwarzanie.seekTo
umożliwia przeskakiwanie w multimediach.hasPrevious
,hasNext
,previous
inext
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
.