Как превратить домашний телевизор в веб-платформу с помощью WebHomeTV

22 июл 2026
1,249
376
9
2 недели

Все, кто пытался настроить медиацентр на 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.

Проект получился специфическим, но крайне продуманным. Он решает давнюю проблему монолитных ТВ-плееров, открывая веб-разработчикам полную свободу действий при создании интерфейсов для больших экранов.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.