W przypadku prostych zastosowań rozpoczęcie korzystania z ExoPlayer
polega na wykonaniu tych czynności:
- Dodaj ExoPlayera jako zależność do projektu.
- Utwórz instancję
ExoPlayer
. - Załącz odtwarzacz do widoku (do wyjścia wideo 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.5.0") implementation("androidx.media3:media3-exoplayer-dash:1.5.0") implementation("androidx.media3:media3-ui:1.5.0")
Groovy
implementation "androidx.media3:media3-exoplayer:1.5.0" implementation "androidx.media3:media3-exoplayer-dash:1.5.0" implementation "androidx.media3:media3-ui:1.5.0"
gdzie 1.5.0 to preferowana wersja (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 poszczególne pliki 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, dodając do sekcji android
następujące informacje:
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
}
Tworzenie odtwarzacza
Możesz utworzyć instancję ExoPlayer
za pomocą narzędzia ExoPlayer.Builder
, które 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 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.
Nić, na której musi być dostępny element ExoPlayer, można określić jawnie, przekazując wartość 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 za pomocą Player.getApplicationLooper
można zapytać o Looper
wątku, z którego należy uzyskać dostęp do odtwarzacza.
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. W pliku XML układu aplikacji możesz umieścić element PlayerView
.
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);
Możesz też użyć komponentu PlayerControlView
jako samodzielnego komponentu, co jest przydatne w przypadku zastosowań ograniczonych do 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
. Metody addTextOutput
ExoPlayera można używać do odbierania napisów, które powinny być renderowane podczas odtwarzania.
Wypełnianie playlisty i przygotowanie odtwarzacza
W ExoPlayer każdy element multimediów jest reprezentowany przez 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ć podczas 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 dostępnych opcjach 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 najpopularniejszych metod:
play
ipause
uruchamiają i wstrzymywają 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
Ważne jest, aby odtwarzacz był dostępny, gdy nie jest już potrzebny, aby zwolnić zasoby, takie jak dekodery wideo, do wykorzystania przez inne aplikacje. Możesz to zrobić, dzwoniąc pod numer ExoPlayer.release
.