B2C · Xtream · Reseller





שכבות אחסון ארכיון
מערכת ארכיון משולשת עבור 500+ לקוחות במקביל.
קוֹדַאִי
כתוב Buffer
חלון חם של שעתיים (NVMe או tmpfs)
← מראה (רציף)
HDD RAID 5
50 TB, שמירה של 14 ימים
→ אחזור מראש לפי דרישה
מטמון השמעה
מטמון חם של 1 TB, 500+ לקוחות
לקוחות
פלחים ישנים יותר מ-mirror_min_age_minutes מועתקים ל-RAID ברציפות.
נִדבָּך
מַטָרָה
הגדרות
כתוב Buffer
מקבל קטעים 24/7, מחזיק חלון חם של 2 שעות להפעלה מהירה לאחור, מגן על RAID מ-IO אקראי.
device_path (חסום מכשיר או 'tmpfs'), tmpfs_size_pct (10-50% MemAvailable כאשר tmpfs), mirror_min_age_minutes, evict_age_minutes, flush_threshold_percent (הדק של שטיפה בכוח)
ארכיון HDD RAID
אחסון זנב ארוך לשמירה מלאה (ברירת מחדל 14 ימים).
retention_days, raid_device, nginx_location, min_free_percent
מטמון השמעה (אופציונלי)
מטמון צד קריאה עבור קבצים פופולריים מעל 2 שעות (למשל, EPG-catch-up).
prefetch_hours, max_sessions, eviction_policy (session/lru/fifo)
כתיבה חיה × 2h = גודל חלון חם write_buffer.
Stream.dvr_file_path/2 probes write_buffer → playback_cache → ארכיון לפי הסדר.
כל שכבה יכולה להשתמש בדיסק וירטואלי tmpfs עם גיבוי RAM במקום התקן חסימה פיזי.
ההקצאה מצוינת כאחוז מ-MemAvailable (מאת /proc/meminfo) — שלב 10, ערכים חוקיים 10/20/30/40/50.
אם היעד המחושב יעלה על 60% מה-MemAvailable הנוכחי, ההר נדחה והשכבה נשארת במצב לא מקוון (Stream.archive_path עובר לשכבה הבריא הבאה).
tmpfs חי ב-RAM - כל תוכן מאגר בטיסה הולך לאיבוד כאשר המארח מאתחל מחדש.
השתמש ב-tmpfs עבור write_buffer כאשר: (א) ל-dev/test box אין NVMe פנוי אבל אתה עדיין רוצה שצינור ה-DVR המלא יפעל לבדיקת אינטגרציה, (ב) המפעיל רוצה לאמת התנהגות מראה + ארכיון מבלי לקנות NVMe מראש, (ג) בדיקות ארעיות שבהן הפסד בעת אתחול מקובל.
כאשר שכבת הכתיבה היא tmpfs, StorageTierFlush משתמש בברירות מחדל הדוקות יותר - mirror_min_age 2 דקות, evict_age 15 דקות (לעומת 5 דקות / 120 דקות עבור NVMe פיזי).
שכבות מוגדרות פעם אחת דרך Config > Storage > Storage Triers ומוענקות אוטומטית - ללא עריכת mkfs/mount/fstab ידנית במארח.
באתחול הראשון (ללא שכבת כתיבה ב-DB), המערכת יוצרת אוטומטית שכבת כתיבה מגובה tmpfs עם הקצאת MemAvailable של 30%, נקודת הרכבה /mnt/nvme_write.
Stream.archive_path/1 מחזיר את השכבה 'הבריאה' הראשונה - write_buffer אם הוא מותקן+כתיבה+free_pct מעל רצפת הבטיחות, אחרת נופל חזרה לארכיון (מצב מושפל).
שינוי tmpfs_size_pct בממשק המשתמש מפעיל umount + remount עם הגודל החדש ב-Save.
כתובת אתר בסיס - נגן OSTV
שדות חבילה
API של חבילות
מדיניות סיסמאות
ממשק API של מפיץ
הגדרות
שדות משתמש
ניהול משתמשים
כתובת אתר בסיס - נגן OSTV
אפליקציית OSTV Player מאפשרת למשתמשים לשנות את כתובת ה-URL הבסיסית של השרת (כתובת API).
סיבה: שינוי כתובת ה-URL הבסיסית מיועד רק למנהלי מערכת/משתמשי שורש כדי שיוכלו לעבור בין שרתים (למשל ייצור לעומת בדיקות).
שדות משתמש
API של חבילות
מחזירה רשימה של כל החבילות הפעילות עם מחירים ותקופות חיוב.
רשימת משתמשי ניהול (משווקים/ספקים).
מחזיר יתרת אשראי עבור משתמש ניהול ספציפי.
שדות חבילה
ממשק API של מפיץ
API עבור משווקים/ספקים.
מדיניות סיסמאות
סיסמה נדרשת בעת יצירת מנוי.
מינימום 8 תווים
לפחות אות אחת גדולה (A-Z)
לפחות תו מיוחד אחד (!@#$%^&* וכו')
חל על ממשק משתמש ו-API.
הגדרות
רמה אוטומטית של אספקה ובטיחות
זיהוי אוטומטי של קיבולת + מערכת קבצים: כאשר נבחר NVMe פנוי מהתפריט הנפתח, הקיבולת (GB) נקראת מ- lsblk -bn -o SIZE ו-FS נוכחי מ-blkid (עם דיסק שלם).
מנגנון שטיפה שכבה - מראה רציפה
StorageTierFlush GenServer פועל כל שנות ה-60.
מדוע מראה רציף מפעמת "חכה 60 דקות, תנועה אצווה": (1) עומס ה-RAID אחיד - אין פרצי 5GB בגבולות השעה, רק זרזיף של מקטעים של 7MB;
בטיחות פלחים בתהליך: המראה בוחרת רק קבצים ישנים מ-MIRROR_MIN_AGE_MINUTES באמצעות find -mmin +5.
כוונון לפי פריסה (.env)
500–1000
כלל גודל:
לוח שנה תצוגה מקדימה של DVR
הכרטיסייה תצוגה מקדימה של DVR מציגה לוח שנה שעבר עיבוד שמדגיש רק את הימים שבהם קיימות הקלטות בדיסק.
ימים עם הקלטות ניתנים ללחיצה (כחול) - לחיצה ממלאת מראש את קלט התאריך והשעה באותו היום בשעה 00:00;
מיושם ב-Stream.available_dvr_days/1 דרך find -mindepth 4 -maxdepth 4 -סוג d על כל הרכבה שכבה;
סקירה כללית
ה-API של B2C (Business-to-Consumer) מספק אימות וגישה לזרימה עבור יישומי נגן של משתמש קצה.
אימות משתמש והשג auth_token עבור קריאות API עוקבות.
שִׁיטָה
נקודת קצה
גוף הבקשה
פָּרָמֶטֶר
סוּג
דָרוּשׁ
תֵאוּר
כֵּן
שם התחברות של המשתמש
סיסמת משתמש
בקשה לדוגמה
שדות תגובה
תגובת הצלחה (200)
אסימון אימות מוצפן עבור קריאות API עוקבות
תאריך/שעה תפוגה של אסימון בפורמט ISO 8601
דוגמה לתגובת הצלחה
תגובת שגיאה (403)
הודעת תיאור שגיאה
קוד מצב HTTP
דוגמה לתגובת שגיאה
אחזר מידע על המשתמש המאומת באמצעות אסימון האימות.
שדות תגובה
שם המשתמש של המשתמש המאומת
הודעת שרת (ריקה אם אין)
סטטוס אימות (1 = מאומת)
מצב חשבון: פעיל, חסום, מושבת, ניסיון
תאריך תפוגה של החשבון (ריק אם בלתי מוגבל)
מספר החיבורים הפעילים הנוכחיים
תאריך יצירת החשבון בפורמט ISO 8601
מקסימום חיבורים בו-זמניים
רשימה של פורמטים מותרים של זרם פלט
שם הספק של הבעלים/המפיץ של המשתמש (0 אם אין)
כתובת האתר של תמונת הלוגו של הספק (0 אם אין)
כתובת האתר של הספק כיווץ תמונת הלוגו 208x208 (0 אם אין)
זמן שרת נוכחי בפורמט ISO 8601
בקשה לדוגמה
אחזר קטגוריות שסוננו לפי סוג.
סוג קטגוריה: חי, vod או סדרה
מזהה קטגוריה כמחרוזת
שם תצוגה בקטגוריה
מזהה קטגוריית אב (0 אם שורש)
Hash MD5 של תוכן לאי תוקף של מטמון
בקשה לדוגמה
אחזר מידע מפורט עבור פריט VOD ספציפי, כולל מטא נתונים וקישורי זרם.
מזהה זרם VOD (UUID)
כתובת האתר של תמונת השער
מזהה TMDB
כתובת אתר של תמונת רקע
מחרוזת ז'אנר
עלילה/תיאור
חברי שחקנים
ערך דירוג (0-10)
שם הבמאי
תאריך יציאה
משך בשניות
משך כמחרוזת מעוצבת
מערך מזהי קטגוריות
1 אם תוכן למבוגרים, 0 אחרת
מזהה זרם VOD
כותרת VOD
תאריך הוספה (ISO 8601)
הזרם של כתובות אתרים של קישורים
מטא נתונים של codec וידאו/שמע
אחזר מידע על סדרות עם רשימות עונה ופרקים מלאים, מקובצים לפי מספר עונה.
מזהה סדרה (UUID)
מספר עונה
שם תצוגת העונה
מספר פרקים בעונה
תאריך שידור העונה
סקירת עונה / תיאור
כתובת האתר של תמונת שער העונה
מפה מסומנת לפי מחרוזת מספר העונה.
שדות אובייקט של פרק
מזהה פרק
מזהה פרק TMDB
מספר פרק בתוך העונה
תאריך הוספה (ISO 8601)
מספר עונה
אובייקט מידע על פרק (אותו מבנה כמו מידע VOD)
הזרם של כתובות אתרים של קישורים
מטא נתונים של codec וידאו/שמע
תפוגת האסימון תלויה בתפקיד המשתמש: אדמין = 365 ימים, אחר = 30 ימים|חשבונות מושבתים אינם יכולים לאמת (מחזיר 403)|כל כניסה מוצלחת מעדכנת את חותמת הזמן של המשתמש האחרון לכניסה|האסימונים מוצפנים ומכילים user_id, שם משתמש, תפקיד ותפוגה
תגובת הצלחה (200)
אסימון אישור שהושג מנקודת הקצה /auth