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 Next Generation, који укључује подршку за неуронске кодеке, облачно рендеровање и оптимизацију за сценарије проширене стварности (XR). Кључна иновација — Neural Network-Based Video Coding (NNVC), који користи ML моделе за декодирање на страни клијента, што може смањити битрејт за 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 (Buffer Occupancy based Lyapunov Algorithm) и Pensieve (заснован на Reinforcement Learning-у), узимају у обзир не само тренутни пропусни опсег, већ и величину бафера, тип садржаја (спорт, вести, филм), па чак и потрошњу енергије уређаја. BOLA, који је део dash.js-а и ExoPlayer-а, минимизира број пребацивања битрејта уз одржавање стабилног бафера, што је потврђено ACM истраживањима (Spiteri et al., 2020).
Хијерархијска структура DASH тока организована је на четири нивоа: MPD → Period → AdaptationSet → Representation. Сваки ниво додаје ниво детаља, омогућавајући описивање сложених сценарија — од једноставног VOD-а до уживо преноса са рекламним уметцима и мулти-угаоним видеом.
MPD — коренски елемент који описује целу медијску презентацију. Атрибути MPD-а одређују тип тока (static за VOD, dynamic за уживо), укупно трајање, временску скалу, профил и информације о DRM-у. MPD може садржати један или више Period-а, од којих сваки представља независни временски интервал садржаја.
Period — временски сегмент презентације. За VOD се користи један Period за цео садржај. За уживо пренос са рекламним уметцима Period се може динамички мењати — плејер учитава ажурирани MPD и открива нови Period који одговара рекламном блоку. Сваки Period садржи један или више AdaptationSet-ова.
AdaptationSet — група међусобно заменљивих репрезентација истог типа медија: видео, аудио, титлови. Унутар AdaptationSet-а све репрезентације се разликују само по битрејту и/или резолуцији, али кодирају исти садржај. Важно својство: плејер може да се пребацује између репрезентација унутар истог AdaptationSet-а на граници сегмената без прекида репродукције.
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 и уживо емитовање. За уживо пренос користи се dynamic тип MPD-а са аутоматским ажурирањем. Сервер периодично ажурира MPD, додајући нове сегменте и уклањајући застареле. Low-Latency DASH (LL-DASH) са chunked encoding-ом омогућава постизање кашњења од 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. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође