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