Dynamic Adaptive Streaming over HTTP (DASH) — MPEG (Moving Picture Experts Group) tomonidan ishlab chiqilgan adaptiv multimedia oqimini uzatish xalqaro standartidir. DASH, XML formatidagi Media Presentation Description (MPD) yordamida oqim tavsifidan foydalanib va kontentni turli bitrate segmentlarga bo'lib, video va audio ni HTTP orqali yetkazib beradi. Bitmovin Video Developer Report (2025) tadqiqotiga ko'ra, video ishlab chiqaruvchilarning 58 foizi DASH dan foydalanadi va bu uni HLS dan keyin ikkinchi eng mashhur protokolga aylantiradi.
Asosiy ma'lumotlar
MPEG-DASH (Dynamic Adaptive Streaming over HTTP) — 2012 yilda nashr etilgan ISO/IEC 23009-1 xalqaro standarti bo'lib, xususiy adaptiv oqim yechimlarining parchalanishiga javob sifatida yaratilgan. HLS (Apple ning xususiy protokoli) va Smooth Streaming (Microsoft) dan farqli o'laroq, DASH boshidanoq ochiq, ma'lum bir sotuvchiga bog'liq bo'lmagan standart sifatida ishlab chiqilgan, bu esa uning sanoatda keng qo'llab-quvvatlanishini ta'minlagan.
DASH ning asosiy innovatsiyasi — oqim tavsifi va media kontentining ajratilishi. Oqim tavsifi MPD (Media Presentation Description) XML faylida saqlanadi va mavjud variantlar haqidagi barcha ma'lumotlarni o'z ichiga oladi: bitratelar, rezolyutsiyalar, kodeklar, subtitrlar, audio yo'llari. Media kontenti alohida segmentlar (odatda fMP4) shaklida saqlanadi va ular HTTP orqali mustaqil ravishda yuklab olinishi mumkin. Bunday arxitektura server infratuzilmasining imkon qadar sodda bo'lishiga imkon beradi — har qanday HTTP server DASH kontentini tarqatishi mumkin.
DASH ning adaptivligi bir xil kontentning variantlarini multiplekslash orqali amalga oshiriladi. Server turli siqish parametrlariga ega bir nechta Representation (tasvirlar) tayyorlaydi. Klient kanalning o'tkazish qobiliyatini tahlil qiladi va tasvirlar o'rtasida dinamik ravishda almashadi, sifat va barqarorlikning optimal nisbatini tanlaydi. Akademik tadqiqotga (IEEE Access, 2024) ko'ra, BOLA algoritmi bilan DASH beqaror ulanishda HLS bilan solishtirganda 22% kamroq bitrate almashinuvini ko'rsatadi.
MPEG DASH ustida ishni 2010 yilda mavjud yechimlarni tahlil qilgandan so'ng boshlagan: Apple HLS, Microsoft Smooth Streaming va Adobe HDS. Standartning birinchi versiyasi (ISO/IEC 23009-1:2012) 2012 yilda chiqarilgan. Ikkinchi versiya (2014) hodisalarni qo'llab-quvvatlash, takomillashtirilgan reklma qo'shish va Server tomonidan boshqariladigan adaptatsiyani qo'shgan. Uchinchi versiya (2019) — HDR, 8K, taktil video qo'llab-quvvatlash va 5G tarmoqlari uchun MMT (MPEG Media Transport) bilan takomillashtirilgan integratsiyani qo'shgan.
2024 yilda MPEG DASH Next Generation ni e'lon qildi, u neyron tarmoq kodeklarini qo'llab-quvvatlash, bulutli renderlash va Extended Reality (XR) stsenariylari uchun optimallashtirishni o'z ichiga oladi. Asosiy yangilik — Neural Network-Based Video Coding (NNVC), u mijoz tomonida dekodlash uchun ML modellaridan foydalanadi va sifatni saqlagan holda bitrateni 30-50% kamaytirishi mumkin.
DASH oqimini ijro etish jarayoni to'rt bosqichdan iborat: MPD ni olish, oqim tavsifini tahlil qilish, boshlang'ich tasvirni tanlash va tasvirlar o'rtasida dinamik almashish. Har bir bosqich foydalanuvchi tajribasi sifatiga ta'sir qiluvchi o'ziga xos xususiyatlarga ega.
Pleyer MPD faylini ma'lum URL manzilidan yuklaydi. MPD butun oqimning tavsifi bilan XML strukturasini o'z ichiga oladi: kontent davomiyligi, vaqt shkalasi, mavjud davrlar (Period), adaptatsiya to'plamlari (AdaptationSet) va kodlashning aniq parametrlari bilan tasvirlar (Representation). Pleyer MPD ni tahlil qiladi va mavjud media resurslarining ichki modelini yaratadi.
Ikki rezolyutsiyali VOD kontenti uchun asosiy MPD fayli namunasi:
<?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>
Boshlang'ich tasvirni tanlagandan so'ng, pleyer segmentlarni yuklashni boshlaydi. Har bir segment bir necha soniya kontentni o'z ichiga oladi (odatda 2-10 soniya). Pleyer bir necha segment oldinga buferni ushlab turadi, bu tarmoq tezligidagi qisqa muddatli pasayishlarga qarshi barqarorlikni ta'minlaydi. Tasvirni tanlash algoritmi (ABR) segmentlarning yuklanish tezligini doimiy ravishda kuzatib boradi va mavjud bitratelar o'rtasida almashish to'g'risida qaror qabul qiladi.
DASH uchun zamonaviy ABR algoritmlari, masalan BOLA (Buffer Occupancy based Lyapunov Algorithm) va Pensieve (Reinforcement Learning ga asoslangan), nafaqat joriy o'tkazish qobiliyatini, balki bufer hajmini, kontent turini (sport, yangiliklar, kino) va hatto qurilmaning energiya iste'molini ham hisobga oladi. dash.js va ExoPlayer tarkibiga kiruvchi BOLA, barqaror buferni saqlagan holda bitrate almashinuvlari sonini minimallashtiradi, bu ACM tadqiqotlari (Spiteri et al., 2020) tomonidan tasdiqlangan.
DASH oqimining ierarxik strukturasi to'rt darajada tashkil etilgan: MPD → Period → AdaptationSet → Representation. Har bir daraja tafsilot darajasini qo'shadi va oddiy VOD dan tortib reklma qo'shimchalari va ko'p burchakli video bilan jonli efirgacha murakkab stsenariylarni tavsiflashga imkon beradi.
MPD — butun media taqdimotini tavsiflovchi ildiz element. MPD atributlari oqim turini (VOD uchun static, jonli efir uchun dynamic), umumiy davomiylikni, vaqt shkalasini, profilni va DRM haqidagi ma'lumotlarni aniqlaydi. MPD bir yoki bir nechta Period ni o'z ichiga olishi mumkin, ularning har biri kontentning mustaqil vaqt oralig'ini ifodalaydi.
Period — taqdimotning vaqt segmenti. VOD uchun butun kontent uchun bitta Period ishlatiladi. Reklma qo'shimchalari bilan jonli efir uchun Period dinamik ravishda o'zgarishi mumkin — pleyer yangilangan MPD ni yuklaydi va reklma blokiga mos keladigan yangi Period ni aniqlaydi. Har bir Period bir yoki bir nechta AdaptationSet ni o'z ichiga oladi.
AdaptationSet — bir media turining (video, audio, subtitr) o'zaro almashinadigan tasvirlar guruhi. AdaptationSet ichida barcha tasvirlar faqat bitrate va/yoki rezolyutsiya bilan farqlanadi, lekin bir xil kontentni kodlaydi. Muhim xususiyat: pleyer bir AdaptationSet ichidagi tasvirlar o'rtasida segmentlar chegarasida uzilishlarsiz almasha oladi.
Representation — aniq bitrate, rezolyutsiya va kodek bilan kodlashning muayyan varianti. Har bir tasvir uchun MPD da segmentlarni yuklash uchun URL shabloni ko'rsatilgan. DASH moslashuvchan manzillash tizimidan foydalanadi — segment raqami va vaqtini ($Number$, $Time$) almashtirish bilan URL shablonlari orqali, bu serverga har bir segmentni MPD da sanab o'tmasdan fayl nomlarini dinamik yaratishga imkon beradi.
Segmentlar ikki turda bo'lishi mumkin: Segment turi (faqat media ma'lumotlari) va Subsegment turi (aniqroq kirish uchun segment qismi). DASH kontentini kodlash uchun FFmpeg yoki paket kodlovchilari kabi vositalar ishlatiladi. Kirish faylidan DASH oqimini yaratish namunasi:
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 va HLS o'rtasidagi tanlov video oqim tizimini loyihalashda asosiy qarorlardan biridir. Ikkala protokol ham bir xil vazifani (adaptiv HTTP video yetkazish) hal qiladi, lekin arxitektura, kodek qo'llab-quvvatlash va ekotizimda tub farqlarga ega. Keling, ularni asosiy parametrlar bo'yicha ko'rib chiqaylik.
| Parametr | DASH | HLS |
|---|---|---|
| Standart | Xalqaro (ISO/IEC 23009-1) | Xususiy (RFC 8216, Apple) |
| Oqim tavsifi | XML (MPD) | M3U8 pleylist |
| Kodeklar | Istalgan (H.264, HEVC, AV1, VP9) | Cheklangan (H.264, HEVC, AV1 2023 dan) |
| Segment formati | fMP4 (asosiy), MPEG-2 TS | MPEG-2 TS, fMP4 |
| DRM | CENC (barcha DRM uchun yagona) | FairPlay, Widevine (alohida) |
| iOS qo'llab-quvvatlash | Uchinchi tomon pleyerlari orqali | Mahalliy (AVPlayer, Safari) |
| Brauzerlar | Chrome, Firefox, Edge (MSE orqali) | Safari (mahalliy), qolganlari MSE orqali |
DASH ning asosiy afzalligi — kodeklardan mustaqillik. Agar HLS dastlab kodeklarni Apple qo'llab-quvvatlaganlar bilan cheklagan bo'lsa (H.264, HEVC va yaqinda AV1), DASH pleyer tomonidan qo'llab-quvvatlanadigan istalgan kodekdan foydalanishi mumkin: VP9/VP8 (YouTube va Chrome uchun muhim), AV1 (samaradorlik uchun), H.264/HEVC (moslik uchun). Bu DASH ni barcha qurilmalar uchun yagona oqim talab qiladigan ko'p platformali xizmatlar uchun afzal tanlovga aylantiradi.
DASH ning iOS da kamchiligi — Safari va AVPlayer da mahalliy qo'llab-quvvatlashning yo'qligi. iOS ilova ishlab chiqaruvchilari HLS ga mos uchinchi tomon pleyerlaridan yoki VTDecoder orqali integratsiya bilan libdash kabi kutubxonalardan foydalanishlari kerak. Amalda bu iOS ga yo'naltirilgan loyihalar uchun HLS de-fakto standart bo'lib qolishini anglatadi, Android va veb platformalar uchun esa DASH yanada moslashuvchan va kuchli yechimdir.
DASH ning integratsiyasi mobil ilovalarda platformaga bog'liq. Android da DASH to'g'ridan-to'g'ri ExoPlayer kengaytma moduli orqali qo'llab-quvvatlanadi. iOS da AVFoundation yoki MPEGDASHPlayer orqali integratsiya bilan libdash kabi uchinchi tomon kutubxonalaridan foydalanish talab qilinadi. Ikkala platforma uchun amaliy tatbiqni ko'rib chiqaylik.
Google dan ExoPlayer `exoplayer-dash` moduli orqali DASH ning o'rnatilgan qo'llab-quvvatlashini ta'minlaydi. DASH oqimini ulash boshqa formatlardan farq qilmaydi — MediaItem ga MPD faylining URI ni uzatish kifoya. ExoPlayer avtomatik ravishda kontent formatini aniqlaydi va tegishli rendererni ishga tushiradi, barcha standart ABR algoritmlarini qo'llab-quvvatlaydi.
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 ning asosiy imkoniyatlaridan biri bo'lib, turli DRM tizimlari bilan bitta media oqimidan foydalanishga imkon beradi. MPD fayli DRM tizimlarining identifikatorlari (Widevine, PlayReady, FairPlay) bilan ContentProtection XML elementlarini o'z ichiga oladi. Klient o'z platformasiga qarab tegishli DRM tizimini tanlaydi va litsenziya serveri orqali litsenziya so'raydi.
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 ilovalar o'tkazish qobiliyati va energiya iste'molining cheklovlari tufayli DASH ni maxsus sozlashni talab qiladi. Asosiy tavsiyalar: qisqa muddatli tezlik pasayishlariga barqarorlik uchun minimal 2-3 segment buferini o'rnatish, tarmoq o'zgarishlariga tezroq reaksiya uchun 2-4 soniya davomiylikdagi segmentlardan foydalanish va sifat almashinuvi vaqtida keyingi segmentni oldindan yuklash.
Mobil tarmoqlarda trafikni tejash uchun Bitmovin (2024) Content Steering — mijozni optimal CDN tuguniga dinamik yo'naltirishga imkon beruvchi, HLS ning analog funktsiyasiga o'xshash mexanizmdan foydalanishni tavsiya qiladi. DASH Content Steering ISO/IEC 23009-1:2022 spetsifikatsiyasida tasvirlangan va dash.js 4.5+ va ExoPlayer 2.18+ tomonidan qo'llab-quvvatlanadi.
Tez-tez beriladigan savollar
DASH — sotuvchiga bog'liq bo'lmagan ochiq xalqaro MPEG standarti. HLS (Apple ning xususiy protokoli) dan farqli o'laroq, DASH istalgan kodeklarni qo'llab-quvvatlaydi, M3U8 o'rniga XML oqim tavsifidan (MPD) foydalanadi va CENC orqali yagona DRM tizimini ta'minlaydi. HLS iOS da mahalliy qo'llab-quvvatlashga ega, DASH ko'p platformali yechimlar uchun yanada moslashuvchan.
Android da DASH uchun asosiy pleyer Google ning ExoPlayer i exoplayer-dash moduli bilan. iOS da AVFoundation orqali integratsiya bilan libdash yoki tijorat pleyerlari (THEOplayer, Bitmovin) kabi uchinchi tomon yechimlari ishlatiladi. Veb brauzerlarda DASH dash.js orqali MediaSource Extensions yordamida ijro etiladi.
MPD (Media Presentation Description) — DASH oqimining strukturasini tavsiflovchi XML fayli: kontent davomiyligi, mavjud bitratelar, rezolyutsiyalar, kodeklar, segment formatlari va ularning joylashuvi. MPD pleyer uchun kirish nuqtasi bo'lib xizmat qiladi, HLS dagi master-pleylistni almashtiradi. MPD faylisiz DASH kontentini ijro etish mumkin emas.
Ha, DASH ham VOD, ham jonli efirni qo'llab-quvvatlaydi. Jonli efir uchun avtomatik yangilanish bilan dynamic MPD turi ishlatiladi. Server davriy ravishda MPD ni yangilab, yangi segmentlarni qo'shadi va eskirganlarini olib tashlaydi. Low-Latency DASH (LL-DASH) chunked encoding bilan 3-8 soniya kechikishga erishishga imkon beradi, bu LL-HLS bilan solishtirish mumkin.
DASH Common Encryption (CENC, ISO/IEC 23001-7) dan foydalanadi, bu media kontentini bir marta shifrlash va istalgan DRM tizimi bilan deshifrlash imkonini beradi. MPD qo'llab-quvvatlanadigan DRM larning (Widevine, PlayReady, FairPlay) ko'rsatkichlari bilan ContentProtection XML elementlarini o'z ichiga oladi. Pleyer platformaga qarab tegishli DRM ni tanlaydi va berilgan URL orqali litsenziya so'raydi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.