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