Архитектура Lampa TV: принципы работы и устройство системы
Инженерный разбор архитектуры Lampa TV: клиентский JS-рантайм, изоляция от стриминга, связь с TorrServer Matrix и каталоги TMDB. Узнайте, как устроена оболочка.
Lampa устроена иначе, чем привычные онлайн-кинотеатры: у нее нет единого закрытого сервера, а все компоненты работают как независимые модули. Понимание того, как устроена оболочка, помогает быстрее находить причины неполадок и настраивать воспроизведение без лишних проблем.
Концепция тонкого клиента и изоляция данных
Lampa построена как одностраничное веб-приложение (Single Page Application, SPA). Фронтенд оболочки представляет собой набор статических файлов на JavaScript (с библиотекой jQuery), без тяжелых фреймворков вроде React или Angular. Это важно для Smart TV, где ресурсы процессора и памяти ограничены.
Клиент выполняет три фундаментальные задачи:
- Отрисовка адаптивного интерфейса с шагом сетки под пульты дистанционного управления.
- Обработка пользовательского ввода с перехватом кодов клавиш DPAD и Back.
- Маршрутизация запросов к внешним поставщикам метаданных и локальным службам.
Архитектуру удобно рассматривать как набор слоев, хотя полностью независимыми они не являются: например, синхронизация и часть сервисов завязаны на CUB.
| Уровень архитектуры | Используемый стек технологий | Выполняемые функции |
|---|---|---|
| Интерфейсный слой (UI) | HTML5, CSS, JavaScript + jQuery | Навигация по карточкам, фокус кнопок, рендеринг постеров |
| Слой метаданных | TMDB REST API v3, CUB Cloud | Получение описаний фильмов, трейлеров, персонализация |
| Слой расширений | Динамические JS-модули | Подключение онлайн-балансеров, парсеров и плейлистов |
| Транспортный слой | HTTP, WebSocket (к CUB) | Запросы к TorrServer и внешним сервисам, синхронизация с CUB |
| Стриминговый движок | TorrServer Matrix | Сборка P2P-пакетов в линейный HTTP-видеопоток |
Такое разделение делает приложение гибким: Lampa не хранит и не раздает медиафайлы сама. Сама веб-версия открывается по одному из адресов Lampa, а видеопотоки подключаются через каталог плагинов для Lampa или внешние онлайн-балансеры для стриминга без торрентов.
Роль рантайма WebView на Smart TV
Поскольку оболочка написана на веб-технологиях, средой ее исполнения выступает встроенный веб-движок платформы. В зависимости от производителя телевизора стек различается:
- LG webOS: использует движок Chromium (по данным LG — от Chromium 38 в webOS 3.x до Chromium 108 в webOS 24); Lampa запускается как отдельное приложение или через приложение-контейнер Media Station X.
- Samsung Tizen OS — на моделях 2015–2016 годов используется WebKit, с 2017 года (Tizen 3.0) — Chromium; доступны собственные API Samsung (Product API, AVPlay), запускаемый через среду MSX либо автономный пакет (детали сборки в статье компиляция WGT пакета Lampa через CLI).
- Android TV / Google TV: Задействует компонент Android System WebView, обновляемый через Google Play. Для устройств без сервисов Google (включая отечественные ТВ-платформы Яндекс ТВ и Салют ТВ) WebView обслуживается системными пакетами производителя.
- Apple tvOS: веб-браузера в tvOS нет, поэтому используется сторонняя нативная обертка (см. Luxo для Apple TV).
На слабых устройствах анимацию интерфейса можно отключить в настройках (Интерфейс → Анимация). Практические шаги по развертыванию среды описаны в руководстве по установке Lampa на Smart TV.
Интеграция с локальным бэкендом TorrServer
Главная вычислительная нагрузка в связке ложится не на оболочку, а на стриминговый сервер TorrServer Matrix. Этот модуль написан на языке Go и работает как веб-сервер (по умолчанию на порту 8090) — на том же устройстве или на другом компьютере в сети. В Android-версии Lampa есть также опция «Встроенный клиент» (встроенный JS-клиент TorrServer).
Взаимодействие происходит по следующему конвейеру:
- Пользователь выбирает фильм в каталоге Lampa.
- Настроенный парсер (Jackett/Prowlarr или встроенный поиск) находит раздачи и возвращает magnet-ссылку или torrent-файл.
- Lampa отправляет POST-запрос
{"action":"add","link":...}на эндпоинт/torrentsсервера TorrServer (адрес берется из Настройки → TorrServer → Основная ссылка). - TorrServer подключается к пирам BitTorrent, получает метаданные и начинает скачивать нужные части файла в кэш (по умолчанию 64 МБ в памяти; размер настраивается, возможно и кэширование на диск).
- Lampa формирует ссылку на поток вида
http://IP:8090/stream/fname.mkv?link=HASH&index=N&play(или&preload, если включен параметр «Использовать буфер пред.загрузки»). - Lampa передает эту ссылку встроенному или внешнему плееру (Vimu, Just Player, VLC и др.).
При кэше в памяти (режим по умолчанию) данные раздачи не записываются на флеш-память устройства; если в TorrServer включено кэширование на диск, запись на накопитель будет.
Модульная система плагинов: песочница и безопасность
Функциональность Lampa расширяется за счет внешних скриптов. Плагин представляет собой JS-файл, который загружается в приложение через динамический тег <script> и получает доступ к глобальному объекту Lampa.
Важно понимать, что песочницы для плагинов нет:
- Общее пространство: плагины обычно оборачиваются в анонимную функцию (IIFE), но это соглашение авторов, а не механизм защиты — плагин выполняется с теми же правами, что и сама Lampa.
- Доступ к данным: плагин может читать
localStorageприложения, включая сохраненные настройки и токены, поэтому устанавливайте расширения только из источников, которым доверяете. - Черный список: Lampa запрашивает у CUB список заблокированных плагинов (
/api/plugins/blacklist) и не загружает их.
Для сохранения конфигурации при переустановках используется учетная запись CUB: плагины, добавленные через аккаунт, подтягиваются с сервера CUB после авторизации.
Оптимизация сетевых протоколов и буферизации
При воспроизведении тяжелого 4K HDR-контента ключевым фактором стабильности становится скорость сети и загрузки раздачи. Во время подготовки торрента Lampa периодически опрашивает TorrServer по HTTP и получает статистику загрузки.
Во время загрузки Lampa показывает количество пиров, скорость загрузки и объем предзагруженных данных. Это позволяет сразу понять причину задержки, не открывая логи. Если буферизация не прекращается или приложение теряет связь с сервером, обратитесь к руководству по устранению сбоев и ошибок в Lampa.
Аппаратное декодирование и сквозной вывод звука
При воспроизведении дорожек в форматах Dolby Digital Plus (E-AC-3), TrueHD или DTS-HD Master Audio веб-оболочка не занимается декодированием аудиопотока самостоятельно. Декодирование ложится на плеер и аппаратные декодеры телевизора или ТВ-бокса:
- Режим прямого вывода (Bitstream / Pass-through): настраивается в системных параметрах звука телевизора или приставки либо во внешнем плеере (например, Vimu или Kodi); отдельного переключателя аудиотракта в настройках Lampa нет.
- Неподдерживаемые форматы: если устройство не поддерживает формат дорожки (например, DTS на ряде моделей LG), встроенный плеер может воспроизвести видео без звука. Решение — выбрать другую дорожку или внешний плеер с программным декодированием.
Контроль утечек оперативной памяти в режиме ожидания
Умные телевизоры редко выключаются полностью: при нажатии кнопки питания на пульте они переходят в дежурный режим. Если веб-оболочка остается в оперативной памяти очень долго, накопление данных может приводить к замедлению интерфейса.
Практические рекомендации:
- Перезапуск приложения: если интерфейс стал медленным, полностью закройте и заново откройте Lampa.
- Анимация: на слабых моделях отключите анимацию в разделе Интерфейс.
- Переподключение: WebSocket-соединение с CUB при обрыве восстанавливается автоматически с паузой между попытками.
Готовые плагины под вашу задачу
Ответьте на 3 вопроса о вашем ТВ, и мастер подберет проверенный набор скриптов.
- Онлайн-видео (балансеры)Без P2P
- 4K торренты (TorrServer)В стриме
- Зеркала CUB и плагиныАктуально
Ремонтирует и настраивает медиаприставки, ноутбуки, телефоны и компьютеры в Уссурийске. Ведёт lampa.help: редактирует материалы и сверяет команды, адреса и настройки с исходным кодом Lampa, TorrServer и Lampac и с документацией производителей.
Часто задаваемые вопросы (FAQ)
Хранятся ли медиафайлы или торрент-раздачи на серверах Lampa?
Нет. Серверы проекта отдают исключительно статический бандл разметки и логики интерфейса (HTML, CSS, JS). Все видеопотоки формируются либо локально через TorrServer, либо внешними балансерами.
Почему Lampa работает на Android TV, Tizen и webOS?
Интерфейс собран без тяжелых фреймворков (используется jQuery) и исполняется встроенным веб-движком телевизора. Скорость при этом зависит от версии движка и мощности устройства, поэтому на слабых моделях она заметно ниже.
Что происходит при отключении основного домена lampa.mx?
Можно открыть Lampa по альтернативному адресу или развернуть собственную копию веб-версии (в репозитории lampa-source есть Dockerfile) либо сервер Lampac в локальной сети. Часть функций, зависящих от CUB и внешних сервисов, при этом может работать иначе.
Зачем приложению синхронизация через CUB?
Сервис CUB синхронизирует закладки, историю просмотров, метки и тайм-коды, а также плагины, установленные через аккаунт, избавляя от повторной настройки при смене устройства.