В простых вариантах использования начало работы с ExoPlayer
состоит из выполнения следующих шагов:
- Добавьте ExoPlayer в качестве зависимости к вашему проекту.
- Создайте экземпляр
ExoPlayer
. - Прикрепите плеер к представлению (для вывода видео и пользовательского ввода).
- Подготовьте проигрыватель с
MediaItem
для воспроизведения. - Отпустите плеер, когда закончите.
Эти шаги описаны более подробно ниже. Полный пример см. в PlayerActivity
в основном демонстрационном приложении .
Добавьте ExoPlayer в качестве зависимости
Добавьте модули ExoPlayer
Самый простой способ начать использовать AndroidX Media3 — добавить зависимости Gradle от нужных вам библиотек в файл build.gradle
вашего модуля приложения.
Например, чтобы зависеть от ExoPlayer с поддержкой воспроизведения DASH и компонентами пользовательского интерфейса, вы можете добавить зависимости к модулям следующим образом:
Котлин
implementation("androidx.media3:media3-exoplayer:1.4.1") implementation("androidx.media3:media3-exoplayer-dash:1.4.1") implementation("androidx.media3:media3-ui:1.4.1")
классный
implementation "androidx.media3:media3-exoplayer:1.4.1" implementation "androidx.media3:media3-exoplayer-dash:1.4.1" implementation "androidx.media3:media3-ui:1.4.1"
где 1.4.1 — предпочитаемая вами версия (последнюю версию можно найти в примечаниях к выпуску ). Все модули должны быть одной версии.
AndroidX Media3 имеет библиотечные модули, которые зависят от внешних библиотек и предоставляют дополнительную функциональность. Некоторые доступны из репозитория Maven, тогда как другие необходимо собирать вручную. Просмотрите каталог библиотек и просмотрите отдельные файлы README для получения подробной информации.
Дополнительную информацию о доступных модулях библиотеки можно найти на странице Google Maven AndroidX Media .
Включите поддержку Java 8
Если это еще не включено, вам необходимо включить поддержку Java 8 во всех файлах build.gradle
, которые зависят от ExoPlayer, добавив следующее в раздел android
:
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
}
Включить мультидексацию
Если ваша версия Gradle minSdkVersion
равна 20 или ниже, вам следует включить multidex , чтобы предотвратить ошибки сборки.
Создать плеер
Вы можете создать экземпляр 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 см. в разделе «Модель потоков» документа ExoPlayer Javadoc .
Прикрепите плеер к представлению
Библиотека 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);
Вы также можете использовать PlayerControlView
как отдельный компонент, который полезен только для случаев использования аудио.
Использование готовых компонентов пользовательского интерфейса ExoPlayer не является обязательным. Для видеоприложений, реализующих собственный пользовательский интерфейс, целевые SurfaceView
, TextureView
, SurfaceHolder
или Surface
можно установить с помощью методов ExoPlayer setVideoSurfaceView
, setVideoTextureView
, setVideoSurfaceHolder
и setVideoSurface
соответственно. Метод addTextOutput
ExoPlayer можно использовать для получения титров, которые должны отображаться во время воспроизведения.
Заполнение плейлиста и подготовка плеера
В 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
.