B2C · Xtream · Reseller





Peringkat Storan Arkib
Sistem arkib tiga peringkat untuk 500+ pelanggan serentak.
Pengekod
Tulis Penampan
Tetingkap panas 2j (NVMe atau tmpfs)
→ cermin (berterusan)
HDD RAID 5
50 TB, pengekalan 14 hari
→ prefetch atas permintaan
Cache Main balik
1 TB cache hangat, 500+ pelanggan
Pelanggan
Segmen yang lebih lama daripada mirror_min_age_minutes disalin ke RAID secara berterusan.
Peringkat
Tujuan
tetapan
Tulis Penampan
Menerima segmen 24/7, memegang tetingkap panas 2j untuk main balik gulung semula yang pantas, melindungi RAID daripada IO rawak.
laluan_peranti (sekat peranti atau 'tmpfs'), tmpfs_size_pct (10-50% MemAvailable apabila tmpfs), mirror_min_age_minutes, evict_age_minutes, flush_threshold_percent (force flush trigger)
Arkib HDD RAID
Storan ekor panjang untuk pengekalan penuh (lalai 14 hari).
hari_pengekalan, peranti_serbuan, lokasi_nginx, peratus_percuma_min
Cache Main semula (pilihan)
Cache sisi baca untuk fail popular lebih lama daripada 2j (cth. EPG catch-up).
prefetch_hours, max_sessions, eviction_policy (session/lru/fifo)
tulis langsung × 2j = saiz tetingkap panas write_buffer.
Stream.dvr_file_path/2 probe write_buffer → playback_cache → arkib mengikut urutan.
Setiap peringkat boleh menggunakan cakera maya tmpfs yang disokong RAM dan bukannya peranti blok fizikal.
Peruntukan ditentukan sebagai peratusan MemAvailable (dari /proc/meminfo) — langkah 10, nilai sah 10/20/30/40/50.
Jika sasaran yang dikira akan melebihi 60% daripada MemAvailable semasa, pelekapan ditolak dan peringkat kekal di luar talian (Stream.archive_path jatuh ke peringkat sihat seterusnya).
tmpfs hidup dalam RAM — sebarang kandungan penimbal dalam penerbangan HILANG apabila hos but semula.
Gunakan tmpfs untuk write_buffer apabila: (a) dev/test box tidak mempunyai NVMe ganti tetapi anda masih mahu saluran paip DVR penuh berjalan untuk ujian integrasi, (b) pengendali ingin mengesahkan kelakuan cermin + arkib tanpa membeli NVMe di hadapan, (c) ujian sementara di mana loss-on-reboot boleh diterima.
Apabila peringkat tulis ialah tmpfs, StorageTierFlush menggunakan lalai yang lebih ketat — mirror_min_age 2 min, evict_age 15 min (vs 5 min / 120 min untuk NVMe fizikal).
Tier dikonfigurasikan sekali melalui Config > Storage > Storage Tiers dan diperuntukkan secara automatik — tiada pengeditan mkfs/mount/fstab manual pada hos.
Pada but pertama (tiada peringkat tulis dalam DB), sistem mencipta secara automatik peringkat tulis yang disokong tmpfs dengan 30% peruntukan MemAvailable, titik lekap /mnt/nvme_write.
Stream.archive_path/1 mengembalikan peringkat 'sihat' pertama — write_buffer jika dipasang+pct+bebas_tulis di atas tingkat keselamatan, jika tidak, akan kembali ke arkib (mod terdegradasi).
Menukar tmpfs_size_pct dalam UI mencetuskan umount + remount dengan saiz baharu pada Save.
URL asas — Pemain OSTV
Medan Pakej
API Pakej
Dasar Kata Laluan
API Penjual Semula
tetapan
Medan Pengguna
Pengurusan Pengguna
URL asas — Pemain OSTV
Aplikasi Pemain OSTV membolehkan pengguna menukar URL pangkalan pelayan (alamat API).
Sebab: Menukar URL asas hanya bertujuan untuk pentadbir/pengguna root supaya mereka boleh bertukar antara pelayan (cth. pengeluaran lwn. ujian).
Medan Pengguna
API Pakej
Mengembalikan senarai semua pakej aktif dengan harga dan tempoh pengebilan.
Senarai pengguna pengurusan (penjual semula / pembekal).
Mengembalikan baki kredit untuk pengguna pengurusan tertentu.
Medan Pakej
API Penjual Semula
API untuk penjual semula/penyedia.
Dasar Kata Laluan
Kata laluan diperlukan semasa membuat pelanggan.
Minimum 8 aksara
Sekurang-kurangnya 1 huruf besar (A-Z)
Sekurang-kurangnya 1 aksara khas (!@#$%^&* dsb.)
Berlaku pada UI dan API.
tetapan
Peringkat Auto-Peruntukan & Keselamatan
Pengesanan automatik sistem fail kapasiti +: apabila NVMe percuma dipilih daripada menu lungsur, kapasiti (GB) dibaca daripada lsblk -bn -o SIZE dan FS semasa daripada blkid (dengan sandaran keseluruhan cakera).
Mekanisme Flush Peringkat — Cermin Berterusan
StorageTierFlush GenServer berjalan setiap 60-an.
Mengapa cermin berterusan berdegup "tunggu 60minit, bergerak kelompok": (1) Muatan RAID adalah sekata — tiada pecahan 5GB pada sempadan jam, hanya menitis segmen 7MB;
Keselamatan segmen yang sedang berjalan: cermin hanya memilih fail yang lebih lama daripada MIRROR_MIN_AGE_MINUTES melalui find -mmin +5.
Penalaan Per-deployment (.env)
500–1000
Peraturan saiz:
Kalendar Pratonton DVR
Tab Pratonton DVR menunjukkan kalendar yang diberikan pelayan yang menyerlahkan hanya hari yang rakaman wujud pada cakera.
Hari dengan rakaman boleh diklik (biru) — mengklik praisi input tarikh tarikh dengan hari itu pada 00:00;
Dilaksanakan dalam Stream.available_dvr_days/1 melalui find -mindepth 4 -maxdepth 4 -type d pada setiap tier mount;
Gambaran keseluruhan
API B2C (Business-to-Consumer) menyediakan pengesahan dan akses strim untuk aplikasi pemain pengguna akhir.
Sahkan pengguna dan dapatkan auth_token untuk panggilan API berikutnya.
Kaedah
Titik akhir
Badan Permintaan
Parameter
taip
Diperlukan
Penerangan
ya
Nama log masuk pengguna
Kata laluan pengguna
Contoh Permintaan
Medan Respons
Respons Kejayaan (200)
Token pengesahan yang disulitkan untuk panggilan API berikutnya
Tarikh/masa tamat tempoh token dalam format ISO 8601
Contoh Respons Kejayaan
Respons Ralat (403)
Mesej penerangan ralat
Kod status HTTP
Contoh Jawapan Ralat
Dapatkan maklumat tentang pengguna yang disahkan menggunakan token pengesahan.
Medan Respons
Nama pengguna pengguna yang disahkan
Mesej pelayan (kosong jika tiada)
Status pengesahan (1 = disahkan)
Status akaun: Aktif, Diharamkan, Kurang Upaya, Percubaan
Tarikh tamat akaun (batal jika tidak terhad)
Bilangan sambungan aktif semasa
Tarikh penciptaan akaun dalam format ISO 8601
Sambungan serentak maksimum yang dibenarkan
Senarai format aliran keluaran yang dibenarkan
Nama pembekal pemilik/penjual semula pengguna (batal jika tiada)
URL imej logo pembekal (tiada jika tiada)
URL imej logo pembekal runtuh 208x208 (tiada jika tiada)
Masa pelayan semasa dalam format ISO 8601
Contoh Permintaan
Dapatkan semula kategori yang ditapis mengikut jenis.
Jenis kategori: langsung, vod atau siri
ID Kategori sebagai rentetan
Nama paparan kategori
ID kategori induk (0 jika akar)
Cincang kandungan MD5 untuk ketidaksahihan cache
Contoh Permintaan
Dapatkan maklumat terperinci untuk item VOD tertentu, termasuk metadata dan pautan strim.
ID aliran VOD (UUID)
URL imej muka depan
pengecam TMDB
URL imej tirai latar
Rentetan genre
Plot / huraian
Ahli pelakon
Nilai penilaian (0-10)
Nama pengarah
Tarikh keluaran
Tempoh dalam beberapa saat
Tempoh sebagai rentetan yang diformatkan
Tatasusunan ID kategori
1 jika kandungan dewasa, 0 sebaliknya
ID aliran VOD
Tajuk VOD
Tarikh ditambah (ISO 8601)
URL pautan strim
Metadata codec video/audio
Dapatkan maklumat siri dengan penyenaraian musim dan episod penuh, dikumpulkan mengikut nombor musim.
ID Siri (UUID)
Nombor musim
Nama paparan musim
Bilangan episod dalam musim
Tarikh siaran musim ini
Gambaran keseluruhan / penerangan musim
URL imej muka depan musim
Peta dikunci oleh rentetan nombor musim.
Medan Objek Episod
ID episod
ID episod TMDB
Nombor episod dalam musim
Tarikh ditambah (ISO 8601)
Nombor musim
Objek maklumat episod (struktur yang sama seperti maklumat VOD)
URL pautan strim
Metadata codec video/audio
Tamat tempoh token bergantung pada peranan pengguna: admin = 365 hari, lain = 30 hari|Akaun yang dilumpuhkan tidak dapat mengesahkan (mengembalikan 403)|Setiap log masuk yang berjaya mengemas kini cap masa log masuk terakhir pengguna|Token disulitkan dan mengandungi user_id, nama pengguna, peranan dan tamat tempoh
Respons Kejayaan (200)
Token pengesahan diperoleh daripada titik akhir /auth