Dynamic Adaptive Streaming over HTTP (DASH) adalah standar internasional untuk transmisi multimedia streaming adaptif yang dikembangkan oleh MPEG (Moving Picture Experts Group). DASH menyediakan pengiriman video dan audio melalui HTTP, menggunakan deskripsi streaming dalam format XML yang disebut Media Presentation Description (MPD) dan membagi konten menjadi segmen-segmen dengan bitrate yang berbeda. Menurut survei Bitmovin Video Developer Report (2025), 58% pengembang video menggunakan DASH, menjadikannya protokol paling populer kedua setelah HLS.
Poin Utama
MPEG-DASH (Dynamic Adaptive Streaming over HTTP) — adalah standar internasional ISO/IEC 23009-1, yang diterbitkan pada tahun 2012 sebagai respons terhadap fragmentasi solusi streaming adaptif proprietary. Tidak seperti HLS (protokol proprietary Apple) dan Smooth Streaming (Microsoft), DASH sejak awal dikembangkan sebagai standar terbuka yang tidak terikat pada vendor tertentu, memastikan dukungan luas di industri.
Inovasi utama DASH — pemisahan deskripsi aliran dan konten media. Deskripsi aliran disimpan dalam file XML MPD (Media Presentation Description), yang berisi semua informasi tentang varian yang tersedia: bitrate, resolusi, codec, subtitle, trek audio. Konten media disimpan dalam segmen terpisah (biasanya fMP4), yang dapat diunduh secara independen melalui HTTP. Arsitektur semacam itu memungkinkan infrastruktur server menjadi sesederhana mungkin — server HTTP mana pun dapat mendistribusikan konten DASH.
Adaptivitas DASH diimplementasikan melalui multipleksing varian dari konten yang sama. Server menyiapkan beberapa Representasi — salinan konten dengan parameter kompresi yang berbeda. Klien menganalisis bandwidth saluran dan secara dinamis beralih di antara representasi, memilih rasio optimal antara kualitas dan stabilitas pemutaran. Menurut penelitian akademis (IEEE Access, 2024), DASH dengan algoritma BOLA menunjukkan 22% lebih sedikit peralihan bitrate dibandingkan dengan HLS pada koneksi yang tidak stabil.
MPEG memulai pekerjaan pada DASH pada tahun 2010 setelah menganalisis solusi yang ada: Apple HLS, Microsoft Smooth Streaming, dan Adobe HDS. Versi pertama standar (ISO/IEC 23009-1:2012) dirilis pada tahun 2012. Versi kedua (2014) menambahkan dukungan untuk event, penyisipan iklan yang ditingkatkan, dan Adaptasi yang Dikendalikan Server. Versi ketiga (2019) — dukungan untuk HDR, 8K, video taktil, dan integrasi yang lebih baik dengan MMT (MPEG Media Transport) untuk jaringan 5G.
Pada tahun 2024, MPEG mengumumkan DASH Next Generation, yang mencakup dukungan untuk codec neural network, rendering cloud, dan optimalisasi untuk skenario Extended Reality (XR). Inovasi utama — Neural Network-Based Video Coding (NNVC), yang menggunakan model ML untuk decoding di sisi klien, yang dapat mengurangi bitrate sebesar 30-50% sambil mempertahankan kualitas.
Proses pemutaran aliran DASH terdiri dari empat tahap berurutan: mendapatkan MPD, mengurai deskripsi aliran, memilih representasi awal, dan peralihan dinamis antar representasi. Setiap tahap memiliki kekhasan tersendiri yang memengaruhi kualitas pengalaman pengguna.
Pemutar memuat file MPD dari URL yang diketahui. MPD berisi struktur XML dengan deskripsi seluruh aliran: durasi konten, skala waktu, periode yang tersedia (Period), set adaptasi (AdaptationSet), dan representasi (Representation) dengan parameter pengkodean tertentu. Pemutar mengurai MPD dan membuat model internal dari sumber daya media yang tersedia.
Contoh file MPD dasar untuk konten VOD dengan dua resolusi:
<?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>
Setelah memilih representasi awal, pemutar mulai memuat segmen. Setiap segmen berisi beberapa detik konten (biasanya 2-10 detik). Pemutar mempertahankan buffer untuk beberapa segmen ke depan, memastikan ketahanan terhadap penurunan kecepatan jaringan jangka pendek. Algoritma pemilihan representasi (ABR) terus memantau kecepatan pemuatan segmen dan membuat keputusan tentang peralihan antara bitrate yang tersedia.
Algoritma ABR modern untuk DASH, seperti BOLA (Buffer Occupancy based Lyapunov Algorithm) dan Pensieve (berbasis Reinforcement Learning), tidak hanya mempertimbangkan bandwidth saat ini, tetapi juga ukuran buffer, jenis konten (olahraga, berita, film), dan bahkan konsumsi daya perangkat. BOLA, yang merupakan bagian dari dash.js dan ExoPlayer, meminimalkan jumlah peralihan bitrate sambil mempertahankan buffer yang stabil, sebagaimana dikonfirmasi oleh penelitian ACM (Spiteri et al., 2020).
Struktur hierarkis aliran DASH diatur dalam empat tingkat: MPD → Period → AdaptationSet → Representation. Setiap tingkat menambahkan tingkat detail, memungkinkan deskripsi skenario yang kompleks — dari VOD sederhana hingga siaran langsung dengan sisipan iklan dan video multi-sudut.
MPD — elemen root, yang menggambarkan seluruh presentasi media. Atribut MPD menentukan jenis aliran (static untuk VOD, dynamic untuk langsung), durasi total, skala waktu, profil, dan informasi tentang DRM. MPD dapat berisi satu atau beberapa Period, yang masing-masing mewakili interval waktu konten yang independen.
Period — segmen waktu dari presentasi. Untuk VOD, satu Period digunakan untuk seluruh konten. Untuk siaran langsung dengan sisipan iklan, Period dapat berubah secara dinamis — pemuat memuat MPD yang diperbarui dan mendeteksi Period baru yang sesuai dengan blok iklan. Setiap Period berisi satu atau beberapa AdaptationSet.
AdaptationSet — sekelompok representasi yang saling dipertukarkan dari jenis media yang sama: video, audio, subtitle. Di dalam AdaptationSet, semua representasi hanya berbeda dalam bitrate dan/atau resolusi, tetapi mengkodekan konten yang sama. Properti penting: pemutar dapat beralih di antara representasi dalam AdaptationSet yang sama pada batas segmen tanpa mengganggu pemutaran.
Representation — varian pengkodean tertentu dengan bitrate, resolusi, dan codec yang ditentukan. Untuk setiap Representasi, MPD menentukan template URL untuk memuat segmen. DASH menggunakan sistem pengalamatan segmen yang fleksibel — melalui template URL dengan substitusi nomor segmen dan waktu ($Number$, $Time$), yang memungkinkan server menghasilkan nama file secara dinamis tanpa perlu menyebutkan setiap segmen di MPD.
Segmen DASH dapat terdiri dari dua jenis: tipe Segment (hanya berisi data media) dan tipe Subsegment (bagian dari segmen untuk akses yang lebih granular). Untuk mengkodekan konten DASH, digunakan alat seperti FFmpeg atau encoder paket. Contoh pembuatan aliran DASH dari file input:
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"
])
Pilihan antara DASH dan HLS adalah salah satu keputusan utama saat merancang sistem streaming video. Kedua protokol memecahkan tugas yang sama (pengiriman video adaptif melalui HTTP), tetapi memiliki perbedaan mendasar dalam arsitektur, dukungan codec, dan ekosistem. Mari kita lihat berdasarkan parameter utama.
| Parameter | DASH | HLS |
|---|---|---|
| Standar | Internasional (ISO/IEC 23009-1) | Proprietary (RFC 8216, Apple) |
| Deskripsi aliran | XML (MPD) | Playlist M3U8 |
| Codec | Semua (H.264, HEVC, AV1, VP9) | Terbatas (H.264, HEVC, AV1 sejak 2023) |
| Format segmen | fMP4 (utama), MPEG-2 TS | MPEG-2 TS, fMP4 |
| DRM | CENC (seragam untuk semua DRM) | FairPlay, Widevine (terpisah) |
| Dukungan iOS | Melalui pemutar pihak ketiga | Native (AVPlayer, Safari) |
| Browser | Chrome, Firefox, Edge (melalui MSE) | Safari (native), lainnya melalui MSE |
Keunggulan utama DASH — independensi dari codec. Jika HLS awalnya membatasi codec pada yang didukung Apple (H.264, HEVC, dan baru-baru ini AV1), DASH dapat menggunakan codec apa pun yang didukung pemutar: VP9/VP8 (penting untuk YouTube dan Chrome), AV1 (untuk efisiensi), H.264/HEVC (untuk kompatibilitas). Ini menjadikan DASH pilihan utama untuk layanan lintas platform di mana aliran tunggal diperlukan untuk semua perangkat.
Kekurangan DASH di iOS — kurangnya dukungan native di Safari dan AVPlayer. Pengembang aplikasi iOS perlu menggunakan pemutar pihak ketiga yang kompatibel dengan HLS atau pustaka seperti libdash dengan integrasi melalui VTDecoder. Dalam praktiknya, ini berarti bahwa untuk proyek yang berfokus pada iOS, HLS tetap menjadi standar de facto, sementara untuk Android dan platform web, DASH adalah solusi yang lebih fleksibel dan kuat.
Integrasi DASH dalam aplikasi mobile tergantung pada platform. Di Android, DASH didukung langsung melalui ExoPlayer dengan modul ekstensi. Di iOS, diperlukan penggunaan pustaka pihak ketiga, seperti libdash dengan integrasi melalui AVFoundation atau MPEGDASHPlayer. Mari kita lihat implementasi praktis untuk kedua platform.
ExoPlayer dari Google menyediakan dukungan bawaan untuk DASH melalui modul `exoplayer-dash`. Menghubungkan aliran DASH tidak berbeda dari format lainnya — cukup berikan URI file MPD ke MediaItem. ExoPlayer secara otomatis menentukan format konten dan memulai renderer yang sesuai, mendukung semua algoritma ABR standar.
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) — salah satu kemampuan utama DASH, memungkinkan penggunaan satu aliran media dengan sistem DRM yang berbeda. File MPD berisi elemen XML ContentProtection dengan pengidentifikasi sistem DRM (Widevine, PlayReady, FairPlay). Klien memilih sistem DRM yang sesuai berdasarkan platformnya dan meminta lisensi melalui server lisensi.
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()
Aplikasi mobile memerlukan penyesuaian khusus DASH karena keterbatasan bandwidth dan konsumsi daya. Rekomendasi utama meliputi: pengaturan buffer minimum 2-3 segmen untuk ketahanan terhadap penurunan kecepatan jangka pendek, penggunaan segmen dengan durasi 2-4 detik untuk respons yang lebih cepat terhadap perubahan jaringan, dan pramuat segmen berikutnya saat beralih kualitas.
Untuk menghemat lalu lintas di jaringan seluler, Bitmovin (2024) merekomendasikan penggunaan Content Steering — mekanisme yang mirip dengan fungsi analog HLS, yang memungkinkan pengarahan klien secara dinamis ke node CDN yang optimal. DASH Content Steering dijelaskan dalam spesifikasi ISO/IEC 23009-1:2022 dan didukung di dash.js 4.5+ dan ExoPlayer 2.18+.
Pertanyaan yang Sering Diajukan
DASH — standar MPEG internasional terbuka, tidak terikat pada vendor. Tidak seperti HLS (protokol proprietary Apple), DASH mendukung codec apa pun, menggunakan deskripsi aliran XML (MPD) sebagai pengganti M3U8, dan menyediakan sistem DRM terpadu melalui CENC. HLS memiliki dukungan native di iOS, DASH lebih fleksibel untuk solusi lintas platform.
Di Android, pemutar utama untuk DASH adalah ExoPlayer dari Google dengan modul exoplayer-dash. Di iOS, digunakan solusi pihak ketiga seperti libdash dengan integrasi melalui AVFoundation atau pemutar komersial (THEOplayer, Bitmovin). Di browser web, DASH diputar melalui dash.js menggunakan MediaSource Extensions.
MPD (Media Presentation Description) — adalah file XML yang mendeskripsikan struktur aliran DASH: durasi konten, bitrate yang tersedia, resolusi, codec, format segmen, dan lokasinya. MPD berfungsi sebagai titik masuk untuk pemutar, menggantikan master playlist di HLS. Tanpa file MPD, pemutaran konten DASH tidak mungkin dilakukan.
Ya, DASH mendukung VOD dan siaran langsung. Untuk siaran langsung, digunakan tipe MPD dynamic dengan pembaruan otomatis. Server secara berkala memperbarui MPD, menambahkan segmen baru dan menghapus yang sudah usang. Low-Latency DASH (LL-DASH) dengan chunked encoding memungkinkan mencapai latensi 3-8 detik, sebanding dengan LL-HLS.
DASH menggunakan Common Encryption (CENC, ISO/IEC 23001-7), yang memungkinkan enkripsi konten media sekali dan didekripsi oleh sistem DRM mana pun. MPD berisi elemen XML ContentProtection dengan indikasi DRM yang didukung (Widevine, PlayReady, FairPlay). Pemutar memilih DRM yang sesuai berdasarkan platform dan meminta lisensi melalui URL yang ditentukan.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga