DASH — چیست، پروتکل و اصل کار استریمینگ پویا

نویسنده: IT Sectr منتشر شده: 2026-05-23 زمان مطالعه: 9 دقیقه

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 تبدیل می‌کند.

نکات اصلی

  • DASH — یک استاندارد بین‌المللی باز MPEG برای انتقال تطبیقی جریان از طریق HTTP است.
  • فایل MPD (Media Presentation Description) جریان را از طریق ساختار XML با توصیف دوره‌ها و مجموعه‌های تطبیق مدیریت می‌کند.
  • کدک‌ها توسط مشخصات محدود نمی‌شوند — DASH از H.264، HEVC، AV1، VP9، AAC و دیگران پشتیبانی می‌کند.
  • DRM از طریق Common Encryption (CENC) پیاده‌سازی می‌شود که از Widevine، PlayReady و FairPlay در یک جریان واحد پشتیبانی می‌کند.
  • کراس پلتفرم DASH از طریق ExoPlayer (Android)، dash.js (مرورگرها) و libdash تضمین می‌شود.

DASH چیست؟

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 از طریق مالتی‌پلکس کردن انواع یک محتوا پیاده‌سازی می‌شود. سرور چندین Representation (نمایش) — کپی‌هایی از محتوا با پارامترهای فشرده‌سازی مختلف — آماده می‌کند. کلاینت پهنای باند کانال را تحلیل کرده و به صورت پویا بین نمایش‌ها جابه‌جا می‌شود و نسبت بهینه کیفیت و پایداری پخش را انتخاب می‌کند. طبق تحقیقات آکادمیک (IEEE Access, 2024)، DASH با الگوریتم BOLA در مقایسه با HLS در اتصال ناپایدار 22% تغییر نرخ‌بیت کمتری نشان می‌دهد.

تاریخچه و استانداردسازی DASH

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 نسل بعدی را اعلام کرد که شامل پشتیبانی از کدک‌های عصبی، رندرینگ ابری و بهینه‌سازی برای سناریوهای Extended Reality (XR) است. نوآوری کلیدی — Neural Network-Based Video Coding (NNVC) که از مدل‌های ML برای رمزگشایی در سمت کلاینت استفاده می‌کند و می‌تواند نرخ‌بیت را 30-50% با حفظ کیفیت کاهش دهد.

DASH چگونه کار می‌کند؟

فرآیند پخش جریان DASH از چهار مرحله متوالی تشکیل شده است: دریافت MPD، تجزیه توصیف جریان، انتخاب نمایش اولیه و جابه‌جایی پویا بین نمایش‌ها. هر مرحله ویژگی خاص خود را دارد که بر کیفیت تجربه کاربر تأثیر می‌گذارد.

دریافت و تجزیه MPD

پلیر فایل MPD را از URL مشخص بارگیری می‌کند. MPD شامل ساختار XML با توصیف کل جریان است: مدت محتوا، مقیاس زمانی، دوره‌های موجود (Period)، مجموعه‌های تطبیق (AdaptationSet) و نمایش‌ها (Representation) با پارامترهای مشخص کدگذاری. پلیر MPD را تجزیه کرده و یک مدل داخلی از منابع رسانه‌ای موجود ایجاد می‌کند.

مثال یک فایل پایه MPD برای محتوای VOD با دو وضوح:

xml
<?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 (Buffer Occupancy based Lyapunov Algorithm) و Pensieve (مبتنی بر Reinforcement Learning)، نه تنها پهنای باند فعلی، بلکه اندازه بافر، نوع محتوا (ورزش، اخبار، فیلم) و حتی مصرف انرژی دستگاه را نیز در نظر می‌گیرند. BOLA که بخشی از dash.js و ExoPlayer است، تعداد جابه‌جایی‌های نرخ‌بیت را با حفظ بافر پایدار به حداقل می‌رساند که توسط تحقیقات ACM (Spiteri et al., 2020) تأیید شده است.

ساختار DASH: MPD، Period، Adaptation Set

ساختار سلسله‌مراتبی جریان DASH در چهار سطح سازماندهی شده است: MPD → Period → AdaptationSet → Representation. هر سطح جزئیات را افزایش می‌دهد و امکان توصیف سناریوهای پیچیده — از VOD ساده تا پخش زنده با درج تبلیغات و ویدیوی چندزاویه‌ای — را فراهم می‌کند.

MPD (Media Presentation Description)

MPD — عنصر ریشه، که کل ارائه رسانه را توصیف می‌کند. ویژگی‌های MPD نوع جریان (static برای VOD، dynamic برای زنده)، مدت کل، مقیاس زمانی، پروفایل و اطلاعات DRM را تعیین می‌کنند. MPD می‌تواند یک یا چند Period داشته باشد که هر کدام یک بازه زمانی مستقل از محتوا را نشان می‌دهد.

Period، AdaptationSet و Representation

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 از یک فایل ورودی:

python
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: مقایسه پروتکل‌ها

انتخاب بین DASH و HLS یکی از تصمیم‌های کلیدی در طراحی سیستم استریمینگ ویدیو است. هر دو پروتکل یک کار را حل می‌کنند (تحویل تطبیقی ویدیو از طریق HTTP)، اما تفاوت‌های اساسی در معماری، پشتیبانی از کدک‌ها و اکوسیستم دارند. بیایید آنها را بر اساس پارامترهای کلیدی بررسی کنیم.

پارامترDASHHLS
استانداردبین‌المللی (ISO/IEC 23009-1)اختصاصی (RFC 8216، Apple)
توصیف جریانXML (MPD)پلی‌لیست M3U8
کدک‌هاهر نوع (H.264، HEVC، AV1، VP9)محدود (H.264، HEVC، AV1 از 2023)
فرمت بخش‌هاfMP4 (اصلی)، MPEG-2 TSMPEG-2 TS، fMP4
DRMCENC (یکپارچه برای همه 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-first، HLS استاندارد de-facto باقی می‌ماند، در حالی که برای Android و پلتفرم‌های وب، DASH راه‌حل انعطاف‌پذیرتر و قدرتمندتری است.

کاربرد DASH در توسعه موبایل

یکپارچگی DASH در برنامه‌های موبایل به پلتفرم بستگی دارد. در Android، DASH به طور مستقیم از طریق ExoPlayer با ماژول توسعه پشتیبانی می‌شود. در iOS استفاده از کتابخانه‌های شخص ثالث مانند libdash با یکپارچگی از طریق AVFoundation یا MPEGDASHPlayer مورد نیاز است. بیایید پیاده‌سازی عملی را برای هر دو پلتفرم بررسی کنیم.

DASH در Android از طریق ExoPlayer

ExoPlayer از Google پشتیبانی داخلی از DASH را از طریق ماژول `exoplayer-dash` فراهم می‌کند. اتصال جریان DASH تفاوتی با سایر فرمت‌ها ندارد — کافی است URI فایل MPD را به MediaItem منتقل کنید. ExoPlayer به طور خودکار فرمت محتوا را تشخیص داده و رندرر مربوطه را راه‌اندازی می‌کند و از تمام الگوریتم‌های استاندارد ABR پشتیبانی می‌کند.

kotlin
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

DASH با DRM در هر دو پلتفرم

Common Encryption (CENC) — یکی از قابلیت‌های کلیدی DASH است که امکان استفاده از یک جریان رسانه با سیستم‌های DRM مختلف را فراهم می‌کند. فایل MPD شامل عناصر XML ContentProtection با شناسه‌های سیستم‌های DRM (Widevine، PlayReady، FairPlay) است. کلاینت بر اساس پلتفرم خود سیستم DRM مناسب را انتخاب کرده و از طریق سرور مجوز، مجوز درخواست می‌کند.

kotlin
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 برای دستگاه‌های موبایل

برنامه‌های موبایل به دلیل محدودیت‌های پهنای باند و مصرف انرژی نیاز به تنظیم خاص 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 چه تفاوتی با HLS دارد؟

DASH — یک استاندارد باز بین‌المللی MPEG است که به فروشنده وابسته نیست. برخلاف HLS (پروتکل اختصاصی Apple)، DASH از هر کدکی پشتیبانی می‌کند، از توصیف جریان XML (MPD) به جای M3U8 استفاده می‌کند و یک سیستم DRM واحد از طریق CENC فراهم می‌کند. HLS پشتیبانی بومی در iOS دارد، DASH برای راه‌حل‌های کراس پلتفرم انعطاف‌پذیرتر است.

کدام پلیرها از DASH در دستگاه‌های موبایل پشتیبانی می‌کنند؟

در Android پلیر اصلی برای DASH ExoPlayer از Google با ماژول exoplayer-dash است. در iOS از راه‌حل‌های شخص ثالث مانند libdash با یکپارچگی از طریق AVFoundation یا پلیرهای تجاری (THEOplayer، Bitmovin) استفاده می‌شود. در مرورگرهای وب، DASH از طریق dash.js با استفاده از MediaSource Extensions پخش می‌شود.

MPD در زمینه DASH چیست؟

MPD (Media Presentation Description) — یک فایل XML است که ساختار جریان DASH را توصیف می‌کند: مدت محتوا، نرخ‌بیت‌های موجود، وضوح‌ها، کدک‌ها، فرمت‌های بخش و مکان آنها. MPD به عنوان نقطه ورود برای پلیر عمل می‌کند و جایگزین پلی‌لیست اصلی در HLS می‌شود. بدون فایل MPD، پخش محتوای DASH غیرممکن است.

آیا DASH از پخش زنده پشتیبانی می‌کند؟

بله، DASH هم از VOD و هم از پخش زنده پشتیبانی می‌کند. برای پخش زنده از نوع dynamic MPD با به‌روزرسانی خودکار استفاده می‌شود. سرور به صورت دوره‌ای MPD را به‌روزرسانی می‌کند، بخش‌های جدید اضافه کرده و بخش‌های قدیمی را حذف می‌کند. Low-Latency DASH (LL-DASH) با رمزگذاری تکه‌ای امکان دستیابی به تأخیر 3-8 ثانیه را فراهم می‌کند که قابل مقایسه با LL-HLS است.

DRM در DASH چگونه کار می‌کند؟

DASH از Common Encryption (CENC، ISO/IEC 23001-7) استفاده می‌کند که امکان رمزگذاری محتوای رسانه یک بار و رمزگشایی آن توسط هر سیستم DRM را فراهم می‌کند. MPD شامل عناصر XML ContentProtection با مشخص کردن DRMهای پشتیبانی‌شده (Widevine، PlayReady، FairPlay) است. پلیر بر اساس پلتفرم خود DRM مناسب را انتخاب کرده و از طریق URL مشخص شده مجوز درخواست می‌کند.

خلاصه

  • MPEG-DASH — استاندارد باز بین‌المللی برای استریمینگ تطبیقی HTTP با توصیف جریان در قالب XML MPD.
  • استقلال از کدک — DASH از H.264، HEVC، AV1، VP9 و هر کدک دیگری که در دسترس پلیر است پشتیبانی می‌کند.
  • CENC رمزگذاری یکپارچه محتوا را برای همه سیستم‌های DRM فراهم می‌کند و صدور مجوز را ساده می‌کند.
  • الگوریتم‌های ABR (BOLA، Pensieve) جابه‌جایی نرخ‌بیت را به حداقل رسانده و پخش پایدار را تضمین می‌کنند.
  • Android — DASH به صورت بومی در ExoPlayer پشتیبانی می‌شود؛ iOS نیاز به کتابخانه‌های شخص ثالث دارد.
  • LL-DASH تأخیر پخش زنده را به 3-8 ثانیه کاهش می‌دهد.
  • توصیه می‌شود برای پروژه‌های کراس پلتفرم که در آن انعطاف‌پذیری کدک و DRM مهم است از DASH استفاده کنید.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید