B2C · Xtream · Reseller





Επίπεδα αποθήκευσης
Σύστημα αρχείων τριών επιπέδων για 500+ πελάτες. Ρύθμιση: Config > Storage > Storage Tiers. Κάθε επίπεδο έχει ανεξάρτητο κύκλο ζωής.
Κώδικας
Διαμοίραση εγγραφής
2h hot παράθυρο (NVMe ή tmpfs)
- mirror (συνεχές)
HDD RAID 5
50 TB, 14 ημέρες
- prefetch κατ' απαίτηση
Διαχωριστής αναπαραγωγής
1 TB warm cache, 500+ πελάτες
Πελάτες
Τα segments παλαιότερα του mirror_min_age_minutes ΑΝΤΙΓΡΑΦΟΝΤΑΙ στο RAID. Το write_buffer 2h hot παράθυρο διατηρεί. Μόνο μετά από evict_age_minutes διαγράφονται. Το RAID έχει πάντα το long-tail copy.
Επίπεδο
Σκοπός
Ρυθμίσεις
Εγγραφή
Εγγραφή σκοπός.
Εγγραφή ρυθμίσεις.
Αρχείο
Αρχείο σκοπός.
Αρχείο ρυθμίσεις.
Cache
Cache cél.
Cache ρυθμίσεις.
live writes x 2h = write_buffer hot παράθυρο. Παράδειγμα: 50 streams x 8 Mbps x 2h ~ 36 GB. ~30%% ~ ~50 GB write_buffer αρκετό. RAID: 50 x 8 Mbps x 14 ημέρες ~ 6 TB.
Το Stream.dvr_file_path/2 probes write_buffer -> playback_cache -> archive with order. A segment in the 2h hot window is served from write_buffer at native speeds. Το Nginx X-Accel-Redirect serves files directly.
tmpfs εισαγωγή.
tmpfs μέγεθος υπολογισμός.
tmpfs OOM προστασία.
tmpfs επανεκκίνηση.
tmpfs χρήσης περιπτώσεις.
tmpfs συγχώνευση ηλικία.
Τα tiers ρυθμίζονται μία φορά μέσω Config > Storage > Storage Tiers και provisioned αυτόματα - δεν χρειάζεται χειροκίνητο mkfs/mount/fstab. Το StorageTier.ensure_all_provisioned/0 τρέχει σε κάθε boot και είναι idempotent.
Την πρώτη εκκίνηση το σύστημα δημιουργεί αυτόματα ένα tmpfs-backed write tier με 30%% MemAvailable, mount point /mnt/nvme_write. Αυτό δίνει ένα λειτουργικό DVR pipeline. Ο διαχειριστής μπορεί αργότερα να εναλλάξει σε φυσικό NVMe.
Το Stream.archive_path/1 επιστρέφει το πρώτο υγιές tier - write_buffer αν είναι mounted+writable+free_pct πάνω από το safety floor, αλλιώς archive. Safety floor 20%% για tmpfs, 2%% για block devices.
Η αλλαγή του tmpfs_size_pct στο UI προκαλεί umount + remount με το νέο μέγεθος στο Save. Οι ενεργές DVR εγγραφές διακόπτονται briefly (< 1 s). Σύσταση: αλλάξτε το tmpfs μόνο όταν ο ρυθμός DVR εγγραφής είναι χαμηλός.
IPTV Base URL - βασική διεύθυνση για πρόσβαση στο IPTV API.
Πεδία πακέτων - καθορίζουν τους πόρους που περιλαμβάνονται.
IPTV Packages API - API διαχείρισης πακέτων IPTV.
IPTV Password Policy - πολιτική ασφαλείας κωδικών.
IPTV Reseller API - API για resellers.
Ρυθμίσεις
Πεδία χρήστη
Διαχείριση χρήστη
Βασικό URL — OSTV Player
Η εφαρμογή OSTV Player επιτρέπει στους χρήστες να αλλάξουν το βασικό URL του διακομιστή (διεύθυνση API). Αυτή η λειτουργία είναι διαθέσιμη μόνο σε χρήστες με πάροχο ρυθμισμένο σε root.
Λόγος: Η αλλαγή του βασικού URL προορίζεται μόνο για διαχειριστές/root χρήστες ώστε να εναλλάσσουν διακομιστές (π.χ. παραγωγή vs. δοκιμή). Οι κανονικοί χρήστες έχουν σταθερό βασικό URL και δεν μπορούν να το αλλάξουν.
Πεδία χρήστη
Διαχείριση IPTV - διαχείριση περιεχομένου, χρηστών και πακέτων IPTV.
Επιστρέφει λίστα όλων των ενεργών πακέτων με τιμές και περιόδους χρέωσης.
Λίστα χρηστών διαχείρισης (μεταπωλητές / πάροχοι).
Επιστρέφει υπόλοιπο πίστωσης για συγκεκριμένο χρήστη διαχείρισης.
Πεδία πακέτου
Προσθήκη νέων χρηστών IPTV.
API για μεταπωλητές/παρόχους. Εξουσιοδότηση: Authorization: Bearer mtk_... (token από Manage Users). Ο μεταπωλητής βλέπει μόνο τους δικούς του πελάτες (owner_id).
Πολιτική κωδικού πρόσβασης
Ο κωδικός πρόσβασης απαιτείται κατά τη δημιουργία συνδρομητή. Κανόνες:
Τουλάχιστον 8 χαρακτήρες
Τουλάχιστον 1 κεφαλαίο γράμμα (A-Z)
Τουλάχιστον 1 ειδικός χαρακτήρας (!@#$%^&* κ.λπ.)
Ισχύει για UI και API. Κατά την ενημέρωση, ο κωδικός είναι προαιρετικός, αλλά αν παρέχεται πρέπει να πληροί τους κανόνες.
Ρυθμίσεις
Αυτόματη παροχή & ασφάλεια επιπέδου
Αυτόματη ανίχνευση χωρητικότητας + συστήματος αρχείων: όταν επιλέγεται ελεύθερο NVMe από το αναπτυσσόμενο μενού, η χωρητικότητα (GB) διαβάζεται από lsblk -bn -o SIZE και το τρέχον FS από blkid (με εναλλακτική ολόκληρου δίσκου). Η φόρμα εμφανίζει τις τιμές ως μόνο για ανάγνωση — χωρίς χειροκίνητη καταχώρηση, χωρίς σφάλματα.
Μηχανισμός εκκένωσης επιπέδου — Συνεχής αντιγραφή
Το StorageTierFlush GenServer εκτελείται κάθε 60 δευτερόλεπτα. Αντί να περιμένει έναν κατάλογο ώρας να «παλιώσει» και να τον μετακινεί ως εκρηκτική μεταφορά 5GB, μεταφέρει σταδιακά τμήματα στο RAID συνεχώς διατηρώντας ένα hot window 2 ωρών στο NVMe για γρήγορη αναπαραγωγή «πρόσφατης επιστροφής». Οι δύο φάσεις είναι αποσυζευγμένες — η αντιγραφή και η διαγραφή είναι ξεχωριστές, επαληθευμένες λειτουργίες.
Γιατί η συνεχής αντιγραφή υπερτερεί της «αναμονής 60 λεπτών, μαζική μετακίνηση»: (1) Το φορτίο RAID είναι ομοιόμορφο — χωρίς εκρήξεις 5GB στα όρια ωρών, μόνο σταδιακή ροή τμημάτων 7MB· (2) Τα περισσότερα hot δεδομένα βρίσκονται ήδη στο 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 σε κάθε σημείο montage επιπέδου· αποεπανάληψη σε επίπεδα (μια ημέρα εμφανίζεται μία φορά ακόμα και αν έχει τμήματα σε πολλά επίπεδα κατά τη διάρκεια ενός παραθύρου εκκένωσης).
Επισκόπηση
Γενική επισκόπηση του B2C API.
Περιγραφή ταυτοποίησης
Μέθοδος
Τελικό σημείο
Σώμα αιτήματος
Παράμετρος
Τύπος
Απαιτούμενο
Περιγραφή
Ναί
Περιγραφή ονόματος χρήστη
Περιγραφή κωδικού πρόσβασης
Παράδειγμα αιτήματος
Πεδία απόκρισης
Επιτυχής απόκριση
Περιγραφή token ταυτοποίησης
Περιγραφή λήξης
Παράδειγμα επιτυχίας
Απόκριση σφάλματος
Περιγραφή μηνύματος σφάλματος
Περιγραφή κωδικού σφάλματος
Παράδειγμα σφάλματος
Περιγραφή πληροφοριών χρήστη
Πεδία πληροφοριών χρήστη
Περιγραφή ονόματος χρήστη
Περιγραφή μηνύματος
Περιγραφή ταυτοποίησης
Περιγραφή κατάστασης
Περιγραφή λήξης
Περιγραφή ενεργών συνδέσεων
Περιγραφή δημιουργίας
Περιγραφή μέγιστων συνδέσεων
Περιγραφή μορφών
Περιγραφή ονόματος παρόχου
Περιγραφή λογότυπου παρόχου
Περιγραφή συρρίκνωσης λογότυπου παρόχου
Περιγραφή τρέχουσας ώρας
Παράδειγμα πληροφοριών χρήστη
Περιγραφή κατηγοριών
Περιγραφή τύπου κατηγορίας
Περιγραφή ID κατηγορίας
Περιγραφή ονόματος κατηγορίας
Περιγραφή γονικής κατηγορίας
Περιγραφή cache κατηγοριών
Παράδειγμα κατηγοριών
Περιγραφή λεπτομερειών VOD
Περιγραφή ID λεπτομερειών VOD
Εικόνα VOD
VOD TMDB ID
Πληροφορίες φόντου
VOD_genre
Πλοκή VOD
Πληροφορίες καστ
Αξιολόγηση VOD
Πληροφορίες σκηνοθέτη
Ημερομηνία κυκλοφορίας VOD
Διάρκεια VOD (δευτερόλεπτα)
Διάρκεια VOD (λεπτά)
Κατηγορίες VOD
Ενηλίκων περιεχόμενο
ID ροής VOD
VOD όνομα
VOD προστέθηκε
Συνδέσμοι VOD
Μεταδεδομένα VOD
Περιγραφή λεπτομερειών σειράς
Περιγραφή ID λεπτομερειών σειράς
Αριθμός εποχής
Όνομα εποχής
Αριθμός επεισοδίων εποχής
Ημερομηνία πρεμιέρας εποχής
Επισκόπηση εποχής
Κάλυμμα εποχής
Περιγραφή επεισοδίων
Πεδεία επεισοδίου
Επεισόδιο ID
Επεισόδιο TMDB ID
Αριθμός επεισοδίου
Επεισόδιο προστέθηκε
Εποδεί επεισοδίου
Πληροφορίες επεισοδίου
Συνδέσμοι επεισοδίου
Μεταδεδομένα επεισοδίου
Σημειώσεις
Απόκριση πληροφοριών χρήστη
Περιγραφή token πληροφοριών χρήστη