تطوير نظام حماية فيديوهات تعليمية بأسلوب HLS + PHP + MSE

تفاصيل المشروع

أنا طبيب أملك موقعًا إلكترونيًا يقدم دورات طبية بالفيديو، وأعمل حاليًا على نظام بث فيديوهات تعليمي مشفر ومؤمَّن ضد التحميل أو السرقة، مشابه للخدمات الاحترافية مثل Dyntube أو Vimeo Private Streaming، ولكن بنظام محلي ومخصص بالكامل.

وصلت إلى مرحلة متقدمة في طريقي إلى هدفي بحيث قمت بإنجاز ما يلي

- تشغيل خادم فيديو داخلي (Nginx) على جهاز minipc i5 10500 16go مخصص يمرر الفيديوهات عبر clouflared Tunnel

- استخدام HLS (HTTP Live Streaming) لتقطيع الفيديو إلى أجزاء .ts وقائمة .m3u8.

- تطبيق تشفير AES-128 على كل مقطع فيديو بمفتاح خاص وفريد.

- إنشاء سكربتات PHP خاصة لتوليد المفاتيح وتوقيعها بواسطة HMAC + توقيت انتهاء صلاحية + توليد قوائم تشغيل (.m3u8) ديناميكية وموقّعة.

- ضبط Cloudflare Rules لإضافة رؤوس CORS الصحيحة وتقييد الوصول إلى الملفات الحساسة.

- استخدام إضافات مثل PrestoPlayer أو حتى js players. لعرض الفيديوهات داخل WordPress.

الاختبارات تمت بنجاح. لكن المشكلة أن بعض الإضافات (مثل Video DownloadHelper ما زالت قادرة على اكتشاف ملف الـ m3u8 وتحميل الفيديو بالكامل. أي أن النظام يحتاج الآن إلى طبقة حماية إضافية تعمل على إخفاء عناوين الـ .m3u8 والـ .ts عن المتصفح مع ربما تمرير كل شيء من خلال سكربت PHP وسيط (Proxy/serve.php) أو أو استخدام MSE (Media Source Extensions) و Blob URLs داخل مشغل مخصص.

وبالتالي فأنا أبحث عن مبرمج خبير في حماية الفيديوهات والـ HLS والـ DRM البديل

قادر على تنفيذ أو تحسين النقاط التالية

+ تطوير سكربت php أو نظام Proxy ذكي يقوم بـ:

- التحقق من صحة التوقيع والمدة قبل كل طلب ملف.

- تمرير المقاطع .ts بشكل آمن مع دعم Range.

- منع تحميل الملفات المباشر أو فهرستها.

+ تطوير player مخصص (JavaScript) :

- يعتمد على MSE و Blob URLs.

- يعيد بناء الفيديو في الذاكرة بدون إظهار روابط الملفات الأصلية.

- إمكانية إخفاء أو تشفير manifest (playlist) ليُقرأ فقط من داخل الكود.

- تحسين السرعة والأداء (عدم انتظار كل segment كما يحدث لي الآن).

- تنفيذ بعض التحقق الأمني (Referer / IP / User-Agent / Token Rotation).

- ولم لا إضافة Obfuscation للكود JS لجعل التحليل صعبًا.

+ للإشارة فأنا أستعمل بيئة العمل الحالية

- نظام التشغيل: Windows Server (Dell PC) + VPS Linux (CyberPanel)

- Web stack: Nginx + PHP 8.2 + Cloudflare + WordPress

- أدوات مساعدة: PrestoPlayer, VLC, ffmpeg, curl

النطاقات المستخدمة:

- تحت نطاق يستضيف مقاطع الفيديو = courses

- تحت نطاق يستضيف سكربتات PHP للتشفير والمفاتيح

ملاحظات مهمة

- يمكنني إنجاز المهمة بنفسي لكن الوقت يضغط علي وعلى عملي الأصلي...

- أنا منفتح على حلول بديلة كالما كانت تعطي نفس النتائج المرجوة وتنطلق من نفس الشروط

- لا أريد حلولًا تعتمد على DRM مدفوع مثل Widevine أو FairPlay.

- الحل يجب أن يبقى مفتوح المصدر / قابل للتعديل / بدون اشتراكات خارجية.

- أقبل دمج مكتبات JS خارجية مثل hls.js أو dash.js إذا لزم الأمر.

- لا أستطيع منح صلاحيات الدخول المباشر إلى الخادم (CyberPanel) أو لوحة تحكم WordPress.

- بعد انتهاء التطوير واختبار الحل محليًا، سيقوم بتسليم :

+ الملفات الجاهزة (serve.php, playlist.php, key.php, placer.js, ...)،

+ مع شرح واضح لطريقة تركيبها وتهيئتها على السيرفر الحقيقي.

+ يمكنني تنفيذ عملية الرفع والدمج بنفسي بعد استلام الملفات والتعليمات.

+ إذا احتاج المتخصص إلى اختبار مباشر، يمكنني تفعيل نسخة مؤقتة من بيئة الاختبار (sandbox).

تقدم للمشروع

العروض المقدمة

السلام عليكم ورحمة الله وبركاته، أنا Hamza Tayachi مطور Full-Stack ومختص في حلول بث الفيديو المؤمن (HLS/AES-128 PHP/Nginx Cloudflare). أقدم حلا مفتوح المصدر لإخ...

معوض Web Full Stack Developer وبطور كمان تطبيقات Desktop وMobile. خبرتي فنية حوالي سنة ونص،. اشتغلت في شركة برمجة، في أكاديمية، وكذا مشروع فريلانس حقيقي. دلوقتي...

قبولك لهذا العرض يعتبر اتفاقاً بينك وبين المستقل وسيبقى موقع مستقل وسيطاً بينكما حتى تسليم المشروع. لن تتمكن من تغيير العرض أو إلغائه لاحقًا لذلك تأكد من اختيارك للعرض المناسب باتّباع النصائح التالية:

  • راجع صفحة حساب المستقل الذي اخترته واطّلع على أعماله السابقة
  • إن كانت هناك تفاصيل غير مذكورة في المشروع، فتواصل مع المستقل وأخبره بها أولًا
  • بإمكانك أن تتواصل مع المستقل وتسأله عن أية أمور تحتاجها
  • احرص دائمًا على إبقاء التواصل مع المستقل داخل الموقع قدر الإمكان وذلك لضمان حقوقك
  • لا تتردد من التواصل معنا ان احتجت لأي مساعدة، نحن نحب مساعدتك!

المستقل غير متاح لاستلام مشاريع، يمكنك ارسال تنبيه له لقبول العرض وإعادة المحاولة بعد بضعة ساعات، أو اختيار عرضاً من مستقل آخر.