ТЕХНІЧНЕ ЗАВДАННЯ
Розробка системи Digital Signage для мережі рекламних екранів
1. Загальний опис системи
Система призначена для віддаленого керування медіаконтентом (відео, зображення) на мережі телевізорів під управлінням Android TV.
Архітектура:
- Backend / Панель керування (Адмінка): PHP (Laravel / Yii2 або pure PHP) + MySQL.
- Frontend (Плеєр на ТВ): HTML5 / JavaScript (Single Page Application), який запускається на ТВ у повноекранному режимі через додаток 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 години безперервної роботи.