الأدلة دي بتطابق مفاهيم المجال مع العناصر الموجودة في المنصة دلوقتي (bouquets وخطوط وحزم وحسابات موزّعين وعقد والـ API). دي مطابقات مفاهيمية، مش ميزات خاصة بمجال، وحساب الموزّع حساب مفوَّض، مش tenant معزول.
المطابقة المفاهيمية
مفيش حاجة في اللوحة اسمها دورة أو طالب. الجدول بيقول أنهي عنصر بيلعب أنهي دور؛ والفصول تحت بتجهّزهم بالترتيب ده.
| في مجالك | على المنصة | فين في اللوحة |
|---|---|---|
| مركز تدريب أو موزّع شريك | حساب موزّع (reseller): لوحة مفوَّضة بكريديت وصلاحيات وخطوطه الخاصة | Users → ضيف موزّع؛ Groups لصلاحياته |
| مجموعة دورات | Bouquet: مجموعة مسمّاة من القنوات أو الأفلام أو المسلسلات اللي الحزمة بتديها | Bouquets، من Streams وMovies / Series |
| دروس مسجّلة | كتالوج VOD: أفلام ومسلسلات بمواسم وحلقات وتصنيفات وبيانات وصفية | Movies وSeries، أو مهمة استيراد VOD |
| حصة مباشرة | قناة مباشرة: بث بمصادره وEPG وصيغ الإخراج | Streams → ضيف بث مباشر (رابط المصدر أو RTMP push) |
| وصول الطالب | الخط: وصول واحد بحزمته وbouquets وانتهائه وحد اتصالاته ومخرجاته | Lines → إضافة، أو أكواد التفعيل، أو الـ Reseller API |
| فترة وصول الدورة | تاريخ انتهاء الخط، بيتجدّد بحزمة أو كريديت أو الـ API | تاريخ انتهاء الخط ومدة الحزمة |
| حد الجلسات المتزامنة | أقصى اتصالات للخط: كام جهاز يقدر يشوف في نفس الوقت | أقصى اتصالات للخط |
| تكامل مع LMS أو منصة تجارة | Reseller API وwebhooks: عمليات اللوحة من نظامك إنت | مفاتيح Reseller API وwebhooks في لوحة الموزّع |
المتطلبات
اللي لازم يكون عندك قبل التثبيت.
- سيرفر Linux (Ubuntu 22.04 أو 24.04) على شبكة الحرم الجامعي، والمثبّت بيثبّت Postgres وRedis وffmpeg، ودومين أو عنوان داخلي للوحة والمشغّل.
- التسجيلات اللي هتنشرها (ملفات أو نظام تسجيل يقدر يبعت RTMP) وللحصص المباشرة، encoder في كل قاعة هتبث.
- مفتاح رخصة: خطة Free مش محتاجة واحد؛ المؤسسات المؤهّلة بتطلب مفتاح Professional المجاني بالإيميل من دومينها الأكاديمي.
نشر البنية
ثبّت سيرفر الإدارة، وبعدين Node لكل مبنى.
- شغّل المثبّت على سيرفر الإدارة؛ هو بيثبّت اللوحة والـ API والـ worker والـ origin كوحدات systemd وبيعمل أول مسؤول.
- اضبط الرابط العام للـ API (API_PUBLIC_URL) ولأساس التشغيل عشان روابط المشغّل تشاور على عنوان الحرم الجامعي.
- سجّل Node من Servers → add a node لكل مبنى قاعاته هتشاهد؛ اللوحة بتثبّتها عن طريق SSH من حزمة الـ Node.
- افحص صفحة Servers: الـ Node بتبلّغ بالـ heartbeat والترافيك، ومشاهدين المبنى ده بيتوجّهوا ليها.
تنظيم المحتوى
الدورات كمسلسلات، والبرامج كـ bouquets وحزم.
- اعمل تصنيف لكل كلية أو مادة تحت Movies / Series.
- ضيف كل دورة كمسلسل: موسم لكل وحدة، وحلقة لكل درس، والتسجيل كمصدر (رفع أو مهمة استيراد VOD).
- اعمل bouquet لكل مجموعة دورات (مثلًا دورات برنامج لترم) من المسلسلات اللي ضفتها.
- اعمل حزمة لكل برنامج: الـ bouquets اللي بتديها، وفترة الوصول كمدة، وحد الجلسات المتزامنة.
إعداد الشركاء (الموزّعين)
مركز تدريب أو كلية كحساب مفوَّض.
- اعمل مجموعة بالصلاحيات اللي المركز محتاجها (خطوطه الخاصة، من غير تغيير الكتالوج) تحت Groups.
- ضيف المركز كموزّع تحت Users بالمجموعة دي ورصيد كريديت والحزم اللي يقدر يوزّعها.
- اديله عنوان اللوحة؛ هيدير طلابه من هناك، واللوحة بتحتفظ بسجل التدقيق.
إعداد وصول الطلاب
خط لكل طالب، بيتعمل عند القيد.
- للدفعات الصغيرة، ضيف الخطوط من Lines → add بحزمة البرنامج؛ والانتهاء بيتبع مدة الحزمة.
- ليوم القيد، ولّد أكواد تفعيل للحزمة؛ الطالب بيستخدم الكود في المشغّل ويحصل على خط.
- لنظام الطلاب أو الـ LMS، اعمل مفتاح Reseller API وخلّي النظام يعمل الخطوط بـ action=create_line ومعرّف طلب لكل طالب.
- اضبط max connections على عدد الأجهزة اللي الطالب يقدر يستخدمها مرة واحدة؛ والمشغّل بيرفض الاتصال اللي بعدها.
إعداد VOD
دروس مسجّلة عند الطلب.
- ارفع كل تسجيل كمصدر حلقة، أو وجّه مهمة استيراد VOD للملف وخلّي الـ worker يحمّله ويشفّره في جذر الميديا.
- املا البيانات الوصفية (العنوان والوصف والبوستر) يدوي أو من TMDB للمواد العامة؛ الدروس غالبًا محتاجة عنوان ووصف بس.
- افحص التشغيل في مشغّل الويب بخط تجريبي؛ الرابط موقّع وبينتهي بعد الوقت المضبوط.
بث الحصص المباشرة
المحاضرة كقناة مباشرة.
- ضيف بث مباشر تحت Streams وencoder القاعة كمصدر (عنوان RTMP push أو رابط pull).
- حط البث في bouquet الدورة عشان الطلاب المسجّلين بس هم اللي يشوفوه؛ وضيفه للـ EPG لو عندك جدول.
- فعّل Catch-up أو Timeshift على البث لما الطلاب يقدروا يشاهدوا الحصة بعدين؛ والتسجيل ممكن كمان يترفع كحلقة.
الاشتراك وانتهاء الوصول
وصول بينتهي مع الدورة.
- اديّ الحزمة فترة الوصول كمدة؛ والخط المعمول منها بينتهي في نهاية الفترة دي.
- جدّد الخط لترم جديد من اللوحة، بكريديت المركز، أو عن طريق الـ API بـ action=renew_line.
- اشترك بنظامك في webhooks: هيتقاله لما الخط يقرّب ينتهي أو ينتهي أو يتعطّل.
التكامل مع LMS خارجي
الـ LMS بيتحكم في الوصول؛ والمشغّل بيشغّل.
- اعمل مفتاح Reseller API للـ LMS؛ وخلّيه في أسرار الـ LMS، مش في صفحة أبدًا.
- عند القيد الـ LMS بينادي action=create_line بحزمة البرنامج ومعرّف طلب؛ وعند الانسحاب action=disable_line.
- اربط من صفحة الدورة في الـ LMS بمشغّل الويب أو اديّ الطالب بيانات المشغّل؛ مفيش SSO بين الاتنين.
اعتبارات الأمان
خلّي الخدمة جوه المؤسسة.
- فعّل تسجيل الدخول بخطوتين لكل حساب في اللوحة واديّ الموظفين أصغر مجموعة صلاحيات تكفي.
- خلّي بيانات الطلاب الشخصية في نظام الطلاب؛ الخط محتاج اسم وتاريخ انتهاء بس.
- خلّي max connections قليل وفكّر في ربط التشغيل بعنوان المشاهد لمنع المشاركة.
- شغّل النسخ الاحتياطي المشفّر لقاعدة البيانات، ولو عندك تخزين متوافق مع S3 شغّل النسخة خارج الموقع.
حل المشاكل
الفحوص الأولى المعتادة.
- طالب مش قادر يسجّل دخول: افحص انتهاء الخط وإنه مفعّل، وبعدين الحزمة وbouquet الدورة.
- تسجيل مش بيشتغل: افحص نتيجة مهمة الاستيراد في صفحة Jobs، وبعدين الملف في جذر الميديا وانتهاء الرابط الموقّع.
- مشاهدين مبنى بيروحوا للـ origin: افحص الـ heartbeat بتاع الـ Node وإن عنوان المشاهد داخل في توجيه الـ Node.
- الـ API بيرفض استدعاء: افحص المفتاح، وطريقة الـ action (الكتابة POST) ومعرّف الطلب في الاستدعاء المعاد.