Ang Dynamic Adaptive Streaming over HTTP (DASH) ay isang internasyonal na pamantayan para sa adaptive multimedia streaming transmission na binuo ng MPEG (Moving Picture Experts Group). Ang DASH ay nagbibigay ng paghahatid ng video at audio sa pamamagitan ng HTTP, gamit ang isang XML stream description sa Media Presentation Description (MPD) na format at hinahati ang content sa mga segment ng iba't ibang bitrate. Ayon sa Bitmovin Video Developer Report (2025) na pag-aaral, 58% ng mga developer ng video ay gumagamit ng DASH, na ginagawa itong pangalawang pinakasikat na protocol pagkatapos ng HLS.
Mga Pangunahing Punto
MPEG-DASH (Dynamic Adaptive Streaming over HTTP) — ay isang internasyonal na pamantayan ISO/IEC 23009-1, na inilathala noong 2012 bilang tugon sa pagkakawatak-watak ng mga proprietary na solusyon sa adaptive streaming. Hindi tulad ng HLS (proprietary protocol ng Apple) at Smooth Streaming (Microsoft), ang DASH ay binuo mula sa simula bilang isang bukas, hindi nakatali sa anumang partikular na vendor na pamantayan, na tiniyak ang malawak na suporta nito sa industriya.
Ang pangunahing inobasyon ng DASH — paghihiwalay ng paglalarawan ng stream at media content. Ang paglalarawan ng stream ay naka-imbak sa XML file na MPD (Media Presentation Description), na naglalaman ng lahat ng impormasyon tungkol sa mga available na variant: bitrate, resolution, codec, subtitle, audio track. Ang media content ay naka-imbak bilang magkakahiwalay na segment (karaniwan ay fMP4), na maaaring i-download nang nakapag-iisa sa pamamagitan ng HTTP. Ang ganitong arkitektura ay nagpapahintulot sa server infrastructure na maging maximum na simple — anumang HTTP server ay kayang mag-distribute ng DASH content.
Ang adaptivity ng DASH ay ipinapatupad sa pamamagitan ng multiplexing ng mga variant ng parehong content. Ang server ay naghahanda ng maraming Representasyon — mga kopya ng content na may iba't ibang compression parameter. Sinusuri ng client ang bandwidth ng channel at dynamic na lumilipat sa pagitan ng mga representasyon, pinipili ang optimal na ratio ng kalidad at stability ng playback. Ayon sa akademikong pananaliksik (IEEE Access, 2024), ang DASH na may BOLA algorithm ay nagpapakita ng 22% na mas kaunting bitrate switching kumpara sa HLS sa hindi matatag na koneksyon.
MPEG ay nagsimula ng trabaho sa DASH noong 2010 pagkatapos suriin ang mga umiiral na solusyon: Apple HLS, Microsoft Smooth Streaming, at Adobe HDS. Ang unang bersyon ng pamantayan (ISO/IEC 23009-1:2012) ay lumabas noong 2012. Ang ikalawang bersyon (2014) ay nagdagdag ng suporta para sa mga event, pinahusay na pagpasok ng advertisement, at Server-Controlled Adaptation. Ang ikatlong bersyon (2019) — suporta para sa HDR, 8K, tactile video, at pinahusay na integrasyon sa MMT (MPEG Media Transport) para sa 5G network.
Noong 2024, inanunsyo ng MPEG ang DASH Next Generation, na kinabibilangan ng suporta para sa neural network codec, cloud rendering, at optimization para sa Extended Reality (XR) na mga senaryo. Ang pangunahing inobasyon — Neural Network-Based Video Coding (NNVC), na gumagamit ng ML models para sa decoding sa client side, na maaaring magbawas ng bitrate ng 30-50% habang pinapanatili ang kalidad.
Ang proseso ng playback ng DASH stream ay binubuo ng apat na sunud-sunod na yugto: pagkuha ng MPD, pag-parse ng stream description, pagpili ng initial na representasyon, at dynamic na paglipat sa pagitan ng mga representasyon. Ang bawat yugto ay may kanya-kanyang specifiko na nakakaapekto sa kalidad ng karanasan ng user.
Niloload ng player ang MPD file mula sa isang kilalang URL. Ang MPD ay naglalaman ng XML structure na may paglalarawan ng buong stream: tagal ng content, time scale, mga available na panahon (Period), adaptation set (AdaptationSet), at representasyon (Representation) na may tiyak na encoding parameters. Ina-parse ng player ang MPD at lumikha ng internal na modelo ng mga available na media resources.
Halimbawa ng isang basic na MPD file para sa VOD content na may dalawang resolution:
<?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>
Pagkatapos pumili ng initial na representasyon, ang player ay nagsisimulang mag-load ng mga segment. Ang bawat segment ay naglalaman ng ilang segundo ng content (karaniwan ay 2-10 segundo). Ang player ay nagpapanatili ng buffer para sa ilang segment na nauuna, na tinitiyak ang resilience sa panandaliang pagbaba ng bilis ng network. Ang algorithm ng pagpili ng representasyon (ABR) ay patuloy na sinusubaybayan ang bilis ng pag-load ng mga segment at gumagawa ng desisyon tungkol sa paglipat sa pagitan ng mga available na bitrate.
Ang mga modernong ABR algorithm para sa DASH, tulad ng BOLA (Buffer Occupancy based Lyapunov Algorithm) at Pensieve (batay sa Reinforcement Learning), ay isinasaalang-alang hindi lamang ang kasalukuyang bandwidth, kundi pati na rin ang laki ng buffer, uri ng content (sports, balita, pelikula), at maging ang energy consumption ng device. Ang BOLA, na bahagi ng dash.js at ExoPlayer, ay nagmi-minimize ng bilang ng bitrate switching habang pinapanatili ang stable buffer, na kinumpirma ng ACM research (Spiteri et al., 2020).
Ang hierarchical structure ng DASH stream ay naka-organisa sa apat na level: MPD → Period → AdaptationSet → Representation. Ang bawat level ay nagdaragdag ng antas ng detalye, na nagpapahintulot sa paglalarawan ng mga kumplikadong senaryo — mula sa simpleng VOD hanggang sa live broadcast na may advertisement insertions at multi-angle video.
MPD — ang root element, na naglalarawan ng buong media presentation. Ang mga attribute ng MPD ay tumutukoy sa uri ng stream (static para sa VOD, dynamic para sa live), kabuuang tagal, time scale, profile, at impormasyon tungkol sa DRM. Ang MPD ay maaaring maglaman ng isa o maramihang Period, bawat isa ay kumakatawan sa isang independiyenteng time interval ng content.
Period — ang time segment ng presentation. Para sa VOD, isang Period ang ginagamit para sa buong content. Para sa live na may advertisement insertions, ang Period ay maaaring magbago nang dynamic — niloload ng player ang updated na MPD at nakakakita ng bagong Period na tumutugma sa advertisement block. Ang bawat Period ay naglalaman ng isa o maramihang AdaptationSet.
AdaptationSet — isang grupo ng mga interchangeable na representasyon ng parehong uri ng media: video, audio, subtitle. Sa loob ng AdaptationSet, lahat ng representasyon ay nagkakaiba lamang sa bitrate at/o resolution, nguni't n-eencode ng parehong content. Mahalagang property: ang player ay maaaring lumipat sa pagitan ng mga representasyon sa loob ng parehong AdaptationSet sa hangganan ng mga segment nang walang pagkaantala ng playback.
Representation — isang tiyak na variant ng encoding na may tiyak na bitrate, resolution, at codec. Para sa bawat Representasyon sa MPD, tinutukoy ang isang URL template para sa pag-load ng mga segment. Gumagamit ang DASH ng isang flexible na sistema ng pag-address ng segment — sa pamamagitan ng URL templates na may pagpapalit ng segment number at oras ($Number$, $Time$), na nagpapahintulot sa server na dynamic na bumuo ng mga filename nang hindi kailangang banggitin ang bawat segment sa MPD.
Ang mga segment ng DASH ay maaaring dalawang uri: uri ng Segment (naglalaman lamang ng media data) at uri ng Subsegment (bahagi ng segment para sa mas granular na access). Para sa encoding ng DASH content, ginagamit ang mga tool tulad ng FFmpeg o packet encoder. Halimbawa ng paggawa ng DASH stream mula sa isang input file:
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"
])
Ang pagpili sa pagitan ng DASH at HLS ay isa sa mga pangunahing desisyon sa pagdidisenyo ng video streaming system. Ang parehong protocol ay lumulutas ng parehong gawain (adaptive HTTP video delivery), nguni't may pangunahing pagkakaiba sa arkitektura, suporta ng codec, at ecosystem. Tingnan natin ang mga ito ayon sa pangunahing parameter.
| Parameter | DASH | HLS |
|---|---|---|
| Pamantayan | Internasyonal (ISO/IEC 23009-1) | Proprietary (RFC 8216, Apple) |
| Stream description | XML (MPD) | M3U8 playlist |
| Mga Codec | Kahit ano (H.264, HEVC, AV1, VP9) | Limitado (H.264, HEVC, AV1 mula 2023) |
| Format ng segment | fMP4 (pangunahin), MPEG-2 TS | MPEG-2 TS, fMP4 |
| DRM | CENC (uniform para sa lahat ng DRM) | FairPlay, Widevine (magkahiwalay) |
| iOS support | Sa pamamagitan ng third-party player | Native (AVPlayer, Safari) |
| Mga Browser | Chrome, Firefox, Edge (sa pamamagitan ng MSE) | Safari (native), iba pa sa pamamagitan ng MSE |
Pangunahing bentahe ng DASH — kalayaan mula sa mga codec. Kung ang HLS ay orihinal na naglimita ng mga codec sa mga sinusuportahan ng Apple (H.264, HEVC, at kamakailan AV1), ang DASH ay maaaring gumamit ng anumang codec na sinusuportahan ng player: VP9/VP8 (kritikal para sa YouTube at Chrome), AV1 (para sa efficiency), H.264/HEVC (para sa compatibility). Ginagawa nitong mas pinipiling pagpipilian ang DASH para sa cross-platform na serbisyo kung saan kinakailangan ang isang stream para sa lahat ng device.
Disadvantage ng DASH sa iOS — kakulangan ng native na suporta sa Safari at AVPlayer. Ang mga developer ng iOS application ay kailangang gumamit ng third-party na HLS-compatible player o library tulad ng libdash na may integrasyon sa pamamagitan ng VTDecoder. Sa praktika, nangangahulugan ito na para sa iOS-first projects, HLS ay nananatiling de facto standard, samantalang para sa Android at web platforms, DASH ay isang mas flexible at makapangyarihang solusyon.
Integrasyon ng DASH sa mobile application ay nakadepende sa platform. Sa Android, ang DASH ay direktang sinusuportahan sa pamamagitan ng ExoPlayer na may extension module. Sa iOS, kinakailangan ang paggamit ng third-party library, tulad ng libdash na may integrasyon sa pamamagitan ng AVFoundation o MPEGDASHPlayer. Tingnan natin ang praktikal na implementasyon para sa parehong platform.
ExoPlayer mula sa Google ay nagbibigay ng built-in na suporta para sa DASH sa pamamagitan ng module na `exoplayer-dash`. Ang pagkonekta ng DASH stream ay hindi naiiba sa ibang format — sapat na ipasa ang URI ng MPD file sa MediaItem. Awtomatikong tinutukoy ng ExoPlayer ang format ng content at inilulunsad ang kaukulang renderer, na sumusuporta sa lahat ng standard ABR algorithm.
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) — isa sa mga pangunahing kakayahan ng DASH, na nagpapahintulot sa paggamit ng isang media stream na may iba't ibang DRM system. Ang MPD file ay naglalaman ng XML elements na ContentProtection na may mga identifier ng DRM system (Widevine, PlayReady, FairPlay). Pinipili ng client ang angkop na DRM system batay sa platform nito at humihiling ng lisensya sa pamamagitan ng license server.
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()
Ang mobile application ay nangangailangan ng espesyal na pag-aayos ng DASH dahil sa mga limitasyon ng bandwidth at energy consumption. Ang mga pangunahing rekomendasyon ay kinabibilangan ng: pag-set ng minimum na buffer ng 2-3 segment para sa resilience sa panandaliang pagbaba ng bilis, paggamit ng segment na may tagal na 2-4 segundo para sa mas mabilis na reaksyon sa mga pagbabago ng network, at pre-loading ng susunod na segment sa paglipat ng kalidad.
Para sa pagtitipid ng trapiko sa mobile network, ang Bitmovin (2024) ay nagrerekomenda ng paggamit ng Content Steering — isang mekanismo na katulad ng analogous function ng HLS, na nagpapahintulot ng dynamic na pagdirekta ng client sa optimal na CDN node. Ang DASH Content Steering ay inilalarawan sa specification ISO/IEC 23009-1:2022 at sinusuportahan sa dash.js 4.5+ at ExoPlayer 2.18+.
Mga Madalas Itanong
DASH — isang bukas na internasyonal na pamantayan ng MPEG, hindi nakatali sa vendor. Hindi tulad ng HLS (proprietary protocol ng Apple), sinusuportahan ng DASH ang anumang codec, gumagamit ng XML stream description (MPD) sa halip na M3U8, at nagbibigay ng uniform na DRM system sa pamamagitan ng CENC. Ang HLS ay may native na suporta sa iOS, ang DASH ay mas flexible para sa cross-platform na solusyon.
Sa Android, ang pangunahing player para sa DASH ay ExoPlayer mula sa Google na may module na exoplayer-dash. Sa iOS, ginagamit ang mga third-party na solusyon tulad ng libdash na may integrasyon sa pamamagitan ng AVFoundation o commercial player (THEOplayer, Bitmovin). Sa web browser, ang DASH ay pina-play sa pamamagitan ng dash.js gamit ang MediaSource Extensions.
MPD (Media Presentation Description) — ay isang XML file na naglalarawan ng istraktura ng DASH stream: tagal ng content, mga available na bitrate, resolution, codec, format ng segment, at kanilang lokasyon. Ang MPD ay nagsisilbing entry point para sa player, na pinapalitan ang master playlist sa HLS. Kung walang MPD file, imposible ang playback ng DASH content.
Oo, sinusuportahan ng DASH ang parehong VOD at live broadcast. Para sa live broadcast, ginagamit ang dynamic na uri ng MPD na may automatic update. Pana-panahong ina-update ng server ang MPD, nagdaragdag ng mga bagong segment at nag-aalis ng mga luma. Ang Low-Latency DASH (LL-DASH) na may chunked encoding ay nagpapahintulot na makamit ang latency na 3-8 segundo, na maihahambing sa LL-HLS.
DASH ay gumagamit ng Common Encryption (CENC, ISO/IEC 23001-7), na nagpapahintulot na i-encrypt ang media content nang isang beses at i-decrypt ito ng anumang DRM system. Ang MPD ay naglalaman ng XML elements na ContentProtection na may indikasyon ng mga supported DRM (Widevine, PlayReady, FairPlay). Pinipili ng player ang angkop na DRM batay sa platform at humihiling ng lisensya sa pamamagitan ng tinukoy na URL.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din