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) добавила поддержку событий, улучшенную рекламную вставку и Server-Controlled Adaptation. Третья версия (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?

Процесс воспроизведения 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 до live-трансляций с рекламными вставками и мульти-ракурсным видео.

MPD (Media Presentation Description)

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

Period, AdaptationSet и Representation

Period — временной сегмент презентации. Для VOD используется один Period на весь контент. Для live с рекламными вставками Period может изменяться динамически — плеер загружает обновлённый MPD и обнаруживает новый Period, соответствующий рекламному блоку. Каждый Period содержит один или несколько AdaptationSet.

AdaptationSet — группа взаимозаменяемых представлений одного типа медиа: видео, аудио, субтитры. Внутри AdaptationSet все представления отличаются только битрейтом и/или разрешением, но кодируют один и тот же контент. Важное свойство: плеер может переключаться между представлениями внутри одного AdaptationSet на границе сегментов без разрыва воспроизведения.

Representation — конкретный вариант кодирования с определённым битрейтом, разрешением и кодеком. Для каждого 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 vs 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-first проектов 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 live-трансляции?

Да, DASH поддерживает как VOD, так и live-вещание. Для live используется dynamic тип MPD с автоматическим обновлением. Сервер периодически обновляет MPD, добавляя новые сегменты и удаляя устаревшие. Low-Latency DASH (LL-DASH) с chunked encoding позволяет достичь задержки 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 сокращает задержку live-трансляций до 3-8 секунд.
  • Рекомендуется использовать DASH для кроссплатформенных проектов, где важна гибкость кодеков и DRM.

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

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также