W prostych przypadkach rozpoczęcie korzystania z ExoPlayer
obejmuje wykonanie tych czynności:
- Dodaj ExoPlayer jako zależność do projektu.
- Utwórz instancję
ExoPlayer
. - Podłącz odtwarzacz do widoku (w celu obsługi wyjścia wideo i wprowadzania danych przez użytkownika).
- Przygotuj gracza, używając
MediaItem
. - Gdy skończysz, puść odtwarzacz.
Czynności te zostały szczegółowo opisane poniżej. Pełny przykład znajdziesz w opisie PlayerActivity
w głównej aplikacji demonstracyjnej.
Dodawanie odtwarzacza ExoPlayer jako zależności
Dodaj moduły ExoPlayer
Najprostszym sposobem na rozpoczęcie korzystania z AndroidX Media3 jest dodanie zależności Gradle od potrzebnych bibliotek do pliku build.gradle
modułu aplikacji.
Aby np. korzystać z platformy ExoPlayer 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.3.1") implementation("androidx.media3:media3-exoplayer-dash:1.3.1") implementation("androidx.media3:media3-ui:1.3.1")
Odlotowy
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 jest preferowaną wersją (najnowszą wersję znajdziesz w informacjach o wersji). Wszystkie moduły muszą mieć tę samą wersję.
AndroidX Media3 ma moduły biblioteki, które udostępniają dodatkowe funkcje dzięki bibliotekom zewnętrznym. Niektóre są dostępne w repozytorium Maven, a inne należy skompilować ręcznie. Przejrzyj katalog bibliotek i wyświetl poszczególne pliki README, aby dowiedzieć się więcej.
Więcej informacji o dostępnych modułach biblioteki znajdziesz na stronie Google Maven AndroidX Media.
Włączanie obsługi Javy 8
Włącz obsługę Java 8 we wszystkich plikach build.gradle
zależnych od ExoPlayer, dodając ten kod do sekcji android
:
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
}
Włącz multidex
Jeśli minSdkVersion
w Gradle ma wartość 20 lub mniejszą, włącz multidex, aby uniknąć błędów kompilacji.
Tworzenie odtwarzacza
Instancję ExoPlayer
można utworzyć za pomocą usługi ExoPlayer.Builder
, która udostępnia wiele 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 podziału na wątki
Instancje ExoPlayer muszą mieć dostęp z poziomu pojedynczego 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 przy korzystaniu z komponentów UI ExoPlayera lub rozszerzenia IMA.
Wątek, do którego trzeba uzyskać dostęp do instancji ExoPlayer, można wyraźnie określić, przekazując Looper
podczas tworzenia odtwarzacza. Jeśli nie określono Looper
, używany jest Looper
wątku, w którym tworzony jest odtwarzacz. Jeśli wątek nie ma elementu Looper
, używany jest Looper
głównego wątku aplikacji. We wszystkich przypadkach o Looper
wątku, z którego trzeba uzyskać dostęp do odtwarzacza, można wysłać zapytanie za pomocą funkcji Player.getApplicationLooper
.
Więcej informacji o modelu wątków w ExoPlayer znajdziesz w sekcji dotyczącej modelu Threading w dokumencie JavaDoc ExoPlayer.
Załączanie odtwarzacza do widoku
Biblioteka ExoPlayer zawiera wiele gotowych komponentów UI do odtwarzania multimediów. Należą do nich PlayerView
, który zawiera elementy PlayerControlView
, SubtitleView
i Surface
, w których jest renderowany 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);
PlayerControlView
może być też samodzielnym komponentem, który przydaje się tylko w przypadkach użycia związanych z dźwiękiem.
Korzystanie z gotowych komponentów UI ExoPlayera jest opcjonalne. W przypadku aplikacji wideo, które mają własny interfejs, docelowe obiekty SurfaceView
, TextureView
, SurfaceHolder
lub Surface
można ustawić odpowiednio za pomocą metod setVideoSurfaceView
, setVideoTextureView
, setVideoSurfaceHolder
i setVideoSurface
. Za pomocą metody addTextOutput
ExoPlayer można otrzymywać napisy, które powinny zostać wyrenderowane podczas odtwarzania.
Wypełnianie playlisty i przygotowywanie odtwarzacza
W programie ExoPlayer każdy element multimedialny jest reprezentowany przez parametr MediaItem
. Aby odtworzyć multimedia, musisz utworzyć odpowiedni element MediaItem
, dodać go do odtwarzacza, przygotować i wywołać play
w celu rozpoczęcia odtwarzania:
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 bezpośrednio obsługuje playlisty, można więc przygotować odtwarzacz za pomocą kilku elementów multimedialnych 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 zaktualizować 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 załączanie plików z napisami, znajdziesz na stronie Elementy multimedialne.
Sterowanie odtwarzaczem
Po przygotowaniu odtwarzacza odtwarzaniem można sterować, wywołując w nim metody. Oto kilka najczęściej używanych metod:
play
ipause
rozpoczynają i wstrzymują odtwarzanie.seekTo
umożliwia przeszukiwanie multimediów.hasPrevious
,hasNext
,previous
inext
umożliwiają poruszanie się po playliście.setRepeatMode
określa, czy i w jaki sposób multimedia mają być zapętlone.setShuffleModeEnabled
steruje odtwarzaniem playlisty.setPlaybackParameters
dostosowuje prędkość odtwarzania i ton dźwięku.
Jeśli odtwarzacz jest powiązany z atrybutem PlayerView
lub PlayerControlView
, interakcja użytkownika z tymi komponentami spowoduje wywołanie odpowiednich metod w odtwarzaczu.
Zwolnij odtwarzacz
Odtwarzacz należy udostępniać, gdy nie jest już potrzebny, ponieważ dzięki temu zwolni się
ograniczone zasoby, takie jak dekodery wideo do użytku przez inne aplikacje. Można to zrobić, wywołując ExoPlayer.release
.