DASH — nedir, protokol ve dinamik akışın çalışma prensibi

Yazar: IT Sectr Yayınlanma: 2026-05-23 Okuma süresi: 9 dk

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

  • DASH, HTTP üzerinden uyarlamalı akış için açık uluslararası bir MPEG standardıdır.
  • MPD dosyası (Media Presentation Description), dönemleri ve uyarlama kümelerini tanımlayan XML yapısı aracılığıyla akışı yönetir.
  • Kodekler spesifikasyonla sınırlı değildir — DASH, H.264, HEVC, AV1, VP9, AAC ve diğerlerini destekler.
  • DRM, Common Encryption (CENC) aracılığıyla uygulanır ve tek bir akışta Widevine, PlayReady ve FairPlay'i destekler.
  • Platformlar arası DASH, ExoPlayer (Android), dash.js (tarayıcılar) ve libdash aracılığıyla etkinleştirilir.

DASH nedir?

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.

DASH'ın tarihi ve standardizasyonu

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 nasıl çalışır?

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.

MPD'yi alma ve ayrıştırma

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
<?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>

Segment yükleme ve uyarlama

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.

DASH yapısı: MPD, Period, Adaptation Set

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 (Media Presentation Description)

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, AdaptationSet ve Representation

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.

Segmentasyon ve paketleme

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:

python
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 vs HLS: protokol karşılaştırması

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.

ParametreDASHHLS
StandartUluslararası (ISO/IEC 23009-1)Tescilli (RFC 8216, Apple)
Akış tanımıXML (MPD)M3U8 oynatma listesi
KodeklerHerhangi (H.264, HEVC, AV1, VP9)Sınırlı (H.264, HEVC, 2023'ten itibaren AV1)
Segment formatıfMP4 (birincil), MPEG-2 TSMPEG-2 TS, fMP4
DRMCENC (tüm DRM'ler için birleşik)FairPlay, Widevine (ayrı)
iOS desteğiÜçüncü taraf oynatıcılar aracılığıylaYerel (AVPlayer, Safari)
TarayıcılarChrome, 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.

Mobil geliştirmede DASH kullanımı

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.

ExoPlayer aracılığıyla Android'de DASH

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.

kotlin
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

Her iki platformda DRM'li DASH

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.

kotlin
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 cihazlar için DASH optimizasyonu

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, HLS'den nasıl farklıdır?

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.

Hangi oynatıcılar mobil cihazlarda DASH'i destekler?

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.

DASH bağlamında MPD nedir?

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.

DASH canlı yayınları destekler mi?

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'ta DRM nasıl çalışır?

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

  • MPEG-DASH, MPD formatında XML akış tanımıyla HTTP üzerinden uyarlamalı akış için açık bir uluslararası standarttır.
  • Kodek bağımsızlığı — DASH, H.264, HEVC, AV1, VP9 ve oynatıcıda bulunan diğer tüm kodekleri destekler.
  • CENC, tüm DRM sistemleri için birleşik içerik şifrelemesi sağlayarak lisanslamayı basitleştirir.
  • ABR algoritmaları (BOLA, Pensieve) bit hızı değişikliklerini en aza indirir ve kararlı oynatma sağlar.
  • Android — DASH, ExoPlayer'da yerel olarak desteklenir; iOS üçüncü taraf kitaplıklar gerektirir.
  • LL-DASH canlı yayın gecikmesini 3-8 saniyeye düşürür.
  • Kodek ve DRM esnekliğinin önemli olduğu platformlar arası projeler için DASH kullanılması önerilir.

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.

Projeyi tartış

Ayrıca okuyun