Dynamic Adaptive Streaming over HTTP (DASH), MPEG (Moving Picture Experts Group) tarafından geliştirilen, multimedyanın uyarlamalı akışı için uluslararası bir standarttır. DASH, Media Presentation Description (MPD) formatında XML akış tanımı kullanarak HTTP üzerinden video ve ses sağlar ve içeriği farklı bit hızlarında segmentlere ayırır. Bitmovin Video Developer Report (2025)'e göre, video geliştiricilerinin %58'i DASH kullanmakta ve bu da onu HLS'den sonra en popüler ikinci protokol yapmaktadır.
Önemli Noktalar
MPEG-DASH (Dynamic Adaptive Streaming over HTTP), 2012'de tescilli uyarlamalı akış çözümlerinin parçalanmasına yanıt olarak yayınlanan uluslararası bir standarttır (ISO/IEC 23009-1). HLS (Apple'ın tescilli protokolü) ve Smooth Streaming'in (Microsoft) aksine, DASH en başından beri açık, satıcıdan bağımsız bir standart olarak geliştirilmiş ve bu da endüstride geniş destek görmesini sağlamıştır.
DASH'ın temel yeniliği, akış tanımı ve medya içeriğinin ayrılmasıdır. Akış tanımı, MPD (Media Presentation Description) adı verilen bir XML dosyasında saklanır ve mevcut seçenekler (bit hızları, çözünürlükler, kodekler, altyazılar, ses parçaları) hakkında tüm bilgileri içerir. Medya içeriği, HTTP üzerinden bağımsız olarak yüklenebilen ayrı segmentlerde (genellikle fMP4) saklanır. Bu mimari, sunucu altyapısının mümkün olduğunca basit olmasını sağlar — herhangi bir HTTP sunucusu DASH içeriği sunabilir.
DASH'da uyarlanabilirlik, içerik varyantlarının çoğullanması yoluyla uygulanır. Sunucu, farklı sıkıştırma parametrelerine sahip içerik kopyaları olan birden çok Representation hazırlar. İstemci, kanal bant genişliğini analiz eder ve kalite ve oynatma kararlılığının optimal dengesini seçerek temsiller arasında dinamik olarak geçiş yapar. Akademik bir araştırmaya (IEEE Access, 2024) göre, BOLA algoritmasına sahip DASH, kararsız bağlantılarda HLS'ye kıyasla %22 daha az bit hızı değişikliği gösterir.
MPEG, 2010 yılında mevcut çözümleri (Apple HLS, Microsoft Smooth Streaming ve Adobe HDS) analiz ettikten sonra DASH üzerinde çalışmaya başladı. Standardın ilk versiyonu (ISO/IEC 23009-1:2012) 2012'de yayınlandı. İkinci versiyon (2014), etkinlik desteği, geliştirilmiş reklam ekleme ve sunucu kontrollü uyarlama ekledi. Üçüncü versiyon (2019), HDR, 8K, dokunsal video desteği ve 5G ağları için MMT (MPEG Media Transport) ile geliştirilmiş entegrasyon ekledi.
2024'te MPEG, sinir ağı kodekleri, bulut işleme ve Genişletilmiş Gerçeklik (XR) senaryoları için optimizasyon desteği içeren DASH Next Generation'ı duyurdu. Önemli bir yenilik, istemci tarafı kod çözme için ML modelleri kullanan ve kaliteyi korurken bit hızını potansiyel olarak %30-50 oranında azaltabilen Sinir Ağı Tabanlı Video Kodlamadır (NNVC).
DASH akışı oynatma süreci dört ardışık aşamadan oluşur: MPD'yi alma, akış tanımını ayrıştırma, başlangıç temsilini seçme ve temsiller arasında dinamik geçiş. Her aşamanın, kullanıcı deneyiminin kalitesini etkileyen kendine özgü özellikleri vardır.
Oynatıcı, bilinen bir URL'den MPD dosyasını yükler. MPD, tüm akışı tanımlayan bir XML yapısı içerir: içerik süresi, zaman çizelgesi, mevcut dönemler (Period), uyarlama kümeleri (AdaptationSet) ve belirli kodlama parametrelerine sahip temsiller (Representation). Oynatıcı, MPD'yi ayrıştırır ve mevcut medya kaynaklarının dahili bir modelini oluşturur.
İki çözünürlüklü VOD içeriği için temel bir MPD dosyası örneği:
<?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>
Başlangıç temsilini seçtikten sonra oynatıcı segmentleri yüklemeye başlar. Her segment birkaç saniyelik içerik (genellikle 2-10 saniye) içerir. Oynatıcı, birkaç segment ileride bir arabellek tutar ve ağ hızındaki kısa süreli düşüşlere karşı dayanıklılık sağlar. ABR (Uyarlamalı Bit Hızı) algoritması, segment indirme hızını sürekli izler ve mevcut bit hızları arasında geçiş yapmaya karar verir.
DASH için modern ABR algoritmaları, örneğin BOLA (Buffer Occupancy based Lyapunov Algorithm) ve Pensieve (Pekiştirmeli Öğrenme tabanlı), yalnızca mevcut bant genişliğini değil, aynı zamanda arabellek boyutunu, içerik türünü (spor, haber, film) ve hatta cihazın güç tüketimini de dikkate alır. dash.js ve ExoPlayer'ın bir parçası olan BOLA, ACM araştırması (Spiteri et al., 2020) tarafından onaylandığı üzere, kararlı bir arabellek korurken bit hızı değişikliklerinin sayısını en aza indirir.
Bir DASH akışının hiyerarşik yapısı dört seviyede düzenlenmiştir: MPD → Period → AdaptationSet → Representation. Her seviye, basit VOD'dan reklam eklemeli ve çok açılı videolu canlı yayınlara kadar karmaşık senaryoları tanımlamaya olanak tanıyan bir ayrıntı katmanı ekler.
MPD, tüm medya sunumunu tanımlayan kök öğedir. MPD öznitelikleri, akış türünü (VOD için static, canlı için dynamic), toplam süreyi, zaman çizelgesini, profili ve DRM bilgilerini tanımlar. MPD, her biri içeriğin bağımsız bir zaman segmentini temsil eden bir veya daha fazla Period içerebilir.
Period, sunumun bir zaman segmentidir. VOD için, tüm içerik için tek bir Period kullanılır. Reklam aralıklı canlı yayın için, Period dinamik olarak değişebilir — oynatıcı güncellenmiş MPD'yi yükler ve reklam bloğuna karşılık gelen yeni bir Period algılar. Her Period, bir veya daha fazla AdaptationSet içerir.
AdaptationSet, bir medya türünün (video, ses, altyazı) değiştirilebilir temsillerinden oluşan bir gruptur. Bir AdaptationSet içinde, tüm temsiller yalnızca bit hızı ve/veya çözünürlük bakımından farklılık gösterir ancak aynı içeriği kodlar. Önemli bir özellik: oynatıcı, oynatmayı kesintisiz olarak aynı AdaptationSet içindeki temsiller arasında segment sınırlarında geçiş yapabilir.
Representation, belirli bir bit hızı, çözünürlük ve kodek ile belirli bir kodlama varyantıdır. Her Representation için MPD, segmentleri yüklemek için bir URL şablonu belirtir. DASH, esnek bir segment adresleme sistemi kullanır — segment numarası ve zaman ikamesi ($Number$, $Time$) ile URL şablonları aracılığıyla, sunucunun MPD'de her segmenti listelemesine gerek kalmadan dinamik olarak dosya adları oluşturmasına olanak tanır.
DASH'daki segmentler iki tipte olabilir: Segment tipi (yalnızca medya verileri içerir) ve Subsegment tipi (daha ayrıntılı erişim için bir segmentin parçası). DASH içeriğini kodlamak için FFmpeg veya toplu kodlayıcılar gibi araçlar kullanılır. Bir giriş dosyasından DASH akışı oluşturma örneği:
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 ve HLS arasındaki seçim, bir video akış sistemi tasarlarken önemli kararlardan biridir. Her iki protokol de aynı sorunu (HTTP üzerinden uyarlamalı video dağıtımı) çözer ancak mimari, kodek desteği ve ekosistem açısından temel farklılıklara sahiptir. Bunları temel parametrelere göre inceleyelim.
| Parametre | DASH | HLS |
|---|---|---|
| Standart | Uluslararası (ISO/IEC 23009-1) | Tescilli (RFC 8216, Apple) |
| Akış tanımı | XML (MPD) | M3U8 oynatma listesi |
| Kodekler | Herhangi (H.264, HEVC, AV1, VP9) | Sınırlı (H.264, HEVC, 2023'ten itibaren AV1) |
| Segment formatı | fMP4 (birincil), MPEG-2 TS | MPEG-2 TS, fMP4 |
| DRM | CENC (tüm DRM'ler için birleşik) | FairPlay, Widevine (ayrı) |
| iOS desteği | Üçüncü taraf oynatıcılar aracılığıyla | Yerel (AVPlayer, Safari) |
| Tarayıcılar | Chrome, Firefox, Edge (MSE aracılığıyla) | Safari (yerel), diğerleri MSE aracılığıyla |
Ana avantaj DASH'ın — kodek bağımsızlığı. HLS başlangıçta kodekleri Apple tarafından desteklenenlerle (H.264, HEVC ve son zamanlarda AV1) sınırlarken, DASH oynatıcı tarafından desteklenen herhangi bir kodeği kullanabilir: VP9/VP8 (YouTube ve Chrome için kritik), AV1 (verimlilik için), H.264/HEVC (uyumluluk için). Bu, DASH'ı tüm cihazlar için birleşik bir akış gerektiren platformlar arası hizmetler için tercih edilen seçenek haline getirir.
Dezavantajı iOS'ta DASH'ın — Safari ve AVPlayer'da yerel destek eksikliği. iOS geliştiricileri, VTDecoder aracılığıyla entegrasyonlu üçüncü taraf HLS uyumlu oynatıcılar veya libdash gibi kitaplıklar kullanmalıdır. Pratikte bu, iOS öncelikli projeler için HLS'nin fiili standart olarak kaldığı, Android ve web platformları için ise DASH'ın daha esnek ve güçlü bir çözüm olduğu anlamına gelir.
DASH'ın mobil uygulamalara entegrasyonu platforma bağlıdır. Android'de DASH, genişletme modülüyle ExoPlayer aracılığıyla doğrudan desteklenir. iOS'ta, AVFoundation veya MPEGDASHPlayer aracılığıyla entegrasyonlu libdash gibi üçüncü taraf kitaplıklar gerekir. Her iki platform için pratik uygulamayı inceleyelim.
Google'ın ExoPlayer'ı, `exoplayer-dash` modülü aracılığıyla DASH için yerleşik destek sağlar. Bir DASH akışını bağlamak diğer formatlardan farklı değildir — sadece MPD dosyasının URI'sini bir MediaItem'a iletin. ExoPlayer otomatik olarak içerik formatını algılar ve uygun işleyiciyi başlatarak tüm standart ABR algoritmalarını destekler.
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 temel özelliklerinden biridir ve tek bir medya akışının farklı DRM sistemleriyle kullanılmasına olanak tanır. MPD dosyası, DRM sistemi tanımlayıcıları (Widevine, PlayReady, FairPlay) içeren ContentProtection XML öğeleri içerir. İstemci, platformuna göre uygun DRM sistemini seçer ve lisans sunucusundan bir lisans talep eder.
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 uygulamalar, bant genişliği ve güç tüketimi sınırlamaları nedeniyle özel DASH yapılandırması gerektirir. Temel öneriler şunları içerir: kısa süreli hız düşüşlerine karşı dayanıklılık için minimum 2-3 segmentlik arabellek ayarlama, ağ değişikliklerine daha hızlı yanıt için 2-4 saniyelik segmentler kullanma ve kalite değiştirirken sonraki segmenti önceden yükleme.
Mobil ağlarda trafikten tasarruf etmek için Bitmovin (2024), istemciyi dinamik olarak optimum CDN düğümüne yönlendirmeye olanak tanıyan, HLS'nin benzer işlevine benzer bir mekanizma olan Content Steering kullanımını önerir. DASH Content Steering, ISO/IEC 23009-1:2022 spesifikasyonunda açıklanmıştır ve dash.js 4.5+ ve ExoPlayer 2.18+'da desteklenmektedir.
Sıkça sorulan sorular
DASH, herhangi bir satıcıya bağlı olmayan açık bir uluslararası MPEG standardıdır. HLS'den (Apple'ın tescilli protokolü) farklı olarak DASH, herhangi bir kodeği destekler, M3U8 yerine XML akış tanımı (MPD) kullanır ve CENC aracılığıyla birleşik bir DRM sistemi sağlar. HLS, iOS'ta yerel desteğe sahipken, DASH platformlar arası çözümler için daha esnektir.
Android'de DASH için birincil oynatıcı, exoplayer-dash modüllü Google ExoPlayer'dır. iOS'ta, AVFoundation aracılığıyla entegrasyonlu libdash veya ticari oynatıcılar (THEOplayer, Bitmovin) gibi üçüncü taraf çözümler kullanılır. Web tarayıcılarında DASH, MediaSource Extensions kullanılarak dash.js aracılığıyla oynatılır.
MPD (Media Presentation Description), DASH akış yapısını (içerik süresi, mevcut bit hızları, çözünürlükler, kodekler, segment formatları ve konumları) tanımlayan bir XML dosyasıdır. MPD, oynatıcı için giriş noktası görevi görerek HLS'deki ana oynatma listesinin yerini alır. MPD dosyası olmadan DASH içerik oynatımı mümkün değildir.
Evet, DASH hem VOD'u hem de canlı yayını destekler. Canlı için, otomatik güncellemeli dynamic MPD türü kullanılır. Sunucu periyodik olarak MPD'yi günceller, yeni segmentler ekler ve eskilerini kaldırır. Parçalı kodlamalı Low-Latency DASH (LL-DASH), LL-HLS ile karşılaştırılabilir 3-8 saniyelik bir gecikme elde eder.
DASH, medya içeriğinin bir kez şifrelenmesine ve herhangi bir DRM sistemi tarafından çözülmesine olanak tanıyan Common Encryption (CENC, ISO/IEC 23001-7) kullanır. MPD, desteklenen DRM'leri (Widevine, PlayReady, FairPlay) belirten ContentProtection XML öğeleri içerir. Oynatıcı, platforma göre uygun DRM'yi seçer ve belirtilen URL aracılığıyla bir lisans talep eder.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun