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

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

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

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

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

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

Использование Медиаитем

Чтобы воспроизвести прогрессивный поток, создайте 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()

Джава

// 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()

Джава

// 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 предоставляет вам несколько способов адаптировать воспроизведение к потребностям вашего приложения. Примеры см. на странице «Настройки» .