При воспроизведении видео в формате HDR на мобильных устройствах часто возникает серьезная проблема – визуальная несогласованность на разных панелях. При просмотре лент со смешанным контентом, где сосуществуют элементы со стандартным динамическим диапазоном (SDR) и HDR, конвейеры рендеринга пытаются сбалансировать их. Это приводит к резким переходам и непредсказуемым скачкам яркости.
Для авторов контента такое отсутствие единообразия ставит под угрозу художественный замысел. HDR-видео, тщательно обработанное на профессиональном мониторе, может отображаться с обрезанными светлыми участками, размытыми тонами или раздавленными тенями при просмотре на потребительском устройстве.
Eclipsa – это современный стандарт HDR-видео, разработанный для решения проблем, связанных с экосистемой устройств. Видео Eclipsa создано на основе спецификации SMPTE ST 2094-50. Оно позволяет дисплеям динамически адаптировать отображение контента в зависимости от аппаратных возможностей и условий освещения в реальном времени. Благодаря встроенной интеграции без необходимости настройки в Jetpack Media3 ExoPlayer и стандартных конвейерах захвата Camera2, Eclipsa Video предлагает командам мобильных разработчиков бесплатный и простой способ внедрения адаптивной потоковой передачи видео следующего поколения, которая сохраняет художественный замысел на каждом экране.
Техническая архитектура SMPTE ST 2094-50
Экраны мобильных устройств сильно различаются по запасу яркости – количеству яркости, доступному выше контрольной точки белого на экране. Если аппаратные ограничения дисплея не соответствуют требованиям к мастерингу HDR-видео, светлые участки могут быть обрезаны или выглядеть тусклыми. Фактический запас яркости и контрольная точка белого динамически меняются, когда датчики освещенности подстраивают экран под окружающую среду.
Стандарт SMPTE ST 2094-50 решает эту проблему за счет использования двухуровневых метаданных, которые обеспечивают визуальную согласованность благодаря двум основным принципам:
Опорный белый цвет
Это устанавливает строгий базовый уровень, который сопоставляет пиковую яркость элементов SDR непосредственно с контрольной точкой белого на дисплее. Любое значение яркости, превышающее это опорное значение, зарезервировано строго для светлых участков HDR. Этот предсказуемый механизм привязки гарантирует, что при совмещении слоев SDR и HDR на экране они сохраняют предполагаемое визуальное соотношение, не размывая друг друга.
Кривые усиления, адаптирующиеся к запасу по перегрузке
Вместо того чтобы использовать статическую кривую тональной компрессии, авторы встраивают параметрические метаданные, которые указывают конвейеру отображения, как именно выполнять масштабирование, когда доступен ограниченный запас по яркости. Стандарт дает авторам возможность выбирать, как именно целевая панель должна обрабатывать светлые участки: мягко или жестко обрезать их или же сжимать полутона и тени, чтобы сохранить детали в ярких областях.
Поддержка платформ
Поддержка воспроизведения и записи видео Eclipsa на уровне платформы реализована в Android 17 (уровень API 37).
Как реализовать воспроизведение
Для стандартной разработки приложений Media3 ExoPlayer обеспечивает готовую поддержку видео Eclipsa. При синтаксическом анализе файлов со встроенными метаданными SMPTE 2094-50 ExoPlayer извлекает и применяет метаданные без дополнительных настроек проигрывателя.
Стандартная инициализация проигрывателя. Чтобы создать экземпляр поверхности проигрывателя, ознакомьтесь с обзором Media3 ExoPlayer.
Переопределение треков. Если ваше приложение программно запрашивает или блокирует определенные профили HDR, ознакомьтесь с Media3 track selection API.
Рекомендуем перенести конвейеры воспроизведения в Jetpack Media3. ExoPlayer самостоятельно извлекает контейнеры низкого уровня, полностью обходя известные артефакты декодирования на уровне платформы, которые присутствуют на устаревших уровнях рендеринга в Android 16 (уровень API 36) и более ранних версиях.
Как реализовать запись видео
Чтобы записать видео Eclipsa с устройства, необходимо настроить конвейер камеры для создания метаданных SMPTE 2094-50, назначив совместимый профиль динамического диапазона.
После того как поддержка устройства будет подтверждена с помощью CameraCharacteristics, направьте поток на поверхность кодировщика, используя профиль DynamicRangeProfiles.HLG10_SMPTE_2094_50. Инструкции по запросу и настройке профилей динамического диапазона в сеансах камеры приведены в статье Запись HDR-видео.
Для метаданных SMPTE 2094-50 не требуется явная настройка кодека. Фреймворк Android Media автоматически прикрепляет и передает метаданные, если они есть в активном динамическом профиле.
Совместимость и производительность
Чтобы отслеживать производительность, получите активный объект Display и проверьте LutProperties в OverlayProperties, возвращенном getOverlaySupport(), чтобы определить доступность путей с аппаратным ускорением.
Для устройств, не поддерживающих аппаратное ускорение, разрабатывается возможность отключения отрисовки видео Eclipsa в Exoplayer.
Дополнительные ресурсы
- Спецификация SMPTE ST 2094-50
- HDR Explorer: веб-приложение для проверки метаданных SMPTE ST 2094-50 и кривых усиления