×

📺 IPTV

B2C · Xtream · Reseller

IPTV конфигурация

Нива на хранилище

Трислойна архивна система за 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

tmpfs intro.

Изчисляване на размера

tmpfs размер изчисление.

OOM защита

tmpfs OOM защита.

Рестартиране

tmpfs рестартиране.

Възможности за употреба

tmpfs примери за употреба.

Възраст на сливане

tmpfs сливане възраст.

Provisioning

Layer-ите се конфигурират веднъж чрез Config > Storage > Storage Tiers și provisioned автоматично - няма ръчно mkfs/mount/fstab. StorageTier.ensure_all_provisioned/0 се изпълнява при всяко бутване și е идемпотентно.

Boot seed по подразбиране

При първата бутване системата автоматично създава 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 за реселъри.

Настройки

Полета на потребителя

Управление на потребителите

IPTV Управляване на потребители

Базов 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 детайлите

Описание на VOD ID на детайлите

VOD заглавие

Изображение VOD

VOD TMDB ID

Информация за фон

VOD жанр

Връзка на VOD

Информация за актьорите

VOD рейтинг

Информация за режисьора

Дата на издаване VOD

Време на VOD (секунди)

Време на VOD (минути)

VOD категории

Възрастно съдържание

VOD поток име

VOD поток ID

VOD име

VOD добавен

Връзки VOD

Метаданни VOD

Детали на сериала

Описание на детайлите на сериала

Описание на ID на детайлите на сериала

Сезони

Номер на сезона

Име на сезона

Брой на епизоди в сезона

Дата на премиера на сезона

Преглед на сезона

Корекция на сезона

Епизоди

Описание на епизодите

Полета на епизода

ID на епизода

TMDB ID на епизода

Номер на епизода

Име на епизода

Епизод добавен

Епизод сезон

Информация за епизода

Връзки с епизода

Метаданни на епизода

Бележки

Бележки

Отговор за информация за потребителя

Описание на токена за информация за потребителя