Dynamic Adaptive Streaming over HTTP (DASH) هو معيار دولي للبث التكيفي للوسائط المتعددة، طورته MPEG (Moving Picture Experts Group). يوفر DASH الفيديو والصوت عبر HTTP باستخدام وصف XML للتيار بتنسيق Media Presentation Description (MPD) ويقسم المحتوى إلى مقاطع ذات معدلات بت مختلفة. وفقًا لتقرير Bitmovin Video Developer Report (2025)، يستخدم 58% من مطوري الفيديو DASH، مما يجعله ثاني أكثر البروتوكولات شيوعًا بعد HLS.
الملخص
MPEG-DASH (Dynamic Adaptive Streaming over HTTP) هو معيار دولي ISO/IEC 23009-1، نُشر في 2012 كرد على تجزئة الحلول الخاصة للبث التكيفي. على عكس HLS (بروتوكول Apple الخاص) وSmooth Streaming (Microsoft)، تم تطوير DASH منذ البداية كمعيار مفتوح غير مرتبط بأي بائع، مما ضمن دعمه الواسع في الصناعة.
الابتكار الرئيسي لـ DASH هو الفصل بين وصف التيار والمحتوى الوسائطي. يُخزن وصف التيار في ملف XML يسمى MPD (Media Presentation Description)، والذي يحتوي على جميع المعلومات حول الخيارات المتاحة: معدلات البت، الدقات، الترميزات، الترجمة، المسارات الصوتية. يُخزن المحتوى الوسائطي في مقاطع منفصلة (عادة fMP4)، يمكن تحميلها بشكل مستقل عبر HTTP. تسمح هذه البنية بأن تكون البنية التحتية للخادم بسيطة قدر الإمكان — أي خادم HTTP يمكنه تقديم محتوى DASH.
تم تنفيذ التكيف في DASH من خلال تعدد المتغيرات للمحتوى. يُعد الخادم عدة تمثيلات — نسخ من المحتوى بمعلمات ضغط مختلفة. يحلل العميل عرض النطاق الترددي للقناة ويتبدل ديناميكيًا بين التمثيلات، مختارًا التوازن الأمثل بين الجودة واستقرار التشغيل. وفقًا لدراسة أكاديمية (IEEE Access, 2024)، يُظهر DASH مع خوارزمية BOLA تبديلات أقل بنسبة 22% في معدل البت مقارنة بـ HLS في الاتصالات غير المستقرة.
بدأت MPEG العمل على DASH في 2010 بعد تحليل الحلول الحالية: Apple HLS وMicrosoft Smooth Streaming وAdobe HDS. صدرت النسخة الأولى من المعيار (ISO/IEC 23009-1:2012) في 2012. أضافت النسخة الثانية (2014) دعم الأحداث وتحسين إدراج الإعلانات والتكيف المتحكم به من الخادم. أضافت النسخة الثالثة (2019) دعم HDR و8K والفيديو اللمسي وتحسين التكامل مع MMT (MPEG Media Transport) لشبكات 5G.
في 2024، أعلنت MPEG عن DASH الجيل التالي، الذي يتضمن دعم ترميزات الشبكات العصبية والعرض السحابي والتحسين لسيناريوهات الواقع الممتد (XR). الابتكار الرئيسي هو ترميز الفيديو القائم على الشبكات العصبية (NNVC)، الذي يستخدم نماذج التعلم الآلي لفك الترميز على جانب العميل، مما قد يقلل معدل البت بنسبة 30-50% مع الحفاظ على الجودة.
تتكون عملية تشغيل تيار DASH من أربع مراحل متتالية: الحصول على MPD، تحليل وصف التيار، اختيار التمثيل الأولي، والتبديل الديناميكي بين التمثيلات. لكل مرحلة خصوصيتها التي تؤثر على جودة تجربة المستخدم.
يقوم المشغل بتحميل ملف MPD من عنوان URL معروف. يحتوي MPD على هيكل XML يصف التيار بأكمله: مدة المحتوى، الخط الزمني، الفترات المتاحة (Period)، مجموعات التكيف (AdaptationSet)، والتمثيلات (Representation) مع معلمات الترميز المحددة. يحلل المشغل MPD وينشئ نموذجًا داخليًا للموارد الوسائطية المتاحة.
مثال على ملف MPD أساسي لمحتوى VOD بدقتين:
<?xml version="1.0" encoding="utf-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011"
profiles="urn:mpeg:dash:profile:isoff-live:2011"
type="static"
mediaPresentationDuration="PT1H30M">
<Period duration="PT1H30M">
<AdaptationSet mimeType="video/mp4">
<Representation bandwidth="5000000"
width="1920" height="1080"
codecs="avc1.640028"/>
<Representation bandwidth="1000000"
width="640" height="360"
codecs="avc1.64001E"/>
</AdaptationSet>
</Period>
</MPD>
بعد اختيار التمثيل الأولي، يبدأ المشغل في تحميل المقاطع. يحتوي كل مقطع على عدة ثوانٍ من المحتوى (عادة 2-10 ثوانٍ). يحافظ المشغل على مخزن مؤقت لعدة مقاطع مسبقًا، مما يضمن مقاومة الانخفاضات القصيرة في سرعة الشبكة. تراقب خوارزمية ABR (معدل البت التكيفي) باستمرار سرعة تحميل المقاطع وتقرر التبديل بين معدلات البت المتاحة.
تأخذ خوارزميات ABR الحديثة لـ DASH، مثل BOLA (خوارزمية Lyapunov القائمة على إشغال المخزن المؤقت) وPensieve (القائمة على التعلم التعزيزي)، في الاعتبار ليس فقط عرض النطاق الترددي الحالي ولكن أيضًا حجم المخزن المؤقت ونوع المحتوى (رياضة، أخبار، أفلام) وحتى استهلاك طاقة الجهاز. تعمل BOLA، وهي جزء من dash.js وExoPlayer، على تقليل عدد تبديلات معدل البت مع الحفاظ على مخزن مؤقت مستقر، كما أكدته أبحاث ACM (Spiteri et al., 2020).
تم تنظيم الهيكل الهرمي لتيار DASH في أربعة مستويات: MPD ← Period ← AdaptationSet ← Representation. يضيف كل مستوى طبقة من التفاصيل، مما يسمح بوصف سيناريوهات معقدة — من VOD البسيط إلى البث المباشر مع إدراج الإعلانات والفيديو متعدد الزوايا.
MPD هو العنصر الجذر الذي يصف العرض الوسائطي بأكمله. تحدد سمات MPD نوع التيار (static لـ VOD، dynamic للبث المباشر)، المدة الإجمالية، الخط الزمني، الملف الشخصي، ومعلومات DRM. يمكن أن يحتوي MPD على Period واحد أو عدة Periods، كل منها يمثل مقطعًا زمنيًا مستقلاً من المحتوى.
Period هو مقطع زمني من العرض. لـ VOD، يُستخدم Period واحد للمحتوى بأكمله. للبث المباشر مع فواصل إعلانية، يمكن أن يتغير Period ديناميكيًا — يقوم المشغل بتحميل MPD المحدث ويكتشف Period جديدًا يتوافق مع كتلة الإعلان. يحتوي كل Period على واحد أو أكثر من AdaptationSet.
AdaptationSet هو مجموعة من التمثيلات القابلة للتبادل لنوع وسائط واحد: فيديو، صوت، ترجمة. داخل AdaptationSet، تختلف جميع التمثيلات فقط في معدل البت و/أو الدقة ولكنها تشفر نفس المحتوى. خاصية مهمة: يمكن للمشغل التبديل بين التمثيلات داخل نفس AdaptationSet عند حدود المقاطع دون انقطاع التشغيل.
Representation هو متغير ترميز محدد بمعدل بت ودقة وترميز معينين. لكل Representation، يحدد MPD قالب عنوان URL لتحميل المقاطع. يستخدم DASH نظامًا مرنًا لعنونة المقاطع — من خلال قوالب URL مع استبدال رقم المقطع والوقت ($Number$، $Time$)، مما يسمح للخادم بإنشاء أسماء الملفات ديناميكيًا دون الحاجة إلى سرد كل مقطع في MPD.
المقاطع في DASH يمكن أن تكون من نوعين: نوع Segment (يحتوي فقط على بيانات وسائطية) ونوع Subsegment (جزء من مقطع للوصول الأكثر دقة). لتشفير محتوى DASH، تُستخدم أدوات مثل FFmpeg أو أدوات التشفير الدفعية. مثال على إنشاء تيار DASH من ملف إدخال:
import subprocess
subprocess.run([
"ffmpeg",
"-i", "input.mp4",
"-filter_complex",
"[0:v]split=2[v1][v2];[v1]scale=1920:1080[v1out];[v2]scale=640:360[v2out]",
"-map", "[v1out]", "-b:v:0", "5000k",
"-map", "[v2out]", "-b:v:1", "1000k",
"-map", "0:a",
"-f", "dash",
"-seg_duration", "4",
"-use_template", "1",
"-use_timeline", "1",
"dash/stream.mpd"
])
الاختيار بين DASH وHLS هو أحد القرارات الرئيسية عند تصميم نظام بث الفيديو. يحل كلا البروتوكولين نفس المشكلة (التوصيل التكيفي للفيديو عبر HTTP)، لكن لديهما اختلافات جوهرية في البنية ودعم الترميزات والنظام البيئي. دعنا نفحصهما حسب المعايير الرئيسية.
| المعيار | DASH | HLS |
|---|---|---|
| المواصفة | دولي (ISO/IEC 23009-1) | خاص (RFC 8216، Apple) |
| وصف التيار | XML (MPD) | قائمة تشغيل M3U8 |
| الترميزات | أي (H.264، HEVC، AV1، VP9) | محدود (H.264، HEVC، AV1 منذ 2023) |
| تنسيق المقاطع | fMP4 (أساسي)، MPEG-2 TS | MPEG-2 TS، fMP4 |
| DRM | CENC (موحد لجميع DRM) | FairPlay، Widevine (منفصل) |
| دعم iOS | عبر مشغلات طرف ثالث | أصلي (AVPlayer، Safari) |
| المتصفحات | Chrome، Firefox، Edge (عبر MSE) | Safari (أصلي)، الباقي عبر MSE |
الميزة الرئيسية لـ DASH — استقلالية الترميزات. بينما كان HLS يقيد الترميزات في الأصل بتلك التي تدعمها Apple (H.264، HEVC، ومؤخرًا AV1)، يمكن لـ DASH استخدام أي ترميز يدعمه المشغل: VP9/VP8 (ضروري لـ YouTube وChrome)، AV1 (للكفاءة)، H.264/HEVC (للتوافق). هذا يجعل DASH الخيار المفضل للخدمات عبر المنصات التي تتطلب تيارًا موحدًا لجميع الأجهزة.
العيب لـ DASH على iOS — عدم وجود دعم أصلي في Safari وAVPlayer. يحتاج مطورو iOS إلى استخدام مشغلات متوافقة مع HLS من طرف ثالث أو مكتبات مثل libdash مع التكامل عبر VTDecoder. عمليًا، هذا يعني أنه بالنسبة للمشاريع التي تركز على iOS، يظل HLS هو المعيار الفعلي، بينما بالنسبة لـ Android والمنصات الويب، يعتبر DASH حلاً أكثر مرونة وقوة.
التكامل لـ DASH في التطبيقات المحمولة يعتمد على المنصة. على Android، يتم دعم DASH مباشرة من خلال ExoPlayer مع وحدة التوسعة. على iOS، يلزم استخدام مكتبات طرف ثالث مثل libdash مع التكامل عبر AVFoundation أو MPEGDASHPlayer. دعنا نلقي نظرة على التنفيذ العملي لكلتا المنصتين.
ExoPlayer من Google يوفر دعمًا مدمجًا لـ DASH من خلال وحدة `exoplayer-dash`. لا يختلف اتصال تيار DASH عن التنسيقات الأخرى — فقط قم بتمرير URI لملف MPD في MediaItem. يكتشف ExoPlayer تلقائيًا تنسيق المحتوى ويشغل العارض المناسب، ويدعم جميع خوارزميات ABR القياسية.
val player = ExoPlayer.Builder(this).build()
val dashMediaItem = MediaItem
.Builder()
.setUri("https://example.com/dash/stream.mpd")
.setMimeType("application/dash+xml")
.build()
player.setMediaItem(dashMediaItem)
player.prepare()
player.playWhenReady = true
Common Encryption (CENC) هي إحدى الميزات الرئيسية لـ DASH، مما يسمح باستخدام تيار وسائطي واحد مع أنظمة DRM مختلفة. يحتوي ملف MPD على عناصر XML ContentProtection مع معرفات أنظمة DRM (Widevine، PlayReady، FairPlay). يختار العميل نظام DRM المناسب بناءً على منصته ويطلب ترخيصًا من خادم الترخيص.
val drmLicenseUri = Uri.parse("https://license.example.com/wv")
val drmSessionManager = DefaultDrmSessionManager
.Builder()
.setUuidAndExoMediaDrmProvider(
C.WIDEVINE_UUID,
FrameworkMediaDrm.DEFAULT_PROVIDER
)
.build(drmLicenseUri, null)
val mediaItem = MediaItem
.Builder()
.setUri("https://example.com/encrypted/stream.mpd")
.setDrmConfiguration(
MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
.setLicenseUri("https://license.example.com/wv")
.build()
)
.build()
تتطلب التطبيقات المحمولة تكوينًا خاصًا لـ DASH بسبب قيود عرض النطاق الترددي واستهلاك الطاقة. تشمل التوصيات الرئيسية: تعيين مخزن مؤقت لا يقل عن 2-3 مقاطع لمقاومة الانخفاضات القصيرة في السرعة، استخدام مقاطع بطول 2-4 ثوانٍ للاستجابة الأسرع لتغيرات الشبكة، وتحميل المقطع التالي مسبقًا عند تغيير الجودة.
لتوفير حركة المرور على الشبكات المحمولة، توصي Bitmovin (2024) باستخدام Content Steering — آلية مشابهة للوظيفة المماثلة في HLS، مما يسمح بتوجيه العميل ديناميكيًا إلى عقدة CDN المثلى. يتم وصف DASH Content Steering في المواصفة ISO/IEC 23009-1:2022 وهو مدعوم في dash.js 4.5+ وExoPlayer 2.18+.
الأسئلة الشائعة
DASH هو معيار دولي مفتوح من MPEG، غير مرتبط بأي بائع. على عكس HLS (بروتوكول Apple الخاص)، يدعم DASH أي ترميزات، ويستخدم وصف تيار XML (MPD) بدلاً من M3U8، ويوفر نظام DRM موحدًا من خلال CENC. يتمتع HLS بدعم أصلي على iOS، بينما DASH أكثر مرونة للحلول عبر المنصات.
على Android، المشغل الأساسي لـ DASH هو ExoPlayer من Google مع وحدة exoplayer-dash. على iOS، تُستخدم حلول طرف ثالث مثل libdash مع التكامل عبر AVFoundation أو المشغلات التجارية (THEOplayer، Bitmovin). في متصفحات الويب، يتم تشغيل DASH عبر dash.js باستخدام MediaSource Extensions.
MPD (Media Presentation Description) هو ملف XML يصف هيكل تيار DASH: مدة المحتوى، معدلات البت المتاحة، الدقات، الترميزات، تنسيقات المقاطع ومواقعها. يعمل MPD كنقطة دخول للمشغل، ليحل محل قائمة التشغيل الرئيسية في HLS. بدون ملف MPD، يكون تشغيل محتوى DASH مستحيلاً.
نعم، يدعم DASH كلاً من VOD والبث المباشر. للبث المباشر، يُستخدم نوع MPD dynamic مع تحديث تلقائي. يقوم الخادم بتحديث MPD بشكل دوري، مضيفًا مقاطع جديدة وحذف القديمة. يتيح Low-Latency DASH (LL-DASH) مع الترميز المجزأ تحقيق زمن وصول 3-8 ثوانٍ، مماثل لـ LL-HLS.
DASH يستخدم Common Encryption (CENC، ISO/IEC 23001-7)، والذي يسمح بتشفير المحتوى الوسائطي مرة واحدة وفك تشفيره بواسطة أي نظام DRM. يحتوي MPD على عناصر XML ContentProtection مع الإشارة إلى أنظمة DRM المدعومة (Widevine، PlayReady، FairPlay). يختار المشغل نظام DRM المناسب بناءً على المنصة ويطلب ترخيصًا عبر URL المحدد.
الخلاصة
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.