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

При определении форматов, которые поддерживает 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 .

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