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