Το 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, το οποίο περιλαμβάνει υποστήριξη για νευρωνικούς κωδικοποιητές, υπολογιστικό νέφος και βελτιστοποίηση για σενάρια Extended Reality (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 δευτερόλεπτα). Ο αναπαραγωγέας διατηρεί ένα buffer για μερικά τμήματα μπροστά, εξασφαλίζοντας ανθεκτικότητα σε βραχυπρόθεσμες πτώσεις της ταχύτητας δικτύου. Ο αλγόριθμος επιλογής αναπαράστασης (ABR) παρακολουθεί συνεχώς την ταχύτητα φόρτωσης τμημάτων και αποφασίζει για την εναλλαγή μεταξύ διαθέσιμων ρυθμών μετάδοσης.
Οι σύγχρονοι αλγόριθμοι ABR για DASH, όπως το BOLA (Buffer Occupancy based Lyapunov Algorithm) και το Pensieve (βασισμένο σε Reinforcement Learning), λαμβάνουν υπόψη όχι μόνο το τρέχον εύρος ζώνης, αλλά και το μέγεθος του buffer, τον τύπο περιεχομένου (αθλητικά, ειδήσεις, ταινία) και ακόμη την κατανάλωση ενέργειας της συσκευής. Το BOLA, που αποτελεί μέρος του dash.js και του ExoPlayer, ελαχιστοποιεί τον αριθμό εναλλαγών ρυθμού μετάδοσης διατηρώντας σταθερό buffer, όπως επιβεβαιώνεται από έρευνες ACM (Spiteri et al., 2020).
Η ιεραρχική δομή της ροής DASH είναι οργανωμένη σε τέσσερα επίπεδα: MPD → Period → AdaptationSet → Representation. Κάθε επίπεδο προσθέτει ένα επίπεδο λεπτομέρειας, επιτρέποντας την περιγραφή πολύπλοκων σεναρίων — από απλό VOD έως ζωντανές μεταδόσεις με διαφημιστικά ένθετα και βίντεο πολλαπλών γωνιών.
MPD — το ριζικό στοιχείο, που περιγράφει ολόκληρη την παρουσίαση πολυμέσων. Τα χαρακτηριστικά MPD καθορίζουν τον τύπο ροής (static για VOD, dynamic για ζωντανή μετάδοση), τη συνολική διάρκεια, τη χρονική κλίμακα, το προφίλ και πληροφορίες σχετικά με DRM. Το MPD μπορεί να περιέχει μία ή περισσότερες Περιόδους, καθεμία από τις οποίες αντιπροσωπεύει ένα ανεξάρτητο χρονικό διάστημα περιεχομένου.
Period — το χρονικό τμήμα της παρουσίασης. Για VOD χρησιμοποιείται μία Περίοδος για ολόκληρο το περιεχόμενο. Για ζωντανή μετάδοση με διαφημιστικά ένθετα, η Περίοδος μπορεί να αλλάζει δυναμικά — ο αναπαραγωγέας φορτώνει το ενημερωμένο MPD και ανιχνεύει μια νέα Περίοδο που αντιστοιχεί στο διαφημιστικό μπλοκ. Κάθε Περίοδος περιέχει ένα ή περισσότερα 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 παραμένει το de facto πρότυπο, ενώ για Android και διαδικτυακές πλατφόρμες, το DASH είναι μια πιο ευέλικτη και ισχυρή λύση.
Η ενσωμάτωση του DASH σε εφαρμογές κινητών εξαρτάται από την πλατφόρμα. Στο Android, το DASH υποστηρίζεται άμεσα μέσω του ExoPlayer με μονάδα επέκτασης. Στο iOS απαιτείται η χρήση βιβλιοθηκών τρίτων, όπως libdash με ενσωμάτωση μέσω AVFoundation ή MPEGDASHPlayer. Ας εξετάσουμε την πρακτική υλοποίηση και για τις δύο πλατφόρμες.
ExoPlayer από την Google παρέχει ενσωματωμένη υποστήριξη για DASH μέσω της μονάδας `exoplayer-dash`. Η σύνδεση ροής DASH δεν διαφέρει από άλλες μορφές — αρκεί να μεταβιβάσετε το URI του αρχείου MPD στο MediaItem. Το ExoPlayer καθορίζει αυτόματα τη μορφή περιεχομένου και ξεκινά τον αντίστοιχο renderer, υποστηρίζοντας όλους τους τυπικούς αλγόριθμους 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 λόγω περιορισμών εύρους ζώνης και κατανάλωσης ενέργειας. Οι κύριες συστάσεις περιλαμβάνουν: ρύθμιση ελάχιστου buffer 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 χρησιμεύει ως σημείο εισόδου για τον αναπαραγωγέα, αντικαθιστώντας τη λίστα αναπαραγωγής master στο HLS. Χωρίς αρχείο MPD, η αναπαραγωγή περιεχομένου DASH είναι αδύνατη.
Ναι, το DASH υποστηρίζει τόσο VOD όσο και ζωντανές μεταδόσεις. Για ζωντανές μεταδόσεις χρησιμοποιείται ο dynamic τύπος MPD με αυτόματη ενημέρωση. Ο διακομιστής ενημερώνει περιοδικά το MPD, προσθέτοντας νέα τμήματα και αφαιρώντας παλαιότερα. Το Low-Latency DASH (LL-DASH) με τμηματική κωδικοποίηση επιτρέπει την επίτευξη καθυστέρησης 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. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης