ТЕХНИЧЕ ЗАДАНИЕ
Разработка системы Digital Signage для сети рекламных экранов
1. Общий описание системы
Система предназначена для удаленного управления медиаконтентом (видео, изображения) на сети телевизоров под управлением Android TV.
Архитектура:
- Backend / Панель управления (Админка): PHP (Laravel / Yii2 или чистый PHP) + MySQL.
- Frontend (Плеер на ТВ): HTML5 / JavaScript (Одностраничное приложение), которое запускается на ТВ в полноэкранном режиме через приложение Fully Kiosk Browser.
2. Функциональные требования: Панель управления (Админка на PHP)
2.1. Управление экранами (Телевизорами)
- Возможность добавления/удаления экранов в системе.
- Каждому экрану присваивается: Название (гео-точка), уникальный ID (device_token) и статус (Онлайн/Офлайн).
- Мониторинг (Пинг): Отображение статуса ТВ в реальном времени. Если ТВ не отправлял запросов более чем 5 минут, окрашивать его статус в красный цвет (Офлайн).
2.2. Управление контентом (Медиатека)
- Загрузка файлов (видео, изображения) на сервер.
- Удаление файлов (с автоматическим удалением физического файла с сервера).
- Возможность просматривать (и изменять), на каких экранах транслируется каждый отдельный медиафайл.
- Настройка порядка воспроизведения файлов.
2.3. Серверное API (для связи с ТВ)
Реализовать REST API (JSON):
- POST /api/ping — принимает от ТВ его ID, фиксирует время последней активности (для статуса Онлайн) и возвращает текущую версию плейлиста.
- GET /api/file/device_token — отдает актуальный JSON-массив с ссылками на медиафайлы, их порядком и настройками времени показа.
3. Функциональные требования: Клиентский плеер (HTML5/JS на ТВ)
Плеер является вебстраницей, которая открыта на ТВ. Главное задание клиента — автономность.
3.1. Кеширование и синхронизация (Работа без интернета)
- При старте плеер запрашивает плейлист через API.
- Локальное хранилище: Все файлы из плейлиста (видео/изображения) JS должен загружать во внутреннюю память браузера (используя Cache API или IndexedDB). Стриминг (воспроизведение напрямую из интернета) запрещен.
- Синхронизация:
- Если на сервере добавлен новый контент, плеер загружает его в фоновом режиме, не прерывая текущий показ. После завершения загрузки — добавляет к трансляции.
- Если контент удален на сервере, плеер должен удалить его из локального кеша ТВ, чтобы не забивать память устройства.
- Офлайн-режим: При полном исчезновении интернета плеер бесконечно крутит по кругу последний успешно загруженный плейлист.
3.2. Воспроизведение и ротация
- Циклическое воспроизведение контента <video> и <img> согласно заданному в админке порядку.
- Для изображений должна настраиваться продолжительность отображения в секундах (по умолчанию 10 сек).
- Переходы между роликами должны быть плавными, без черных экранов и заметного перезагрузки страницы.
3.3. Логирование и контроль ошибок (Защита от сбоев)
- Обработка поврежденных файлов: Если видеофайл поврежден и не может воспроизводиться, плеер должен пропустить его и включить следующий по порядку, а не зависать на черном экране.
- Логи показов (Аналитика): Плеер должен записывать в локальную память факт каждого успешного воспроизведения ролика. При появлении интернета эти данные пачкой отправляются на сервер (POST /api/logs), чтобы в админке можно было увидеть статистику: "Ролик А на ТВ №3 был показан 450 раз за сутки и 2365 раз всего".
4. Требования к оптимизации под Android TV
- Интерфейс плеера не должен содержать никаких элементов управления (курсор, полосы прокрутки, кнопки). Только чистый контент на весь экран.
- JS-код должен быть оптимизирован по памяти (вовремя очищать неиспользуемые DOM-элементы и объектные URL), поскольку бюджетные телевизоры имеют жесткие ограничения по оперативной памяти и могут аварийно закрывать вкладку при утечке памяти через 12-24 часа непрерывной работы.