При определении форматов, которые поддерживает ExoPlayer, важно отметить, что «медиаформаты» определяются на нескольких уровнях. От самого низкого уровня до самого высокого это:
- Формат отдельных образцов мультимедиа (например, кадра видео или кадра аудио). Это образцы форматов . Обратите внимание, что типичный видеофайл содержит медиафайлы как минимум в двух примерных форматах; один для видео (например, H.264) и один для аудио (например, AAC).
- Формат контейнера, в котором хранятся образцы мультимедиа и связанные метаданные. Это форматы контейнеров . Медиа-файл имеет один формат контейнера (например, MP4), который обычно обозначается расширением файла. Обратите внимание, что для некоторых аудиоформатов (например, MP3) форматы сэмплов и контейнеров могут совпадать.
- Адаптивные технологии потоковой передачи, такие как DASH, SmoothStreaming и HLS. Это не медиаформаты как таковые, однако все же необходимо определить, какой уровень поддержки обеспечивает ExoPlayer.
В следующих разделах определяется поддержка ExoPlayer на каждом уровне, от самого высокого до самого низкого. В последних двух разделах описывается поддержка отдельных форматов субтитров и воспроизведение HDR-видео.
Адаптивная потоковая передача
БРОСАТЬСЯ
ExoPlayer поддерживает DASH с несколькими форматами контейнеров. Медиапотоки должны быть демультиплексированы, то есть видео, аудио и текст должны быть определены в отдельных элементах AdaptationSet
в манифесте DASH (CEA-608 является исключением, как описано в таблице ниже). Содержащиеся форматы образцов аудио и видео также должны поддерживаться (подробности см. в разделе «Форматы примеров» ).
Особенность | Поддерживается | Комментарии |
---|---|---|
Контейнеры | ||
ФМП4 | ДА | Только демультиплексированные потоки |
ВебМ | ДА | Только демультиплексированные потоки |
Матроска | ДА | Только демультиплексированные потоки |
MPEG-TS | НЕТ | Поддержка не планируется |
Скрытые субтитры/субтитры | ||
ТТМЛ | ДА | Необработанный или встроенный в FMP4 согласно ISO/IEC 14496-30. |
ВебВТТ | ДА | Необработанный или встроенный в FMP4 согласно ISO/IEC 14496-30. |
СЕА-608 | ДА | Встроен в FMP4 при сигнале с использованием дескрипторов доступности SCTE. |
СЕА-708 | ДА | Встроен в FMP4 при сигнале с использованием дескрипторов доступности SCTE. |
Метаданные | ||
Метаданные ЭМСГ | ДА | Встроенный в FMP4 |
Защита контента | ||
Широкая лоза | ДА | Схема «cenc»: API 19+; Схема «cbcs»: API 25+ |
PlayReady SL2000 | ДА | Android TV, только схема «cenc» |
ClearKey | ДА | API 21+, только схема «cenc» |
Живое воспроизведение | ||
Регулярное живое воспроизведение | ДА | |
Живое воспроизведение CMAF со сверхмалой задержкой | ДА | |
Общие данные медиаклиента (CMCD) | ДА | Руководство по интеграции |
Плавная потоковая передача
ExoPlayer поддерживает SmoothStreaming с форматом контейнера FMP4. Медиапотоки должны быть демультиплексированы, то есть видео, аудио и текст должны быть определены в отдельных элементах StreamIndex в манифесте SmoothStreaming. Содержащиеся форматы образцов аудио и видео также должны поддерживаться (подробности см. в разделе «Форматы примеров» ).
Особенность | Поддерживается | Комментарии |
---|---|---|
Контейнеры | ||
ФМП4 | ДА | Только демультиплексированные потоки |
Скрытые субтитры/субтитры | ||
ТТМЛ | ДА | Встроенный в FMP4 |
Защита контента | ||
PlayReady SL2000 | ДА | Только Android-ТВ |
Живое воспроизведение | ||
Регулярное живое воспроизведение | ДА | |
Общие данные медиаклиента (CMCD) | ДА | Руководство по интеграции |
ЗОЖ
ExoPlayer поддерживает HLS с несколькими форматами контейнеров. Содержащиеся форматы образцов аудио и видео также должны поддерживаться (подробности см. в разделе «Форматы примеров» ). Мы настоятельно рекомендуем производителям контента HLS создавать высококачественные потоки HLS, как описано здесь .
Особенность | Поддерживается | Комментарии |
---|---|---|
Контейнеры | ||
MPEG-TS | ДА | |
ФМП4/КМАФ | ДА | |
АДТС (ААС) | ДА | |
МП3 | ДА | |
Скрытые субтитры/субтитры | ||
СЕА-608 | ДА | |
СЕА-708 | ДА | |
ВебВТТ | ДА | |
Метаданные | ||
ID3 | ДА | |
СКТЭ-35 | НЕТ | |
Защита контента | ||
АЭС-128 | ДА | |
Образец АЭС-128 | НЕТ | |
Широкая лоза | ДА | API 19+ (схема «cenc») и 25+ (схема «cbcs») |
PlayReady SL2000 | ДА | Только Android-ТВ |
Управление сервером | ||
Дельта-обновления | ДА | |
Блокировка перезагрузки плейлиста | ДА | |
Блокировка загрузки подсказок по предварительной загрузке | ДА | За исключением диапазонов байтов с неопределенной длиной. |
Живое воспроизведение | ||
Регулярное живое воспроизведение | ДА | |
HLS с низкой задержкой (Apple) | ДА | |
HLS с низкой задержкой (сообщество) | НЕТ | |
Общие данные медиаклиента (CMCD) | ДА | Руководство по интеграции |
Прогрессивные форматы контейнеров
Потоки в следующих форматах контейнеров могут воспроизводиться напрямую с помощью 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 .
РТСП
ExoPlayer поддерживает RTSP как в реальном времени, так и по запросу. Ниже перечислены поддерживаемые образцы форматов и типов сетей.
Поддерживаемые форматы образцов
- H264 (описание носителя SDP должно включать данные SPS/PPS в атрибут fmtp для инициализации декодера).
- AAC (с битовым потоком ADTS).
- АС3.
Поддерживаемые типы сетей
- Одноадресная передача RTP через UDP (многоадресная рассылка не поддерживается).
- Чередованный RTSP, RTP через RTSP с использованием TCP.
Примеры форматов
По умолчанию ExoPlayer использует декодеры платформы Android. Следовательно, поддерживаемые форматы образцов зависят от базовой платформы, а не от ExoPlayer. См. документацию по примерам форматов, поддерживаемых устройствами Android, в разделе «Поддерживаемые форматы мультимедиа» . Обратите внимание, что отдельные устройства могут поддерживать дополнительные форматы, помимо перечисленных.
В дополнение к декодерам платформы Android, ExoPlayer также может использовать расширения программного декодера. Их необходимо создавать вручную и включать в проекты, которые хотят их использовать. В настоящее время мы предоставляем библиотеки программного декодера для AV1 , VP9 , FLAC , Opus , FFmpeg , MIDI и IAMF .
библиотека FFmpeg
Библиотека FFmpeg поддерживает декодирование различных форматов аудиосэмплов. Вы можете выбрать, какие декодеры включить при сборке библиотеки, как описано в README.md библиотеки. В следующей таблице показано сопоставление формата аудиосэмпла с соответствующим именем декодера FFmpeg.
Образец формата | Имя(а) декодера |
---|---|
Ворбис | ворбис |
Опус | опус |
ФЛАК | флак |
АЛАК | алак |
PCM μ-закон | pcm_mulaw |
PCM A-закон | pcm_alaw |
МП1, МП2, МП3 | mp3 |
АМР-НБ | амрнб |
УПП-ВБ | amrwb |
ААС | аак |
АС-3 | ac3 |
Е-АС-3 | eac3 |
ДТС, ДТС-HD | dca |
TrueHD | млп truehd |
Изображения
ExoPlayer поддерживает следующие форматы изображений. См. «Библиотеки загрузки изображений», чтобы узнать, как интегрироваться с внешними библиотеками, которые могут обеспечивать поддержку другого набора форматов.
Формат изображения | Поддерживается | Примечания |
---|---|---|
БМП | ДА | |
гифка | НЕТ | Нет поддержки Экстрактора |
JPEG | ДА | |
Движущееся фото в формате JPEG | ДА | Поддерживаются неподвижные изображения и видео |
JPEG Ультра HDR | ДА | Возвращается к SDR до версии Android 14 или на дисплеях без HDR. |
PNG | ДА | |
ВебП | ДА | |
HEIF/HEIC | ДА | |
HEIC Движущееся фото | Частично | Поддерживаются только неподвижные изображения* |
AVIF (базовый уровень) | ДА | Декодировано только на Android 14+. |
* Видеочасть движущихся фотографий HEIC можно получить с помощью MetadataRetriever и воспроизвести как отдельный файл.
Автономные форматы субтитров
ExoPlayer поддерживает отдельные файлы субтитров в различных форматах. Файлы субтитров можно загружать неопубликованно, как описано на странице медиа-элементов .
Формат контейнера | Поддерживается | MIME-тип |
---|---|---|
ВебВТТ | ДА | MimeTypes.TEXT_VTT |
ТТМЛ/СМПТЭ-ТТ | ДА | MimeTypes.APPLICATION_TTML |
SubRip | ДА | MimeTypes.APPLICATION_SUBRIP |
СубстанцияАльфа (SSA/ASS) | ДА | MimeTypes.TEXT_SSA |
Воспроизведение HDR-видео
ExoPlayer обрабатывает извлечение видео с высоким динамическим диапазоном (HDR) в различные контейнеры, включая Dolby Vision в MP4 и HDR10+ в Matroska/WebM. Декодирование и отображение HDR-контента зависит от поддержки платформы Android и устройства. См. раздел «Воспроизведение HDR-видео» , чтобы узнать о проверке возможностей декодирования/отображения HDR и ограничениях поддержки HDR в разных версиях Android.
При воспроизведении HDR-потока, требующего поддержки определенного профиля кодека, селектор MediaCodec
по умолчанию в ExoPlayer выберет декодер, поддерживающий этот профиль (если доступен), даже если выше появится другой декодер для того же типа MIME, который не поддерживает этот профиль. список кодеков. Это может привести к выбору программного декодера в тех случаях, когда поток превышает возможности аппаратного декодера для того же типа MIME.