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