المستوى المطلوب: محترف. هذا المقال يفترض أنك تعرف Linux command line، تفهم الفرق بين codec و container، وعندك خبرة عملية بـ NGINX و JavaScript على المتصفح. وقت القراءة المتوقع: حوالي 11 دقيقة.
لو موقعك يستضيف 200 ساعة فيديو ومعدل المشاهدة 50K مشاهد شهرياً، Cloudflare Stream هتكلفك 250 دولار على الأقل. خادم Hetzner CCX23 بـ FFmpeg و NGINX بيخدم نفس الحجم بـ 40 دولار شهرياً، مع تحكم كامل في الـ bitrate ladder و segment duration و watermark. الفرق 210 دولار شهرياً، يعني 2,520 دولار توفير سنوي صافٍ.
بث فيديو متكيّف الجودة بـ HLS — لما الـ MP4 الواحد بيفشل
المشكلة باختصار
لو حاطط ملف MP4 بجودة 1080p حجمه 800MB على CDN عادي، المستخدم في 3G هيشوفه buffering كل 4 ثوانٍ. والمستخدم في fiber هياخد نفس الـ 6Mbps من الـ bitrate رغم إن شبكته تسمح بـ 50Mbps — يعني تجربة أسوأ على الطرفين. الـ HLS بيحل ده عن طريق تقسيم الفيديو لقطع صغيرة بجودات متعددة، والمشغّل بيختار الجودة المناسبة كل segment بناءً على سرعة الإنترنت اللحظية.
المثال البسيط: مزرعة الفواكه والشاحنات
تخيل مزرعة بتصدّر فاكهة لمدن مختلفة. الزبون في القاهرة عربيته صغيرة، الزبون في الإسكندرية معاه شاحنة، والزبون في أسوان معاه دراجة. لو المزرعة بتشحن صناديق فاكهة بحجم واحد فقط، 50 كيلو لكل صندوق، صاحب الدراجة هيقعد يفك ويعيد التغليف، وصاحب الشاحنة هيستلم بطيء ومش مستفيد من حمولتها.
الحل: تجهّز الفاكهة في 3 أحجام مختلفة من البداية: 5 كيلو، 20 كيلو، 50 كيلو. لما الزبون يطلب، تبعتله الحجم اللي يناسب وسيلة نقله. ده بالظبط اللي بيعمله HLS مع شبكة المستخدم — يحضّر نفس الفيديو بجودات متعددة، ويبعت لكل مستخدم الجودة اللي تناسب سرعة شبكته اللحظية.
الشرح العلمي: HLS و Adaptive Bitrate Streaming
HLS اختصار HTTP Live Streaming، وهو بروتوكول من Apple تم اعتماده كـ RFC 8216 من IETF. الفكرة الأساسية أن الفيديو الأصلي بيتحوّل لعدة نسخ بـ bitrates مختلفة، مثلاً 480p بـ 800Kbps، و720p بـ 2.5Mbps، و1080p بـ 5Mbps. كل نسخة بتتقطّع لـ segments مدتها 4-6 ثوانٍ، وبيتعمل ملف manifest واحد بصيغة .m3u8 يحتوي على روابط كل القطع لكل جودة.
المتصفح بيقرأ الـ master manifest، يبدأ بأقل جودة لتقليل وقت البدء، يقيس سرعة التحميل لكل segment، وبعد كل قطعة يقرر هل يصعّد لجودة أعلى أو ينزل. الـ key insight هنا: التبديل بين الجودات لازم يحصل عند keyframe، يعني I-frame في لغة الـ video encoding. عشان كده FFmpeg لازم يعمل synchronized keyframes في كل النسخ، وإلا التبديل هيظهر كـ glitch مرئي.
الـ Encoding Ladder — الإعداد الأهم
قبل ما تكتب أي أمر FFmpeg، حدد الـ ladder: قائمة الـ bitrates المستهدفة. القاعدة العملية المعتمدة في 2026:
- 360p: 600Kbps فيديو + 96Kbps صوت — للـ 3G و الشبكات الضعيفة
- 480p: 1200Kbps فيديو + 128Kbps صوت — للـ 4G المتذبذب
- 720p: 2500Kbps فيديو + 128Kbps صوت — الجودة الافتراضية على الموبايل الحديث