W przypadku prostych zastosowań rozpoczęcie korzystania z usługi ExoPlayer
obejmuje wykonanie tych czynności:
- Dodaj ExoPlayer jako zależność do projektu.
- Utwórz instancję
ExoPlayer
. - Dołącz odtwarzacz do widoku (na potrzeby 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ł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.gradle
zależnych od ExoPlayera, dodając do sekcji android
ten 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
, setVideoSurfaceHolder
i setVideoSurface
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:
play
ipause
– rozpoczynanie i wstrzymywanie odtwarzania;seekTo
umożliwia przewijanie multimediów.hasPrevious
,hasNext
,previous
inext
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
.