B2C · Xtream · Reseller





Нива на хранилище
Трислойна архивна система за 500+ клиенти. Конфигурация: Config > Storage > Storage Tiers. Всеки слой има независим жизнен цикъл.
Кодировчик
Записващ буфер
2ч горещ прозорец (NVMe или tmpfs)
- mirror (непрекъснато)
HDD RAID 5
50 TB, 14 дни
- prefetch по изискване
Кеш за възпроизвеждане
1 TB топъл кеш, 500+ клиенти
Клиенти
Сегментите по-стари от mirror_min_age_minutes се КОПИРАТ на RAID. write_buffer 2ч горещ прозорец поддържа. Само след evict_age_minutes се изтриват. RAID винаги има long-tail копие.
Ниво
Предназначение
Настройки
Запис
Предназначение на запис.
Настройки на запис.
Архив
Предназначение на архива.
Настройки на архива.
Кеш
Предназначение на кеша.
Настройки на кеша.
live writes x 2h = write_buffer hot прозорец. Пример: 50 потоци x 8 Mbps x 2ч ~ 36 GB. ~30%% ~ ~50 GB write_buffer достатъчен. RAID: 50 x 8 Mbps x 14 дни ~ 6 TB.
Stream.dvr_file_path/2 проверява write_buffer -> playback_cache -> archive по ред. Сектор в 2ч горещ прозорец се сервира от write_buffer на native скорости. Nginx X-Accel-Redirect сервира файлове директно.
tmpfs intro.
tmpfs размер изчисление.
tmpfs OOM защита.
tmpfs рестартиране.
tmpfs примери за употреба.
tmpfs сливане възраст.
Layer-ите се конфигурират веднъж чрез Config > Storage > Storage Tiers și provisioned автоматично - няма ръчно mkfs/mount/fstab. StorageTier.ensure_all_provisioned/0 се изпълнява при всяко бутване și е идемпотентно.
При първата бутване системата автоматично създава tmpfs-backed write tier с 30%% MemAvailable, mount point /mnt/nvme_write. Това дава работещ DVR pipeline. Операторът може по-късно да смени на физически NVMe.
Stream.archive_path/1 връща първия здрав tier - write_buffer ако е монтиран+записваем+free_pct над safety floor, иначе архив. Safety floor 20%% za tmpfs, 2%% za block devices.
Промяната на tmpfs_size_pct в UI задейства umount + remount с новия размер при Save. Активните DVR записи се спират кратко (< 1 s). Препоръка: променяйте tmpfs само когато DVR rate е нисък.
Базов URL на IPTV - основният URL за достъп до IPTV API.
Поля на пакетите - дефинират кои ресурси са включени.
IPTV Packages API - API за управление на IPTV пакети.
IPTV Password Policy - политика за сигурност на паролите.
IPTV Reseller API - API за реселъри.
Настройки
Полета на потребителя
Управление на потребителите
Базов URL — OSTV Player
Приложението OSTV Player позволява на потребителите да променят базовия URL на сървъра (API адрес). Тази функция е достъпна само за потребители с доставчик, зададен като root.
Причина: Промяната на базовия URL е предназначена само за администратори/root потребители, за да превключват между сървъри (напр. продукция срещу тестване). Обикновените потребители имат фиксиран базов URL и не могат да го променят.
Потребителски полета
Управление на IPTV - управление на IPTV съдържание, потребители и пакети.
Връща списък с всички активни пакети с цени и периоди на фактуриране.
Списък с потребители за управление (дистрибутори / доставчици).
Връща кредитния баланс за конкретен потребител за управление.
Полета на пакета
Добавяне на нови IPTV потребители.
API за дистрибутори/доставчици. Оторизация: Authorization: Bearer mtk_... (токен от Manage Users). Дистрибуторът вижда само своите собствени клиенти (owner_id).
Политика за пароли
Паролата е задължителна при създаване на абонат. Правила:
Минимум 8 знака
Поне 1 главна буква (A-Z)
Поне 1 специален знак (!@#$%^&* и др.)
Важи за UI и API. При актуализация паролата е незадължителна, но ако е предоставена, трябва да отговаря на правилата.
Настройки
Автоматично осигуряване на ниво и безопасност
Автоматично засичане на капацитет + файлова система: когато се избере свободен NVMe от падащото меню, капацитетът (GB) се чете от lsblk -bn -o SIZE, а текущата FS — от blkid (с резерв за целия диск). Формулярът показва стойностите само за четене — без ръчно въвеждане, без грешки.
Механизъм за изхвърляне на ниво — непрекъснато огледало
StorageTierFlush GenServer работи на всеки 60 секунди. Вместо да чака директорията за час да "остарее" и да я премества като 5GB пакет, тя капе сегменти към RAID непрекъснато, като поддържа прозорец от 2 часа на NVMe за бързо "последно превъртане". Двете фази са разделени — копиране и изтриване са отделни, проверени операции.
Защо непрекъснотото огледало е по-добро от "изчакай 60 мин., пакетно премести": (1) Натоварването на RAID е равномерно — без 5GB пакети на границите на часовете, само капка от 7MB сегменти; (2) Повечето горещи данни вече са на RAID — при авария се губят само последните минути; (3) Изгонването е проверено за всеки файл — частична грешка при огледалото се засича преди загуба на данни от NVMe.
Безопасност на сегментите в процес: огледалото избира само файлове по-стари от MIRROR_MIN_AGE_MINUTES чрез find -mmin +5. Сегментен файл, към който FFmpeg все още записва, няма да се появи в списъка — никаква възможност за частично прехвърляне.
Настройка за деплойване (.env)
IPTV съдържание - управление на видео съдържание за IPTV.
Правило за оразмеряване:
DVR преглед — Календар
Разделът DVR Preview показва изобразен от сървъра календар, открояващ само дните, за които има записи на диска. Сканирането се извършва на всяко ниво (write_buffer + read_cache + archive + legacy), така че сегмент, изхвърлен от NVMe към RAID, остава видим без закъснение.
Дните с записи са с възможност за кликване (сини) — кликването предварително попълва входа за дата/час с 00:00 на деня; потребителят след това избира часа. Дни без записи са затъмнени и неактивни.
Реализирано в Stream.available_dvr_days/1 чрез find -mindepth 4 -maxdepth 4 -type d на всяко монтирано ниво; дедублирано между нивата (ден се показва веднъж, дори ако има сегменти в множество нива по време на прозорец за изхвърляне).
Преглед
Общ преглед на B2C API.
Описание на автентикацията
Метод
Tочка на достъп
Тяло на заявка
Параметър
Тип
Задължителен
Описание
Да
Описание на името на потребителя
Описание на паролата
Пример на заявка
Полета на отговора
Успешен отговор
Описание на токена за автентикация
Описание на срока на валидност
Пример за успех
Отговор за грешка
Описание на съобщението за грешка
Описание на кода на грешка
Пример за грешка
Описание на информацията за потребителя
Полета на информацията за потребителя
Описание на името на потребителя
Описание на съобщението
Описание на автентикацията
Описание на статуса
Описание на изтичането
Описание на активните връзки
Описание на създаването
Описание на макс. връзки
Описание на форматите
Описание на името на доставчика
Описание на логото на доставчика
Описание на логото на свиване на доставчика
Описание на текущото време
Пример за информация за потребител
Описание на категориите
Описание на типа на категорията
Описание на идентификатора на категорията
Описание на името на категорията
Описание на родителската категория
Описание на кеша на категориите
Пример за категории
Описание на VOD детайлите
Описание на VOD ID на детайлите
Изображение VOD
VOD TMDB ID
Информация за фон
VOD жанр
Връзка на VOD
Информация за актьорите
VOD рейтинг
Информация за режисьора
Дата на издаване VOD
Време на VOD (секунди)
Време на VOD (минути)
VOD категории
Възрастно съдържание
VOD поток ID
VOD име
VOD добавен
Връзки VOD
Метаданни VOD
Описание на детайлите на сериала
Описание на ID на детайлите на сериала
Номер на сезона
Име на сезона
Брой на епизоди в сезона
Дата на премиера на сезона
Преглед на сезона
Корекция на сезона
Описание на епизодите
Полета на епизода
ID на епизода
TMDB ID на епизода
Номер на епизода
Епизод добавен
Епизод сезон
Информация за епизода
Връзки с епизода
Метаданни на епизода
Бележки
Отговор за информация за потребителя
Описание на токена за информация за потребителя