B2C · Xtream · Reseller





Tingkat Penyimpanan Arsip
Sistem arsip tiga tingkat untuk 500+ klien secara bersamaan.
Pembuat enkode
Tulis Penyangga
Jendela panas 2 jam (NVMe atau tmpfs)
→ cermin (kontinu)
RAID HDD 5
50 TB, retensi 14 hari
→ ambil terlebih dahulu sesuai permintaan
Tembolok Pemutaran
Cache hangat 1 TB, 500+ klien
Klien
Segmen yang lebih lama dari mirror_min_age_menit diSALIN ke RAID secara terus-menerus.
Tingkat
Tujuan
Pengaturan
Tulis Penyangga
Menerima segmen 24/7, menyimpan hot window 2 jam untuk pemutaran mundur cepat, melindungi RAID dari IO acak.
device_path (memblokir perangkat atau 'tmpfs'), tmpfs_size_pct (10-50% MemAvailable ketika tmpfs), mirror_min_age_menit, evict_age_menit, flush_threshold_percent (pemicu pemaksaan flush)
Arsip RAID HDD
Penyimpanan jangka panjang untuk retensi penuh (default 14 hari).
hari_retensi, perangkat_serangan, lokasi_nginx, persen_gratis min
Cache Pemutaran (opsional)
Cache sisi baca untuk file populer yang lebih lama dari 2 jam (mis. EPG catch-up).
prefetch_hours, max_sessions, eviction_policy (sesi/lru/fifo)
penulisan langsung × 2h = write_buffer ukuran jendela panas.
Stream.dvr_file_path/2 memeriksa write_buffer → playback_cache → arsip secara berurutan.
Setiap tingkat dapat menggunakan disk virtual tmpfs yang didukung RAM, bukan perangkat blok fisik.
Alokasi ditentukan sebagai persentase MemAvailable (dari /proc/meminfo) — langkah 10, nilai valid 20/10/30/40/50.
Jika target yang dihitung melebihi 60% dari MemAvailable saat ini, pemasangan ditolak dan tingkatan tetap offline (Stream.archive_path lolos ke tingkat sehat berikutnya).
tmpfs tinggal di RAM — konten buffer apa pun dalam penerbangan HILANG saat host melakukan boot ulang.
Gunakan tmpfs untuk write_buffer ketika: (a) kotak dev/test tidak memiliki NVMe cadangan namun Anda masih ingin pipeline DVR lengkap berjalan untuk pengujian integrasi, (b) operator ingin memvalidasi perilaku mirror + archive tanpa membeli NVMe terlebih dahulu, (c) pengujian singkat yang loss-on-reboot dapat diterima.
Jika tingkat tulisnya adalah tmpfs, StorageTierFlush menggunakan default yang lebih ketat — mirror_min_age 2 mnt, evict_age 15 mnt (vs 5 mnt / 120 mnt untuk NVMe fisik).
Tingkat dikonfigurasi satu kali melalui Config > Storage > Storage Tiers dan disediakan secara otomatis — tidak ada pengeditan mkfs/mount/fstab manual pada host.
Pada boot pertama (tidak ada tingkat tulis di DB), sistem secara otomatis membuat tingkat tulis yang didukung tmpfs dengan alokasi MemAvailable 30%, titik pemasangan /mnt/nvme_write.
Stream.archive_path/1 mengembalikan tingkat 'sehat' pertama — write_buffer jika dipasang+dapat ditulis+free_pct di atas batas aman, jika tidak, kembali ke arsip (mode terdegradasi).
Mengubah tmpfs_size_pct di UI memicu umount + remount dengan ukuran baru di Simpan.
URL Dasar — Pemutar OSTV
Bidang Paket
API Paket
Kebijakan Kata Sandi
API Pengecer
Pengaturan
Bidang Pengguna
Manajemen Pengguna
URL Dasar — Pemutar OSTV
Aplikasi OSTV Player memungkinkan pengguna untuk mengubah URL basis server (alamat API).
Alasan: Mengubah URL dasar hanya ditujukan untuk administrator/pengguna root sehingga mereka dapat beralih antar server (misalnya produksi vs pengujian).
Bidang Pengguna
API Paket
Mengembalikan daftar semua paket aktif dengan harga dan periode penagihan.
Daftar pengguna manajemen (reseller/penyedia).
Mengembalikan saldo kredit untuk pengguna manajemen tertentu.
Bidang Paket
API Pengecer
API untuk reseller/penyedia.
Kebijakan Kata Sandi
Kata sandi diperlukan saat membuat pelanggan.
Minimal 8 karakter
Minimal 1 huruf besar (A-Z)
Setidaknya 1 karakter khusus (!@#$%^&* dll.)
Berlaku untuk UI dan API.
Pengaturan
Penyediaan & Keamanan Otomatis Tingkat
Deteksi otomatis kapasitas + sistem file: ketika NVMe gratis dipilih dari dropdown, kapasitas (GB) dibaca dari lsblk -bn -o SIZE dan FS saat ini dari blkid (dengan fallback seluruh disk).
Mekanisme Tier Flush — Cermin Berkelanjutan
StorageTierFlush GenServer berjalan setiap 60 detik.
Mengapa mirror terus menerus berbunyi "tunggu 60 menit, pindahkan secara batch": (1) Pemuatan RAID merata — tidak ada lonjakan 5GB pada batas jam, hanya sedikit segmen 7MB;
Keamanan segmen yang sedang berlangsung: mirror hanya mengambil file yang lebih lama dari MIRROR_MIN_AGE_MINUTES melalui find -mmin +5.
Penyetelan per penerapan (.env)
500–1000
Aturan ukuran:
Kalender Pratinjau DVR
Tab Pratinjau DVR menampilkan kalender yang dirender oleh server yang hanya menyoroti hari-hari di mana rekaman ada di disk.
Hari dengan rekaman dapat diklik (biru) — mengklik akan mengisi input tanggal dan waktu dengan hari itu pada pukul 00:00;
Diimplementasikan di Stream.available_dvr_days/1 melalui find -min depth 4 -max depth 4 -type d pada setiap tingkat pemasangan;
Ringkasan
API B2C (Business-to-Consumer) menyediakan otentikasi dan akses streaming untuk aplikasi pemutar pengguna akhir.
Otentikasi pengguna dan dapatkan auth_token untuk panggilan API berikutnya.
Metode
Titik akhir
Badan Permintaan
Parameter
Jenis
Diperlukan
Keterangan
Ya
Nama login pengguna
Kata sandi pengguna
Contoh Permintaan
Bidang Respon
Respon Sukses (200)
Token autentikasi terenkripsi untuk panggilan API berikutnya
Tanggal/waktu kedaluwarsa token dalam format ISO 8601
Contoh Respon Sukses
Respon Kesalahan (403)
Pesan deskripsi kesalahan
Kode status HTTP
Contoh Respon Kesalahan
Ambil informasi tentang pengguna yang diautentikasi menggunakan token autentikasi.
Bidang Respon
Nama pengguna pengguna yang diautentikasi
Pesan server (kosongkan jika tidak ada)
Status otentikasi (1 = diautentikasi)
Status akun: Aktif, Diblokir, Dinonaktifkan, Uji Coba
Tanggal kedaluwarsa akun (null jika tidak terbatas)
Jumlah koneksi aktif saat ini
Tanggal pembuatan akun dalam format ISO 8601
Koneksi simultan maksimum yang diperbolehkan
Daftar format aliran keluaran yang diizinkan
Nama penyedia pemilik/pengecer pengguna (null jika tidak ada)
URL gambar logo penyedia (null jika tidak ada)
URL gambar logo penciutan penyedia 208x208 (null jika tidak ada)
Waktu server saat ini dalam format ISO 8601
Contoh Permintaan
Ambil kategori yang difilter menurut jenisnya.
Jenis kategori: siaran langsung, vod, atau serial
ID Kategori sebagai string
Nama tampilan kategori
ID kategori induk (0 jika root)
Hash konten MD5 untuk pembatalan cache
Contoh Permintaan
Ambil informasi mendetail untuk item VOD tertentu, termasuk metadata dan tautan streaming.
ID aliran VOD (UUID)
URL gambar sampul
Pengidentifikasi TMDB
URL gambar latar belakang
Rangkaian genre
Plot / deskripsi
Anggota pemeran
Nilai peringkat (0-10)
Nama direktur
Tanggal rilis
Durasi dalam hitungan detik
Durasi sebagai string yang diformat
Array ID kategori
1 jika konten dewasa, 0 sebaliknya
ID aliran VOD
Judul VOD
Tanggal ditambahkan (ISO 8601)
URL tautan streaming
Metadata kodek video/audio
Ambil informasi serial dengan daftar season dan episode lengkap, dikelompokkan berdasarkan nomor musim.
ID Seri (UUID)
Nomor musim
Nama tampilan musim
Jumlah episode dalam satu musim
Tanggal tayang musim ini
Ikhtisar/deskripsi musim
URL gambar sampul musim
Peta dikunci berdasarkan string nomor musim.
Bidang Objek Episode
ID Episode
ID episode TMDB
Nomor episode dalam musim
Tanggal ditambahkan (ISO 8601)
Nomor musim
Objek info episode (struktur yang sama dengan info VOD)
URL tautan streaming
Metadata kodek video/audio
Kedaluwarsa token tergantung pada peran pengguna: admin = 365 hari, lainnya = 30 hari|Akun yang dinonaktifkan tidak dapat mengautentikasi (mengembalikan 403)|Setiap proses masuk yang berhasil memperbarui stempel waktu_login terakhir pengguna|Token dienkripsi dan berisi user_id, nama pengguna, peran, dan masa berlaku
Respon Sukses (200)
Token autentikasi diperoleh dari titik akhir /auth