Как превратить домашний телевизор в веб-платформу с помощью WebHomeTV
Все, кто пытался настроить медиацентр на Android TV или ТВ-приставке, наверняка сталкивались с экосистемой TVBox и FongMi. Это популярные открытые плееры, которые умеют подгружать контент через скрипты на Python и JavaScript. Проблема у них одна: интерфейс главного экрана жестко завязан на стандартную сетку приложения. Поменять раскладку или встроить собственную рекомендательную ленту без пересборки всего APK банально нельзя.
Разработчик fish2018 решил зайти с другой стороны и создал репозиторий webhtv (WebHomeTV). Проект берет за основу базу FongMi, но меняет саму концепцию стартового экрана. Теперь главный экран — это полноценная веб-страница на HTML, CSS и JS, которая общается с Android через встроенный JS-мост и нативные API приложения.
Что внутри и как это работает
По сути, перед нами гибридное Android-приложение для смартфонов и телевизоров. Внутри работают два слоя. С одной стороны остаются привычные парсеры контента (Spider/CSP), а с другой — поднимается Chromium-контекст и локальный веб-сервер для отрисовки кастомных версток.
Вы можете сверстать любой фронтенд, положить его на свой сервер или в память приставки и оттуда рулить поиском, вызывать видеоплеер, проверять доступность ссылок и синхронизировать историю.
Чем интересен проект
Разработчики продумали нативный SDK для браузерного контекста. Когда фронтенд загружается внутри WebView приложения, ему открывается объект с методами для взаимодействия с железом и операционной системой. Веб-страница умеет самостоятельно отправлять кросс-доменные сетевые запросы в обход правил CORS, запрашивать историю просмотров, задействовать системный прокси и передавать видеопотоки прямо во внутренний видеоплеер. Если стандартная сетка категорий надоела, можно сделать фронтенд хоть в стиле кинематографичного интерактивного дашборда, хоть в виде текстового терминала.
Отдельного внимания заслуживает встроенная система проверки ссылок на облачные диски и умный ранжирующий движок для источников. Приложение прямо из коробки проверяет валидность расшаренных папок на популярных файлообменниках. Параллельно с этим система фиксирует процент успешных поисков и воспроизведений для каждого подключаемого сайта. Со временем самые быстрые и стабильные источники автоматически поднимаются выше в списке выдачи.
Управлять всем этим добром с пульта ДУ не всегда удобно, поэтому в приложение встроили админку. Если запустить WebHomeTV на телевизоре и открыть в браузере компьютера или смартфона адрес /m, откроется веб-панель управления. Через неё удобно настраивать источники, передавать токены авторизации, заливать пользовательские скрипты расширений и смотреть логи работы видеоплеера.
Если в доме несколько ТВ-приставок и телефонов, подгонять конфигурацию на каждом устройстве вручную не придется. Внутри реализована локальная сетевая синхронизация: настройки, история просмотров, авторизационные Cookie и закладки передаются между клиентами в пару кликов. Для удаленных устройств можно поднять промежуточный релей на Go, Rust, Cloudflare Workers или Vercel.
Архитектура и нативные библиотеки
Техническая начинка репозитория выглядит сурово. Это далеко не простой фасад над системным Android MediaPlayer.
Приложение собирается под Java 21 и Android SDK 37 (compileSdk 37, minSdk 24). В коде поддерживаются два флейвора: mobile для сенсорных экранов и leanback для управления с пульта ДУ.
Самое интересное спрятано в плеерном движке. Авторы не стали ограничиваться стандартным ExoPlayer и встроили глубоко кастомизированный MPV на базе C/C++. Внутри используются свежие сборки FFmpeg (n8.0.3), libplacebo и curl с поддержкой HTTP/2. Для вывода видео на Android 15 применили связку Vulkan и MediaCodec через AImageReader и Android Hardware Buffer, что дает возможность декодировать видеопоток прямо в памяти GPU без лишних перекладываний кадров.
Кроме MPV, в проекте живет форк Media3 (версия 1.11.0-alpha01-fongmi) с собственными патчами. Например, один из патчей добавляет высокопроизводительный обработчик WebSocket-потоков для онлайн-комментариев и субтитров с поддержкой очередей и ограничениями по частоте кадров.
Сборка из исходников
Если захотите собрать проект самостоятельно, потребуется подготовленный Android SDK с NDK 28.2.13676358 и JDK 21. В репозитории уже лежат предкомпилированные .so библиотеки, так что пересобирать весь MPV и FFmpeg с нуля при первой сборке не придется.
Процесс сборки из консоли выглядит стандартно:
git clone https://github.com/fish2018/webhtv.git
cd webhtv
echo "sdk.dir=$ANDROID_HOME" > local.properties
bash gradlew :app:assembleMobileArm64_v8aDebug :app:assembleLeanbackArm64_v8aDebug
Готовые APK-файлы раскладываются по каталогам в app/build/outputs/apk/. В репозитории также есть скрипты в папке scripts/, которые проверяют целостность ELF-заголовков и при необходимости пересобирают JNI-мосты.
Комплект для разработчиков и AI-инструменты
В папке webhome-devkit авторы выложили полноценный инструментарий для создания собственных главэкранов. Там есть готовые шаблоны верстки, примеры расширений для инъекции JS-кода в веб-страницы и документация по работе с SDK.
Интересная деталь: разработчики добавили набор готовых правил (skills) для AI-ассистентов. Их можно подключить к Cursor, Claude или другим нейросетевым редакторам, чтобы генерировать новые модули и парсеры под WebHomeTV в автоматическом режиме через промпты.
Кому пригодится проект
Если вы пишете пет-проекты под Android TV или хотите сделать кастомный медиахаб для домашнего пользования, WebHomeTV даст мощный готовый фундамент. Не нужно с нуля писать декодеры, менеджеры сетевых запросов и обработку событий пульта. Достаточно сверстать аккуратную веб-страницу и привязать её к нативному SDK.
Проект получился специфическим, но крайне продуманным. Он решает давнюю проблему монолитных ТВ-плееров, открывая веб-разработчикам полную свободу действий при создании интерфейсов для больших экранов.
