B2C · Xtream · Reseller





Рівні сховища
Вступ до рівнів сховища IPTV
Кодувач
Буфер запису
Буфер запису: простір для тимчасової роботи.
- mirror (continuous)
HDD RAID 5
Записані DVT архіви зберігаються на HDD для відтворення по запиту.
- prefetch on demand
Кеш
Рядки DVB, що записуються в кеш на SSD для швидкого відтворення по запиту.
Клієнти
Segments older than mirror_min_age_minutes are COPIED to RAID continuously. The write_buffer holds a rolling 2h hot window. Only after evict_age_minutes (and only when verified-mirrored) are segments deleted from write_buffer. RAID always has the long-tail copy.
Рівень
Призначення
Налаштування
Запис
Призначення запису.
Налаштування запису.
Архів
Призначення архіву.
Налаштування архіву.
Кеш
Призначення кешу.
Налаштування кешу.
live writes x 2h = write_buffer hot window. Пример: 50 streams x 8 Mbps x 2h ~ 36 GB. ~30%% headroom for mirror ~ ~50 GB write_buffer enough. RAID: 50 x 8 Mbps x 14 days ~ 6 TB.
Stream.dvr_file_path/2 probes write_buffer -> playback_cache -> archive in order. A segment in the 2h hot window is served from write_buffer at native speeds even though it also exists on RAID. Nginx X-Accel-Redirect serves files directly.
tmpfs вхід.
tmpfs обчислення розміру.
OOM захист tmpfs.
tmpfs перезавантаження.
tmpfs випадки використання.
Вік злиття tmpfs.
Tiers are configured once via Config > Storage > Storage Tiers and provisioned automatically - no manual mkfs/mount/fstab editing on the host. StorageTier.ensure_all_provisioned/0 runs at every boot from SystemInitializer and is idempotent.
On first boot the system auto-creates a tmpfs-backed write tier with 30%% MemAvailable allocation, mount point /mnt/nvme_write. This gives a working DVR pipeline out-of-the-box. Operator can later switch to physical NVMe.
Stream.archive_path/1 returns the first healthy tier - write_buffer if mounted+writable+free_pct above safety floor, otherwise falls back to archive (degraded mode). Safety floor 20%% for tmpfs, 2%% for block devices.
Changing tmpfs_size_pct in UI triggers umount + remount with the new size on Save. Active DVR writes are briefly paused (mount transition < 1 s). Recommendation: change tmpfs size only when DVR write rate is low.
Базова URL-адреса — OSTV Player
Поля пакетів
Packages API
Password Policy
Reseller API
Налаштування
Поля користувача
Керування користувачами
Базовий URL — OSTV Player
OSTV Player дозволяє користувачам з роллю root змінювати базовий URL сервера (адресу API).
Причина: зміна базового URL лише для адміністраторів/root для перемикання між серверами. Звичайні користувачі мають фіксований URL.
Поля користувача
Packages API
Повертає список усіх активних пакетів з цінами та розрахунковими періодами.
Список управлінських користувачів (реселерів / провайдерів).
Повертає кредитний баланс конкретного управлінського користувача.
Поля пакету
Reseller API
API для реселерів/провайдерів. Authorization: Bearer mtk_... (токен з Manage Users). Реселер бачить лише своїх клієнтів (owner_id).
Політика паролів
Пароль обов'язковий при створенні підписника. Правила:
Мінімум 8 символів
Щонайменше 1 велика літера (A-Z)
Щонайменше 1 спеціальний символ (!@#$%^&* тощо)
Застосовується до UI та API. При оновленні пароль необов'язковий, але якщо вказано — повинен відповідати правилам.
Налаштування
Автопровізіонування рівнів та безпека
Автовизначення ємності та ФС: при виборі NVMe ємність зчитується з lsblk, ФС з blkid. Форма лише для читання — без ручного вводу.
Механізм flush рівня — безперервне дзеркало
StorageTierFlush GenServer запускається кожні 60 с, безперервно надсилає сегменти на RAID, зберігаючи 2-годинне гаряче вікно на NVMe.
Безперервне дзеркало краще пакетного переміщення: рівномірне навантаження RAID, мінімальна втрата при відмові, перевірка на файл.
Безпека сегментів: дзеркало вибирає файли старші MIRROR_MIN_AGE_MINUTES (find -mmin +5) — неможливе перенесення частково записаного файлу.
Налаштування для розгортання (.env)
500–1000
Правило визначення розміру:
Календар DVR Preview
Вкладка DVR Preview показує календар з підсвіченими днями записів. Сканування по всіх рівнях (write_buffer + read_cache + archive + legacy).
Дні з записами — клікабельні (сині), попередньо заповнюють поле дати о 00:00. Дні без записів затемнені та неактивні.
Реалізовано в Stream.available_dvr_days/1 через find на кожній точці монтування; дедупліковано між рівнями.
Огляд
Загальний огляд API B2C.
Опис автентифікації
Метод
Точка доступу
Тіло запиту
Параметр
Тип
Обов'язковий
Опис
Так
Опис імені користувача
Опис пароля
Приклад запиту
Поля відповіді
Успішна відповідь
Опис токена автентифікації
Опис терміну дії
Приклад успіху
Відповідь помилки
Опис повідомлення про помилку
Опис коду помилки
Приклад помилки
Опис інформації про користувача
Поля інформації користувача
Опис імені користувача
Опис повідомлення
Опис автентифікації
Опис статусу
Опис закінчення терміну
Опис активних з'єднань
Опис створення
Опис макс. з'єднань
Опис форматів
Опис назви провайдера
Опис логотипу провайдера
Опис логотипу згортання провайдера
Опис поточного часу
Приклад інформації користувача
Опис категорій
Опис типу категорії
Опис ідентифікатора категорії
Опис назви категорії
Опис батьківської категорії
Опис кешу категорій
Приклад категорій
Опис деталей VOD
Опис ID деталей VOD
Зображення VOD
TMDB ID VOD
Інформація про задній фон
Жанр VOD
Сюжет VOD
Інформація про акторів
Рейтинг VOD
Інформація про режисера
Дата випуску VOD
Довгота VOD (секунди)
Довгота VOD (хвилини)
Категорії VOD
В дорослому контенті
ID потоку VOD
Назва VOD
Додано VOD
Посилання VOD
Метадані VOD
Опис деталей серії
Опис ідентифікатора деталей серії
Номер сезону
Назва сезону
Кількість епізодів сезону
Дата показу сезону
Огляд сезону
Обкладинка сезону
Опис епізодів
Поля епізоду
ID епізоду
TMDB ID епізоду
Номер епізоду
Додано епізод
Сезон епізоду
Інформація про епізод
Посилання на епізод
Метадані епізоду
Примітки
Відповідь інформації користувача
Опис токена інформації користувача