Dynamic Adaptive Streaming over HTTP (DASH) — MPEG (Moving Picture Experts Group) tərəfindən hazırlanmış adaptiv axınlı multimedia ötürülməsi üçün beynəlxalq standartdır. DASH, Media Presentation Description (MPD) formatında XML axın təsvirindən istifadə edərək və məzmunu müxtəlif bitrate-lərə malik seqmentlərə bölərək video və audionun HTTP üzərindən çatdırılmasını təmin edir. Bitmovin Video Developer Report (2025) araşdırmasına görə, video tərtibatçılarının 58%-i DASH-dan istifadə edir və bu onu HLS-dən sonra ikinci ən populyar protokol edir.
Əsas məqamlar
MPEG-DASH (Dynamic Adaptive Streaming over HTTP) — 2012-ci ildə nəşr olunmuş ISO/IEC 23009-1 beynəlxalq standartıdır, mülkiyyətli adaptiv axın həllərinin parçalanmasına cavab olaraq yaradılmışdır. HLS (Apple-ın mülkiyyət protokolu) və Smooth Streaming (Microsoft) fərqli olaraq, DASH əvvəldən açıq, konkret satıcıya bağlı olmayan standart kimi hazırlanmışdır ki, bu da sənayedə geniş dəstəyini təmin etmişdir.
DASH-ın əsas yeniliyi — axın təsvirinin və media məzmununun ayrılmasıdır. Axın təsviri MPD (Media Presentation Description) XML faylında saxlanılır və mövcud variantlar haqqında bütün məlumatları ehtiva edir: bitrate-lər, rezolyusiyalar, kodeklər, altyazılar, audio yolları. Media məzmunu ayrı-ayrı seqmentlər (adətən fMP4) şəklində saxlanılır və HTTP vasitəsilə müstəqil yüklənə bilər. Bu arxitektura server infrastrukturunun maksimum dərəcədə sadə olmasına imkan verir — istənilən HTTP server DASH məzmununu paylaya bilər.
DASH-ın adaptivliyi eyni məzmunun variantlarının multipleksləşdirilməsi ilə həyata keçirilir. Server müxtəlif sıxılma parametrləri ilə bir neçə təmsil (Representation) hazırlayır. Kanalın ötürmə qabiliyyətini təhlil edir və keyfiyyət və sabitlik arasında optimal nisbəti seçərək dinamik olaraq təmsillər arasında keçid edir. Akademik tədqiqata (IEEE Access, 2024) görə, BOLA alqoritmi ilə DASH qeyri-sabit əlaqədə HLS ilə müqayisədə 22% daha az bitrate dəyişikliyi göstərir.
MPEG 2010-cu ildə mövcud həlləri təhlil etdikdən sonra DASH üzərində işə başlamışdır: Apple HLS, Microsoft Smooth Streaming və Adobe HDS. Standartın ilk versiyası (ISO/IEC 23009-1:2012) 2012-ci ildə buraxılmışdır. İkinci versiya (2014) hadisələrin dəstəyini, təkmilləşdirilmiş reklam daxiletməni və Server tərəfindən idarə olunan adaptasiyanı əlavə etmişdir. Üçüncü versiya (2019) — HDR, 8K, taktil video dəstəyini və 5G şəbəkələri üçün MMT (MPEG Media Transport) ilə təkmilləşdirilmiş inteqrasiyanı əlavə etmişdir.
2024-cü ildə MPEG DASH Next Generation-ı elan etmişdir ki, bura neyron şəbəkə kodeklərinin dəstəyi, bulud renderinqi və Extended Reality (XR) ssenariləri üçün optimallaşdırma daxildir. Əsas yenilik — Neural Network-Based Video Coding (NNVC), klient tərəfdə dekodlaşdırma üçün ML modellərindən istifadə edir ki, bu da keyfiyyəti qoruyarkən bitrate-i 30-50% azalda bilər.
DASH axınının oxudulması prosesi dörd ardıcıl mərhələdən ibarətdir: MPD-nin alınması, axın təsvirinin təhlili, ilkin təmsilin seçilməsi və təmsillər arasında dinamik keçid. Hər mərhələnin istifadəçi təcrübəsinin keyfiyyətinə təsir edən öz xüsusiyyətləri var.
Oynadıcı MPD faylını məlum URL ünvanından yükləyir. MPD bütün axının təsviri ilə XML strukturu ehtiva edir: məzmunun müddəti, vaxt miqyası, mövcud dövrlər (Period), adaptasiya dəstləri (AdaptationSet) və kodlaşdırmanın konkret parametrləri ilə təmsillər (Representation). Oynadıcı MPD-ni təhlil edir və mövcud media resurslarının daxili modelini yaradır.
İki rezolyusiyalı VOD məzmunu üçün əsas MPD faylı nümunəsi:
<?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>
İlkin təmsil seçildikdən sonra oynadıcı seqmentləri yükləməyə başlayır. Hər seqment bir neçə saniyə məzmun ehtiva edir (adətən 2-10 saniyə). Oynadıcı irəlidə bir neçə seqment üçün bufer saxlayır ki, bu da şəbəkə sürətində qısamüddətli enişlərə qarşı dayanıqlığı təmin edir. Təmsil seçimi alqoritmi (ABR) seqmentlərin yüklənmə sürətini daim izləyir və mövcud bitrate-lər arasında keçid haqqında qərar qəbul edir.
DASH üçün müasir ABR alqoritmləri, məsələn BOLA (Buffer Occupancy based Lyapunov Algorithm) və Pensieve (Reinforcement Learning əsaslı), yalnız cari ötürmə qabiliyyətini deyil, həm də bufer ölçüsünü, məzmun növünü (idman, xəbərlər, film) və hətta cihazın enerji istehlakını nəzərə alır. dash.js və ExoPlayer-ə daxil olan BOLA, sabit buferi qoruyarkən bitrate dəyişikliklərinin sayını minimuma endirir, bu ACM tədqiqatları (Spiteri et al., 2020) tərəfindən təsdiqlənmişdir.
DASH axınının iyerarxik strukturu dörd səviyyədə təşkil olunub: MPD → Period → AdaptationSet → Representation. Hər səviyyə təfərrüat səviyyəsini artıraraq sadə VOD-dan tutmuş reklam əlavələri və çoxbucaqlı video ilə canlı yayımlara qədər mürəkkəb ssenariləri təsvir etməyə imkan verir.
MPD — bütün media təqdimatını təsvir edən kök elementdir. MPD atributları axın növünü (VOD üçün static, canlı yayım üçün dynamic), ümumi müddəti, vaxt miqyasını, profili və DRM haqqında məlumatı müəyyən edir. MPD bir və ya bir neçə Period ehtiva edə bilər, hər biri müstəqil zaman intervalını təmsil edir.
Period — təqdimatın zaman seqmentidir. VOD üçün bütün məzmun üçün bir Period istifadə olunur. Reklam əlavələri ilə canlı yayım üçün Period dinamik olaraq dəyişə bilər — oynadıcı yenilənmiş MPD-ni yükləyir və reklam blokuna uyğun yeni Period aşkarlayır. Hər Period bir və ya bir neçə AdaptationSet ehtiva edir.
AdaptationSet — bir media növünün (video, audio, altyazı) qarşılıqlı əvəzolunan təmsillər qrupudur. AdaptationSet daxilində bütün təmsillər yalnız bitrate və/və ya rezolyusiya ilə fərqlənir, lakin eyni məzmunu kodlayır. Vacib xüsusiyyət: oynadıcı bir AdaptationSet daxilində seqmentlərin sərhəddində təmsillər arasında fasiləsiz keçid edə bilər.
Representation — müəyyən bitrate, rezolyusiya və kodeklə konkret kodlaşdırma variantıdır. Hər təmsil üçün MPD-də seqment yükləmə URL şablonu göstərilir. DASH çevik ünvanlama sistemindən istifadə edir — seqment nömrəsi və vaxtının əvəzlənməsi ilə URL şablonları ($Number$, $Time$) vasitəsilə, bu da serverə hər seqmenti MPD-də sadalamadan fayl adlarını dinamik yaratmağa imkan verir.
Seqmentlər iki növ ola bilər: Segment növü (yalnız media məlumatları) və Subsegment növü (daha dəqiq giriş üçün seqmentin hissəsi). DASH məzmununu kodlaşdırmaq üçün FFmpeg və ya paket kodlayıcıları kimi alətlər istifadə olunur. Giriş faylından DASH axını yaratmaq nümunəsi:
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 və HLS arasında seçim video axını sisteminin layihələndirilməsində əsas qərarlardan biridir. Hər iki protokol eyni vəzifəni (adaptiv HTTP video çatdırılması) həll edir, lakin arxitektura, kodek dəstəyi və ekosistem baxımından əsaslı fərqlərə malikdir. Onları əsas parametrlər üzrə nəzərdən keçirək.
| Parametr | DASH | HLS |
|---|---|---|
| Standart | Beynəlxalq (ISO/IEC 23009-1) | Mülkiyyət (RFC 8216, Apple) |
| Axın təsviri | XML (MPD) | M3U8 pleylist |
| Kodeklər | İstənilən (H.264, HEVC, AV1, VP9) | Məhdud (H.264, HEVC, AV1 2023-dən) |
| Seqment formatı | fMP4 (əsas), MPEG-2 TS | MPEG-2 TS, fMP4 |
| DRM | CENC (bütün DRM üçün vahid) | FairPlay, Widevine (ayrı) |
| iOS dəstəyi | Üçüncü tərəf oynadıcıları vasitəsilə | Yerli (AVPlayer, Safari) |
| Brauzerlər | Chrome, Firefox, Edge (MSE vasitəsilə) | Safari (yerli), qalanları MSE vasitəsilə |
DASH-ın əsas üstünlüyü — kodeklərdən asılı olmaması. HLS əvvəlcə kodekləri Apple-ın dəstəklədikləri ilə məhdudlaşdırırdısa (H.264, HEVC və son vaxtlar AV1), DASH oynadıcı tərəfindən dəstəklənən istənilən kodekdən istifadə edə bilər: VP9/VP8 (YouTube və Chrome üçün kritik), AV1 (səmərəlilik üçün), H.264/HEVC (uyğunluq üçün). Bu DASH-ı bütün cihazlar üçün vahid axın tələb edən çarpaz platforma xidmətləri üçün üstünlük təşkil edir.
DASH-ın iOS-da çatışmazlığı — Safari və AVPlayer-də yerli dəstəyin olmaması. iOS tətbiq tərtibatçıları HLS-uyğun üçüncü tərəf oynadıcılarından və ya VTDecoder vasitəsilə inteqrasiya ilə libdash kimi kitabxanalardan istifadə etməlidirlər. Praktikada bu o deməkdir ki, iOS-yönümlü layihələr üçün HLS de-fakto standart olaraq qalır, Android və veb platformalar üçün isə DASH daha çevik və güclü həll yoludur.
DASH-ın inteqrasiyası mobil tətbiqlərdə platformadan asılıdır. Android-də DASH birbaşa ExoPlayer genişləndirmə modulu ilə dəstəklənir. iOS-da AVFoundation və ya MPEGDASHPlayer vasitəsilə inteqrasiya ilə libdash kimi üçüncü tərəf kitabxanalarının istifadəsi tələb olunur. Hər iki platforma üçün praktik tətbiqi nəzərdən keçirək.
Google-dan ExoPlayer `exoplayer-dash` modulu vasitəsilə DASH-ın daxili dəstəyini təmin edir. DASH axınının qoşulması digər formatlardan fərqlənmir — MediaItem-ə MPD faylının URI-ni ötürmək kifayətdir. ExoPlayer avtomatik olaraq məzmun formatını müəyyən edir və müvafiq rendereri işə salır, bütün standart ABR alqoritmlərini dəstəkləyir.
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-ın əsas imkanlarından biridir, müxtəlif DRM sistemləri ilə bir media axınından istifadə etməyə imkan verir. MPD faylı DRM sistemlərinin identifikatorları (Widevine, PlayReady, FairPlay) ilə ContentProtection XML elementlərini ehtiva edir. Klient öz platformasına əsasən uyğun DRM sistemini seçir və lisenziya serveri vasitəsilə lisenziya tələb edir.
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()
Mobil tətbiqlər ötürmə qabiliyyəti və enerji istehlakının məhdudiyyətləri səbəbindən DASH-ın xüsusi tənzimlənməsini tələb edir. Əsas tövsiyələrə daxildir: qısamüddətli sürət enişlərinə qarşı dayanıqlıq üçün minimum 2-3 seqment buferinin qurulması, şəbəkə dəyişikliklərinə daha sürətli reaksiya üçün 2-4 saniyə müddətli seqmentlərin istifadəsi və keyfiyyət dəyişikliyi zamanı növbəti seqmentin əvvəlcədən yüklənməsi.
Mobil şəbəkələrdə trafikə qənaət üçün Bitmovin (2024) Content Steering — HLS-in analoji funksiyasına bənzər, klienti optimal CDN qovşağına dinamik yönləndirməyə imkan verən mexanizmdən istifadə etməyi tövsiyə edir. DASH Content Steering ISO/IEC 23009-1:2022 spesifikasiyasında təsvir olunub və dash.js 4.5+ və ExoPlayer 2.18+ tərəfindən dəstəklənir.
Tez-tez verilən suallar
DASH — satıcıya bağlı olmayan açıq beynəlxalq MPEG standartıdır. HLS-dən (Apple-ın mülkiyyət protokolu) fərqli olaraq, DASH istənilən kodekləri dəstəkləyir, M3U8 əvəzinə XML axın təsvirindən (MPD) istifadə edir və CENC vasitəsilə vahid DRM sistemi təmin edir. HLS iOS-da yerli dəstəyə malikdir, DASH çarpaz platforma həlləri üçün daha çevikdir.
Android-də DASH üçün əsas oynadıcı Google-un ExoPlayer-idir exoplayer-dash modulu ilə. iOS-da AVFoundation vasitəsilə inteqrasiya ilə libdash və ya kommersiya oynadıcıları (THEOplayer, Bitmovin) kimi üçüncü tərəf həlləri istifadə olunur. Veb brauzerlərdə DASH dash.js vasitəsilə MediaSource Extensions istifadə edərək oxudulur.
MPD (Media Presentation Description) — DASH axınının strukturunu təsvir edən XML faylıdır: məzmun müddəti, mövcud bitrate-lər, rezolyusiyalar, kodeklər, seqment formatları və onların yerləşməsi. MPD oynadıcı üçün giriş nöqtəsi kimi xidmət edir, HLS-də master-pleylisti əvəz edir. MPD faylı olmadan DASH məzmununun oxudulması mümkün deyil.
Bəli, DASH həm VOD, həm də canlı yayımı dəstəkləyir. Canlı yayım üçün avtomatik yeniləmə ilə dynamic MPD növü istifadə olunur. Server dövri olaraq MPD-ni yeniləyir, yeni seqmentlər əlavə edir və köhnələri silir. Low-Latency DASH (LL-DASH) chunked encoding ilə 3-8 saniyə gecikməyə nail olmağa imkan verir ki, bu da LL-HLS ilə müqayisə olunandır.
DASH Common Encryption (CENC, ISO/IEC 23001-7) istifadə edir ki, bu da media məzmununu bir dəfə şifrələməyə və istənilən DRM sistemi ilə deşifrə etməyə imkan verir. MPD dəstəklənən DRM-lərin (Widevine, PlayReady, FairPlay) göstəriciləri ilə ContentProtection XML elementlərini ehtiva edir. Oynadıcı platforma əsasında uyğun DRM seçir və verilmiş URL ünvanı vasitəsilə lisenziya tələb edir.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun