W prostych przypadkach, aby zacząć korzystać z ExoPlayer
, musisz wykonać te czynności:
- Dodaj ExoPlayer jako zależność do projektu.
- Utwórz instancję
ExoPlayer
. - Podłącz odtwarzacz do widoku (na potrzeby wyjścia wideo i danych wejściowych użytkownika).
- Do gry przygotuj gracza za pomocą
MediaItem
. - 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
ipause
rozpoczynają i wstrzymują odtwarzanie.seekTo
umożliwia przewijanie w obrębie multimediów.hasPrevious
,hasNext
,previous
inext
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
.