Начало работы

Для простых вариантов использования начало работы с ExoPlayer состоит из выполнения следующих шагов:

  1. Добавьте ExoPlayer в качестве зависимости к вашему проекту.
  2. Создайте экземпляр ExoPlayer .
  3. Прикрепите проигрыватель к представлению (для вывода видео и ввода данных пользователем).
  4. Подготовьте проигрыватель с MediaItem для воспроизведения.
  5. Когда закончите, отпустите плеер.

Эти шаги описаны более подробно ниже. Для полного примера обратитесь к 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 .