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