Поддерживаемые форматы

При определении форматов, которые поддерживает 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»
Вставка объявления
Многопериодное воспроизведение ДА
Вставка объявлений, управляемая сервером (xlinks) НЕТ
Объявления IMA на стороне сервера и на стороне клиента ДА Руководство по вставке объявлений
Живое воспроизведение
Регулярное живое воспроизведение ДА
Живое воспроизведение CMAF со сверхмалой задержкой ДА
Общие данные медиаклиента (CMCD) ДА Руководство по интеграции 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-ТВ
Управление сервером
Дельта-обновления ДА
Блокировка перезагрузки плейлиста ДА
Блокировка загрузки подсказок по предварительной загрузке ДА За исключением диапазонов байтов с неопределенной длиной.
Вставка объявления
Вставка рекламы, управляемая сервером (межстраничные объявления) Частично Только VOD с X-ASSET-URI . Прямые трансляции и X-ASSET-LIST будут добавлены позже.
Объявления IMA на стороне сервера и на стороне клиента ДА Руководство по вставке объявлений
Живое воспроизведение
Регулярное живое воспроизведение ДА
HLS с малой задержкой (Apple) ДА
HLS с низкой задержкой (сообщество) НЕТ
Общие данные медиаклиента CMCD ДА Руководство по интеграции 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 и MPEG-H .

библиотека 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.