Для простых вариантов использования начало работы с ExoPlayer
состоит из выполнения следующих шагов:
- Добавьте ExoPlayer в качестве зависимости к вашему проекту.
- Создайте экземпляр
ExoPlayer
. - Прикрепите проигрыватель к представлению (для вывода видео и ввода данных пользователем).
- Подготовьте проигрыватель с
MediaItem
для воспроизведения. - Когда закончите, отпустите плеер.
Эти шаги описаны более подробно ниже. Для полного примера обратитесь к PlayerActivity
в главном демонстрационном приложении .
Добавить ExoPlayer как зависимость
Добавить модули ExoPlayer
Самый простой способ начать использовать AndroidX Media3 — добавить зависимости Gradle для нужных вам библиотек в файле build.gradle
вашего модуля приложения.
Например, чтобы использовать ExoPlayer с поддержкой воспроизведения DASH и компонентами пользовательского интерфейса, вы можете добавить зависимости от модулей следующим образом:
Котлин
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")
Круто
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")
где 1.7.1 — предпочтительная версия (последнюю версию можно найти, прочитав заметки о выпуске ). Все модули должны быть одной и той же версии.
AndroidX Media3 имеет библиотечные модули, которые зависят от внешних библиотек для предоставления дополнительных функций. Некоторые из них доступны в репозитории Maven, тогда как другие должны быть созданы вручную. Просмотрите каталог библиотек и ознакомьтесь с отдельными файлами README для получения подробной информации.
Более подробную информацию о доступных модулях библиотеки можно найти на странице Google Maven AndroidX Media .
Включить поддержку Java 8
Если поддержка Java 8 еще не включена, вам необходимо включить ее как минимум во всех файлах build.gradle
, которые зависят от ExoPlayer, добавив в раздел android
следующее:
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
}
Создать игрока
Вы можете создать экземпляр ExoPlayer
с помощью ExoPlayer.Builder
, который предоставляет ряд параметров настройки. Следующий код является простейшим примером создания экземпляра.
Котлин
val player = ExoPlayer.Builder(context).build()
Ява
ExoPlayer player = new ExoPlayer.Builder(context).build();
Примечание о потоке
Доступ к экземплярам ExoPlayer должен осуществляться из одного потока приложения. В подавляющем большинстве случаев это должен быть основной поток приложения. Использование основного потока приложения является обязательным при использовании компонентов пользовательского интерфейса ExoPlayer или расширения IMA.
Поток, в котором должен быть получен доступ к экземпляру ExoPlayer, можно явно указать, передав Looper
при создании проигрывателя. Если Looper
не указан, то используется Looper
потока, в котором создан проигрыватель, или, если в этом потоке нет Looper
, то используется Looper
основного потока приложения. Во всех случаях Looper
потока, из которого должен быть получен доступ к проигрывателю, можно запросить с помощью Player.getApplicationLooper
.
Дополнительную информацию о потоковой модели ExoPlayer см. в разделе «Потоковая модель» Javadoc ExoPlayer .
Прикрепить плеер к представлению
Библиотека ExoPlayer предоставляет ряд готовых компонентов пользовательского интерфейса для воспроизведения мультимедиа. К ним относятся PlayerView
, который инкапсулирует PlayerControlView
, SubtitleView
и Surface
, на котором визуализируется видео. PlayerView
может быть включен в макет xml вашего приложения. Например, чтобы привязать проигрыватель к представлению:
Котлин
// Bind the player to the view. playerView.player = player
Ява
// Bind the player to the view. playerView.setPlayer(player);
Использование готовых компонентов пользовательского интерфейса ExoPlayer необязательно. Для видеоприложений, реализующих собственный пользовательский интерфейс, целевые SurfaceView
, TextureView
, SurfaceHolder
или Surface
можно задать с помощью методов ExoPlayer setVideoSurfaceView
, setVideoTextureView
, setVideoSurfaceHolder
и setVideoSurface
соответственно. Обратный вызов Listener.onCues
можно использовать для получения титров, которые должны отображаться во время воспроизведения, а setImageOutput
можно использовать для получения декодированных изображений.
Для более комфортного использования рассмотрите возможность добавления атрибута keepScreenOn
или установки блокировки пробуждения на ExoPlayer . Вы можете исследовать другие действия, которые поддерживают устройство в бодрствующем состоянии на рабочих страницах в фоновом режиме .
android:keepScreenOn="true"
Подробнее об использовании компонентов пользовательского интерфейса Media3 и их настройке читайте на странице пользовательского интерфейса .
Заполнение плейлиста и подготовка плеера
В ExoPlayer каждый фрагмент медиа представлен MediaItem
. Чтобы воспроизвести фрагмент медиа, вам нужно создать соответствующий MediaItem
, добавить его в проигрыватель, подготовить проигрыватель и вызвать play
для начала воспроизведения:
Котлин
// 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()
Ява
// 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 напрямую поддерживает плейлисты, поэтому можно подготовить проигрыватель с несколькими элементами мультимедиа для последовательного воспроизведения:
Котлин
// 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()
Ява
// 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();
Список воспроизведения можно обновлять во время воспроизведения без необходимости повторной подготовки проигрывателя. Подробнее о заполнении и управлении списком воспроизведения читайте на странице Списки воспроизведения . Подробнее о различных доступных параметрах при создании элементов мультимедиа, таких как вырезание и присоединение файлов субтитров, читайте на странице Элементы мультимедиа .
Управляйте игроком
После того, как плеер подготовлен, воспроизведение можно контролировать, вызывая методы на плеере. Вот некоторые из наиболее часто используемых методов:
-
play
иpause
запуск и приостановка воспроизведения. -
seekTo
позволяет осуществлять поиск в медиа. -
hasPrevious
,hasNext
,previous
иnext
позволяют перемещаться по плейлисту. -
setRepeatMode
управляет цикличностью воспроизведения мультимедиа и способом его воспроизведения. -
setShuffleModeEnabled
управляет перемешиванием плейлистов. -
setPlaybackParameters
регулирует скорость воспроизведения и высоту звука.
Если проигрыватель привязан к PlayerView
или PlayerControlView
, то взаимодействие пользователя с этими компонентами приведет к вызову соответствующих методов проигрывателя.
Отпустите игрока.
Важно освободить плеер, когда он больше не нужен, чтобы освободить ограниченные ресурсы, такие как видеодекодеры, для использования другими приложениями. Это можно сделать, вызвав ExoPlayer.release
.