Android TV — популярная платформа, но с Ambilight на ней всё до сих пор плохо: либо устаревшие приложения, либо нестабильная работа, либо костыли с внешними устройствами. Именно с этой проблемой я и столкнулся…

Ambilight/Ambient light — это технология фоновой подсветки экрана, которая создает эффект расширения изображения за пределы дисплея. Она делает просмотр контента более иммерсивным и снижает усталость глаз при просмотре в темноте. Сегодня я расскажу историю создания приложения Universal Ambient Light — современного решения для Android-устройств, которое поддерживает работу с различными LED-контроллерами.

История создания: от идеи до реализации

Всё началось с покупки TCL телевизора на Google TV (с андроидом под капотом). Почти сразу возникла идея сделать подсветку, т.к. казалось что под андроид уж точно что-то такое уже делали. Начал искать готовое решение, но столкнулся с тем, что большинство приложений либо не работали, либо имели ограничения.

Первая попытка

Я купил приложение Ambient light Application в Google Play , но, к сожалению, оно оказалось нерабочим. Приложение не запускалось корректно, были проблемы с разрешениями и стабильностью работы, особенно на версиях Android 14 и выше, т.к. автор в таргете прописал sdk 34, но не адаптировал приложение под него.

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

Вторая попытка: форк существующего проекта

Затем я нашёл репозиторий hyperion-android-reborn на GitHub. Это был форк оригинального Hyperion Grabber для Android, обновлённый для работы с Android 12+. Проект поддерживал только протокол Hyperion, но мне не хотелось ставить прослойку в виде условной малинки, хотелось прямой поддержки WLED или хотя бы Adalight.

Я сделал форк и совместно с нейронками добавил поддержку WLED с протоколами DDP и UDP Raw. Это было хорошее решение, но кодовая база всё ещё была написана на Java с использованием устаревших подходов, да и на джаве я особо не пишу.

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

В процессе работы над форком я понял, что нужно создать что-то более современное. Так родилась идея написать приложение с нуля на Kotlin с использованием Jetpack Compose для UI, чтобы продолжать вести эту идею, но уже с современными подходами и нормальным UI.

Так и родилось приложение Universal Ambient Light

Universal Ambient Light — это универсальное Android-приложение для создания фоновой подсветки экрана (Ambilight). Приложение захватывает содержимое экрана в реальном времени и передаёт данные на LED-контроллеры для создания эффекта расширенного изображения.

Основные возможности

Приложение поддерживает три основных протокола:

Hyperion

  • Полная поддержка протокола Hyperion NG

  • Настройка приоритета сообщений

  • Подключение по сети (порт 19400 по умолчанию)

WLED

  • Поддержка протоколов DDP (рекомендуется для WLED 0.11+) и UDP Raw

  • Настройка порядка цветов (RGB, GRB, BRG, BGR, RBG, GBR)

  • Поддержка RGBW LED-лент

  • Автоматическое определение порта (4048 для DDP, 19446 для UDP Raw)

Adalight

  • Настройка скорости передачи (Baud Rate, по умолчанию 115200)

  • Подключение через USB OTG

  • Автоматическое определение USB-устройств

Приложение полностью оптимизировано для работы на Android TV:

  • Удобная навигация с пульта ДУ (D-pad)

  • Отображение в Leanback Launcher

  • Адаптивный интерфейс для больших экранов

  • Поддержка сенсорного управления на мобильных устройствах

Настройки LED-конфигурации:

  • Конфигурация по сторонам: настройка количества LED для каждой стороны отдельно

  • Раскладка LED: настройка начального угла, направления (по/против часовой стрелки), включение/выключение отдельных сторон

Настройки сглаживания (Smoothing):

  • Включить сглаживание: включено по умолчанию для плавности переходов

  • Пресеты: Выключено, Быстрый отклик, Сбалансированный (по умолчанию), Плавный

  • Время перехода

  • Задержка вывода — полезно для синхронизации с видео, т.к. к своему удивлению столкнулся что в Jellyfin лента обгоняет видео

  • Частота обновлений

🚀 Дополнительные функции

  • Автозапуск: автоматический старт сервиса при включении устройства

  • Автоматическое пере��одключение: попытки переподключения при потере связи с контроллером

  • Тестовые эффекты: встроенные визуальные эффекты для проверки работы LED-ленты (радуга, движущаяся полоса, однотонные цвета, дыхание, вертикальные и горизонтальные полосы)

Немного медиа:

Настройка и использование

Первоначальная настройка

  1. Установка приложения

    • Скачайте приложение из Google Play или RuStore, либо соберите из исходников в GitHub

  2. Настройка подключения

    • Откройте приложение и перейдите в Настройки

    • Выберите тип подключения: Hyperion, WLED или Adalight

    • Для сетевых контроллеров (Hyperion/WLED):

      • Введите IP-адрес контроллера

      • Порт установится автоматически (можно изменить)

    • Для Adalight:

      • Подключите устройство через USB OTG

      • Выберите протокол (ADA, LBAPA или AWA)

      • Настройте скорость передачи (Baud Rate)

  3. Конфигурация LED

    • Настройте количество LED для каждой стороны экрана

    • Выберите начальный угол и направление обхода

    • При необходимости отключите отдельные стороны

  4. Настройка сглаживания

    • Выберите пресет сглаживания (рекомендуется "Сбалансированный")

    • При необходимости настройте время перехода и задержку вывода

  5. Запуск

    • Предоставьте разрешение на захват экрана при первом запуске

    • Нажмите кнопку включения для старта захвата

    • Используйте тестовые эффекты для проверки работы LED-ленты

Особенности для разных устройств

Android TV:

  • Приложение автоматически определяет TV-режим и оптимизирует интерфейс

  • Для ввода IP-адресов удобно использовать приложение "Google TV" или "Android TV Remote" на смартфоне

Высококачественное видео (2K/4K/HDR):

Наблюдаются проблемы на многих Android TV при просмотре 2K/4K контента и одновременном захвате экрана - видео начинает сильно лагать, по сути его становится невозможно смотреть. К сожалению, это не ограничение приложения, а аппаратное ограничение MediaProjection и слабых CPU/GPU на большинстве телевизоров.

Заключение

Приложение уже доступно в Google Play и RuStore. Оно решает проблему отсутствия качественного софта для Ambilight на Android и предоставляет современный, гибкий инструмент для создания фоновой подсветки.

Создание Universal Ambient Light — это пример того, как можно решить проблему отсутствия качественного софта, создав собственное решение с использованием современных технологий. Приложение объединяет поддержку разных протоколов, современный UI и гибкие настройки в едином решении.

Если вы хотите создать свою систему Ambilight для Android TV или просто интересуетесь разработкой под Android, рекомендую изучить исходный код проекта и, возможно, внести свой вклад в его развитие.

Приложение подойдёт тем, кто хочет простую и гибкую Ambilight-систему без внешних серверов и лишних прослоек. Если же вам нужна максимальная производительность с 4K HDR без компромиссов — аппаратные решения всё ещё вне конкуренции.

p.s. Да, я использовал нейросети как при написании кода, так и статьи, т.к. изначально приложение делалось "побыстрее" для себя и только потом уже пришла мысль развернуть его полноценно. Если у вас сильная неприязнь к подобным проектам - просто обойдите его стороной, я предупредил честно, моя совесть чиста:)