прогрессивный

ExoPlayer может воспроизводить потоки в следующих форматах контейнеров напрямую. Также должна поддерживаться поддержка форматов аудио- и видеообразцов (подробнее см. раздел « Форматы образцов» ). Информацию о поддержке контейнеров и форматов изображений см. в разделе «Образы» .

Формат контейнера Поддерживается Комментарии
MP4 ДА
M4A ДА
ФМП4 ДА
ВебМ ДА
Матроска ДА
MP3 ДА Некоторые потоки доступны только в режиме поиска с постоянным битрейтом**
Огг ДА Содержит Vorbis, Opus и FLAC.
WAV ДА
MPEG-TS ДА
MPEG-PS ДА
FLV ДА Недоступно для поиска*
ADTS (AAC) ДА Поиск возможен только с использованием поиска с постоянным битрейтом**
FLAC ДА Использование библиотеки FLAC или экстрактора FLAC из библиотеки ExoPlayer ***
АМР ДА Поиск возможен только с использованием поиска с постоянным битрейтом**

* Перемотка не поддерживается, поскольку контейнер не предоставляет метаданных (например, индекса образцов), позволяющих медиаплееру эффективно выполнять перемотку. Если перемотка необходима, мы рекомендуем использовать более подходящий формат контейнера.

** Эти экстракторы имеют флаг FLAG_ENABLE_CONSTANT_BITRATE_SEEKING для включения приблизительного поиска с использованием предположения о постоянной скорости передачи данных. Эта функция отключена по умолчанию. Самый простой способ включить эту функцию для всех экстракторов, которые ее поддерживают, — использовать DefaultExtractorsFactory.setConstantBitrateSeekingEnabled , как описано здесь .

*** Экстрактор библиотеки FLAC выводит необработанный звук, который может обрабатываться фреймворком на всех уровнях API. Экстрактор библиотеки ExoPlayer выводит аудиокадры FLAC и поэтому зависит от наличия декодера FLAC (например, декодера MediaCodec , обрабатывающего FLAC (требуется начиная с уровня API 27), или библиотеки FFmpeg с включенной поддержкой FLAC). DefaultExtractorsFactory использует экстрактор расширения, если приложение было собрано с библиотекой FLAC . В противном случае он использует экстрактор библиотеки ExoPlayer .

Использование MediaItem

Для воспроизведения прогрессивного потока создайте MediaItem с URI медиафайла и передайте его плееру.

Котлин

// Create a player instance.
val player = ExoPlayer.Builder(context).build()
// Set the media item to be played.
player.setMediaItem(MediaItem.fromUri(progressiveUri))
// Prepare the player.
player.prepare()

Java

// Create a player instance.
ExoPlayer player = new ExoPlayer.Builder(context).build();
// Set the media item to be played.
player.setMediaItem(MediaItem.fromUri(progressiveUri));
// Prepare the player.
player.prepare();

Использование ProgressiveMediaSource

Для расширения возможностей настройки вы можете создать объект ProgressiveMediaSource и передать его непосредственно плееру вместо MediaItem .

Котлин

// Create a data source factory.
val dataSourceFactory: DataSource.Factory = DefaultHttpDataSource.Factory()
// Create a progressive media source pointing to a stream uri.
val mediaSource: MediaSource =
  ProgressiveMediaSource.Factory(dataSourceFactory)
    .createMediaSource(MediaItem.fromUri(progressiveUri))
// Create a player instance.
val player = ExoPlayer.Builder(context).build()
// Set the media source to be played.
player.setMediaSource(mediaSource)
// Prepare the player.
player.prepare()

Java

// Create a data source factory.
DataSource.Factory dataSourceFactory = new DefaultHttpDataSource.Factory();
// Create a progressive media source pointing to a stream uri.
MediaSource mediaSource =
    new ProgressiveMediaSource.Factory(dataSourceFactory)
        .createMediaSource(MediaItem.fromUri(progressiveUri));
// Create a player instance.
ExoPlayer player = new ExoPlayer.Builder(context).build();
// Set the media source to be played.
player.setMediaSource(mediaSource);
// Prepare the player.
player.prepare();

Настройка воспроизведения

ExoPlayer предоставляет множество способов настроить воспроизведение в соответствии с потребностями вашего приложения. Примеры см. на странице «Настройка» .