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

При определении форматов, поддерживаемых 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
WebVTT ДА В необработанном виде или встроенным в формат FMP4 в соответствии со стандартом ISO/IEC 14496-30
CEA-608 ДА Встраивается в FMP4 при использовании дескрипторов доступности SCTE.
CEA-708 ДА Встраивается в FMP4 при использовании дескрипторов доступности SCTE.
Метаданные
Метаданные EMSG ДА Встроен в FMP4
Защита контента
Уайдвин ДА Схема "cenc": API 19+; схема "cbcs": API 25+
PlayReady SL2000 ДА Android TV, только по программе "cenc".
ClearKey ДА API 21+, только схема "cenc".
Вставка рекламы
Многопериодное воспроизведение ДА
Вставка рекламы с помощью сервера (кросс-ссылки) НЕТ
Реклама на стороне сервера и на стороне клиента IMA ДА руководство по размещению рекламы
Воспроизведение в реальном времени
Обычное воспроизведение в прямом эфире ДА
Воспроизведение в реальном времени CMAF со сверхнизкой задержкой ДА
Общие данные клиента мультимедиа (CMCD) ДА руководство по интеграции CMCD

SmoothStreaming

ExoPlayer поддерживает SmoothStreaming с использованием контейнерного формата FMP4. Медиапотоки должны быть демультиплексированы, то есть видео, аудио и текст должны быть определены в отдельных элементах StreamIndex в манифесте SmoothStreaming. Также должна поддерживаться поддержка форматов аудио- и видеопримеров (подробнее см. раздел « Форматы примеров »).

Особенность Поддерживается Комментарии
Контейнеры
ФМП4 ДА Только демультиплексированные потоки
Субтитры/скрытые субтитры
ТТМЛ ДА Встроен в FMP4
Защита контента
PlayReady SL2000 ДА Только для Android TV
Воспроизведение в реальном времени
Обычное воспроизведение в прямом эфире ДА
Общие данные клиента мультимедиа (CMCD) ДА Руководство по интеграции

ХЛС

ExoPlayer поддерживает HLS с несколькими форматами контейнеров. Необходимо также поддерживать содержащиеся в контейнере аудио- и видеоформаты (подробнее см. раздел « Форматы образцов »). Мы настоятельно рекомендуем производителям HLS-контента создавать высококачественные HLS-потоки, как описано в этой статье блога .

Особенность Поддерживается Комментарии
Контейнеры
MPEG-TS ДА
FMP4/CMAF ДА
ADTS (AAC) ДА
MP3 ДА
Субтитры / скрытые субтитры
CEA-608 ДА
CEA-708 ДА
WebVTT ДА
Метаданные
ID3 ДА
СКТЕ-35 НЕТ
Защита контента
АЭС-128 ДА
Образец AES-128 НЕТ
Уайдвин ДА API 19+ (схема "cenc") и 25+ (схема "cbcs")
PlayReady SL2000 ДА Только для Android TV
Управление сервером
Обновления Delta ДА
Блокировка перезагрузки плейлиста ДА
Блокировка загрузки подсказок предварительной загрузки ДА За исключением диапазонов байтов с неопределенной длиной.
Вставка рекламы
Вставка рекламы с управлением со стороны сервера (межстраничная реклама) Частично Только видео по запросу (VOD) с X-ASSET-URI . Прямые трансляции и X-ASSET-LIST будут добавлены позже.
Реклама на стороне сервера и на стороне клиента IMA ДА руководство по размещению рекламы
Воспроизведение в реальном времени
Обычное воспроизведение в прямом эфире ДА
Низкозадержечная HLS (Apple) ДА
Низкозадержечная HLS (Community) НЕТ
Данные клиента Common Media CMCD ДА руководство по интеграции CMCD

Прогрессивные форматы контейнеров

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

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

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

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

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

RTSP

ExoPlayer поддерживает как прямые трансляции, так и трансляции по запросу в формате RTSP. Поддерживаемые форматы примеров и типы сетей перечислены ниже.

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

  • H264 (в описании медиафайла SDP для инициализации декодера должны быть указаны данные SPS/PPS в атрибуте fmtp).
  • AAC (с потоком данных ADTS).
  • AC3.

Поддерживаемые типы сетей

  • 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.

Пример формата Название декодера(ов)
Ворбис ворбис
Опус опус
FLAC флак
АЛАК алак
μ-закон PCM pcm_mulaw
PCM A-law pcm_alaw
MP1, MP2, MP3 mp3
AMR-NB амрнб
AMR-WB амруб
ААК аак
АС-3 ac3
E-AC-3 каждый3
DTS, DTS-HD дка
TrueHD mlp truehd

Изображения

ExoPlayer поддерживает следующие форматы изображений. Инструкции по интеграции с внешними библиотеками, поддерживающими другие форматы, см. в разделе «Библиотеки загрузки изображений».

Формат изображения Поддерживается Примечания
БМП ДА
GIF НЕТ Нет поддержки экстрактора
JPEG ДА
JPEG Моушн-фото ДА Поддерживаются статичные изображения и видео.
JPEG Ultra HDR ДА В версиях Android до 14 или на дисплеях без поддержки HDR происходит переключение на SDR.
ПНГ ДА
ВебП ДА
HEIF/HEIC ДА
HEIC Motion Photo ДА
AVIF (базовый уровень) ДА Расшифровка возможна только на Android 14+

Автономные форматы субтитров

ExoPlayer поддерживает автономные файлы субтитров в различных форматах. Файлы субтитров можно загрузить, как описано на странице медиафайлов .

Формат контейнера Поддерживается MIME-тип
WebVTT ДА MimeTypes.TEXT_VTT
TTML / SMPTE-TT ДА MimeTypes.APPLICATION_TTML
SubRip ДА MimeTypes.APPLICATION_SUBRIP
SubStationAlpha (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.