DASH — какво е, протокол и принцип на работа на динамичния стрийминг

Автор: IT Sectr Публикувано: 2026-05-23 Време за четене: 9 мин

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.

Основни точки

  • DASH — отворен международен стандарт MPEG за адаптивно потоково предаване през HTTP.
  • MPD файл (Media Presentation Description) управлява потока чрез XML структура с описание на периоди и адаптационни набори.
  • Кодеците не са ограничени от спецификацията — DASH поддържа H.264, HEVC, AV1, VP9, AAC и други.
  • DRM се реализира чрез Common Encryption (CENC), поддържащ Widevine, PlayReady и FairPlay в един поток.
  • Кръстосана платформеност на DASH се осигурява чрез ExoPlayer (Android), dash.js (браузъри) и libdash.

Какво е DASH?

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 се реализира чрез мултиплексиране на варианти на едно и също съдържание. Сървърът подготвя няколко Представяния (Representation) — копия на съдържанието с различни параметри на компресия. Клиентът анализира пропускателната способност на канала и динамично превключва между представянията, избирайки оптималното съотношение между качество и стабилност на възпроизвеждане. Според академично изследване (IEEE Access, 2024), DASH с алгоритъм BOLA показва 22% по-малко превключвания на битрейт в сравнение с HLS при нестабилна връзка.

История и стандартизация на DASH

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?

Процесът на възпроизвеждане на DASH поток се състои от четири последователни етапа: получаване на MPD, анализ на описанието на потока, избор на начално представяне и динамично превключване между представянията. Всеки етап има своя специфика, влияеща върху качеството на потребителското изживяване.

Получаване и анализиране на MPD

Плейърът зарежда MPD файла от известен URL адрес. MPD съдържа XML структура с описание на целия поток: продължителност на съдържанието, времева скала, налични периоди (Period), адаптационни набори (AdaptationSet) и представяния (Representation) с конкретни параметри на кодиране. Плейърът анализира MPD и създава вътрешен модел на наличните медийни ресурси.

Пример за основен MPD файл за VOD съдържание с две резолюции:

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>

Зареждане на сегменти и адаптация

След избора на начално представяне, плейърът започва да зарежда сегменти. Всеки сегмент съдържа няколко секунди съдържание (обикновено 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, Adaptation Set

Йерархичната структура на DASH потока е организирана на четири нива: MPD → Period → AdaptationSet → Representation. Всяко ниво добавя ниво на детайлност, позволявайки описание на сложни сценарии — от прост VOD до живи предавания с рекламни вмъквания и мулти-ъглово видео.

MPD (Media Presentation Description)

MPD — коренен елемент, който описва цялата медийна презентация. Атрибутите на MPD определят типа поток (static за VOD, dynamic за живо предаване), общата продължителност, времевата скала, профила и информацията за DRM. MPD може да съдържа един или повече Period-а, всеки от които представлява независим времеви интервал от съдържанието.

Period, AdaptationSet и Representation

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 поток от входен файл:

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 срещу HLS: сравнение на протоколи

Изборът между DASH и HLS е едно от ключовите решения при проектирането на система за видео стрийминг. И двата протокола решават една и съща задача (адаптивна доставка на видео чрез HTTP), но имат принципни разлики в архитектурата, поддръжката на кодеци и екосистемата. Нека ги разгледаме по ключови параметри.

ПараметърDASHHLS
СтандартМеждународен (ISO/IEC 23009-1)Патентован (RFC 8216, Apple)
Описание на потокXML (MPD)M3U8 плейлист
КодециВсякакви (H.264, HEVC, AV1, VP9)Ограничени (H.264, HEVC, AV1 от 2023)
Формат на сегментиfMP4 (основен), MPEG-2 TSMPEG-2 TS, fMP4
DRMCENC (единен за всички 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 в мобилното разработване

Интеграцията на DASH в мобилни приложения зависи от платформата. На Android DASH се поддържа директно чрез ExoPlayer с модул за разширение. На iOS е необходимо използване на библиотеки на трети страни, като libdash с интеграция чрез AVFoundation или MPEGDASHPlayer. Нека разгледаме практическата реализация за двете платформи.

DASH на Android чрез ExoPlayer

ExoPlayer от Google предоставя вградена поддръжка за DASH чрез модула `exoplayer-dash`. Свързването на DASH поток не се различава от другите формати — достатъчно е да предадете URI на MPD файла на MediaItem. ExoPlayer автоматично определя формата на съдържанието и стартира съответния рендерер, поддържайки всички стандартни ABR алгоритми.

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

DASH с DRM на двете платформи

Common Encryption (CENC) — една от ключовите възможности на DASH, позволяваща използването на един медиен поток с различни DRM системи. MPD файлът съдържа XML елементи ContentProtection с идентификатори на DRM системи (Widevine, PlayReady, FairPlay). Клиентът избира подходящата DRM система въз основа на своята платформа и заявява лиценз чрез лицензионния сървър.

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()

Оптимизация на DASH за мобилни устройства

Мобилните приложения изискват специална настройка на 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 от HLS?

DASH — отворен международен стандарт MPEG, необвързан с доставчик. За разлика от HLS (патентован протокол на Apple), DASH поддържа всякакви кодеци, използва XML описание на потока (MPD) вместо M3U8 и осигурява единна DRM система чрез CENC. HLS има вградена поддръжка на iOS, DASH е по-гъвкав за кръстосано-платформени решения.

Кои плейъри поддържат DASH на мобилни устройства?

На Android основният плейър за DASH е ExoPlayer от Google с модула exoplayer-dash. На iOS се използват решения на трети страни, като libdash с интеграция чрез AVFoundation или търговски плейъри (THEOplayer, Bitmovin). В уеб браузърите DASH се възпроизвежда чрез dash.js с използване на MediaSource Extensions.

Какво е MPD в контекста на DASH?

MPD (Media Presentation Description) — XML файл, който описва структурата на DASH поток: продължителност на съдържанието, налични битрейтове, резолюции, кодеци, формати на сегменти и тяхното местоположение. MPD служи като входна точка за плейъра, замествайки главния плейлист в HLS. Без MPD файл възпроизвеждането на DASH съдържание е невъзможно.

Поддържа ли DASH живи предавания?

Да, DASH поддържа както VOD, така и живи предавания. За живи предавания се използва dynamic тип MPD с автоматично обновяване. Сървърът периодично обновява MPD, добавяйки нови сегменти и премахвайки остарели. Low-Latency DASH (LL-DASH) с кодиране на парчета позволява постигане на забавяне от 3-8 секунди, сравнимо с LL-HLS.

Как работи DRM в DASH?

DASH използва Common Encryption (CENC, ISO/IEC 23001-7), който позволява криптиране на медийното съдържание веднъж и декриптиране от всяка DRM система. MPD съдържа XML елементи ContentProtection с указание на поддържаните DRM (Widevine, PlayReady, FairPlay). Плейърът избира подходящ DRM въз основа на платформата и заявява лиценз чрез зададения URL адрес.

Резюме

  • MPEG-DASH — отворен международен стандарт за адаптивен HTTP стрийминг с XML описание на потока в MPD формат.
  • Независимост от кодеци — DASH поддържа H.264, HEVC, AV1, VP9 и всякакви други кодеци, достъпни за плейъра.
  • CENC осигурява единно криптиране на съдържанието за всички DRM системи, опростявайки лицензирането.
  • ABR алгоритми (BOLA, Pensieve) минимизират превключванията на битрейт и осигуряват стабилно възпроизвеждане.
  • Android — DASH се поддържа вградено в ExoPlayer; iOS изисква библиотеки на трети страни.
  • LL-DASH намалява забавянето на живите предавания до 3-8 секунди.
  • Препоръчва се използването на DASH за кръстосано-платформени проекти, където гъвкавостта на кодеци и DRM е важна.

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също