Если вы открывали DevTools Chrome на Netflix или YouTube и видели запросы на файлы, оканчивающиеся на .mpd и .m4s, вы смотрели MPEG-DASH в действии. XML-файл — это манифест, файлы .m4s — короткие fragmented-MP4-сегменты видео и аудио, а ваш браузер сшивает их в реальном времени поверх обычного HTTP.
DASH — это кузен HLS из открытого стандарта. Где HLS принадлежит Apple, стандартам MPEG/ISO принадлежит DASH. Где HLS использует текстовые плейлисты .m3u8, DASH использует XML-манифесты .mpd. Где HLS изначально настаивал на H.264, у DASH никогда не было предпочтения по кодекам. Два протокола решают одну и ту же проблему с разных стартовых точек, и продуманный стриминговый сервис в 2026 году поставляет оба. MPEG-DASH — Dynamic Adaptive Streaming over HTTP — это стандарт ISO/IEC 23009-1 для доставки видео в виде цепочки коротких fMP4-сегментов, описанных XML-манифестом (.mpd) и получаемых по обычному HTTP.
Это руководство пройдёт по тому, что на самом деле содержит .mpd, как работает иерархия Period / AdaptationSet / Representation в DASH, где встраивается DRM, аргументы за и против DASH и HLS, и что происходит, когда вы пытаетесь сохранить один из этих потоков на диск.
Главное {#key-takeaways}
- MPEG-DASH — открытый стандарт ISO для адаптивного HTTP-стриминга — ISO/IEC 23009-1. HLS — это RFC 8216.
- Манифест
.mpd— это XML, а не простой текст. Он описывает Period, AdaptationSet и Representation — строгую иерархию, которую плеер обходит при запуске и при каждой смене качества. - DASH не зависит от кодеков по дизайну. H.264, H.265, VP9, AV1, AAC, Opus — манифест объявляет строки кодеков, а плеер декодирует.
- Медиа-сегменты — это fragmented MP4 (
.m4s), те же CMAF-фрагменты, что используются современным HLS. Один набор байтов может обслуживать оба протокола. - DRM использует MPEG Common Encryption (CENC), так что один зашифрованный файл работает с Widevine, PlayReady или FairPlay в зависимости от модуля расшифровки клиента.
- Платформы Apple не поддерживают DASH нативно. iPhone, iPad, Safari и Apple TV требуют HLS — только DASH — это провал.
- Netflix, YouTube, Disney+, Hulu и Max поставляют DASH и HLS бок о бок; Apple TV+, iTunes и Twitch поставляют только HLS.
Простое объяснение
Забудьте на минуту об аббревиатурах. У стримингового сервиса в любом случае одна и та же проблема: доставить длинное видео зрителям по беспорядочным соединениям, дать им мгновенно перематывать, дать им адаптироваться к изменениям пропускной способности в процессе воспроизведения и сделать это дёшево поверх общедоступного HTTP. Общеотраслевое решение — нарезать видео на короткие сегменты, написать манифест с их перечислением и позволить плееру получать то, что ему нужно, по порядку. HLS делает это с текстовыми плейлистами; DASH делает это с XML-манифестами. Работа одна и та же; бумажная волокита разная.
С точки зрения плеера подход DASH ощущается почти идентичным HLS. Плеер получает небольшой манифест при запуске, узнаёт, какие качества и аудиодорожки доступны, выбирает по одному из каждого на основе пропускной способности и области просмотра, затем получает поток коротких сегментов и подаёт их декодеру. Смены качества происходят между сегментами. Прямые трансляции работают благодаря тому, что манифест растёт со временем. Перемотка мгновенна, потому что плеер прыгает к любому сегменту, покрывающему целевую отметку.
Видимая пользователю разница между двумя протоколами небольшая, но реальная. Плейлисты HLS — обычный текст; манифесты DASH — XML. Сегменты HLS исторически были .ts (MPEG-2 Transport Stream), а теперь обычно fMP4; сегменты DASH всегда были fMP4 с расширением .m4s. Спонсирующие организации тоже разные: Apple изобрела HLS и опекает его, тогда как DASH вышел из MPEG и DASH Industry Forum как открытый стандарт ISO без единого вендора в управлении. Для парного знакомства HLS в деталях освещает, как от начала до конца выглядит плейлист .m3u8.
Как на самом деле работает DASH
DASH-поток — это XML-манифест плюс куча fragmented-MP4-сегментов, и всё это обслуживается по обычному HTTP. Та же форма, что у HLS, другой формат на каждом уровне.
Манифест .mpd
Первое, что получает DASH-плеер, — Media Presentation Description, .mpd. В отличие от обычного текстового плейлиста HLS, это XML-документ с определённой схемой. Вот слегка укороченный пример:
<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011"
type="static"
mediaPresentationDuration="PT1H30M"
minBufferTime="PT2S"
profiles="urn:mpeg:dash:profile:isoff-live:2011">
<Period id="0" start="PT0S">
<AdaptationSet mimeType="video/mp4" segmentAlignment="true"
startWithSAP="1" maxWidth="1920" maxHeight="1080">
<Representation id="v1" codecs="avc1.640028"
width="1920" height="1080" bandwidth="5000000">
<SegmentTemplate timescale="1000" duration="4000"
initialization="v1/init.mp4"
media="v1/seg-$Number$.m4s"
startNumber="1"/>
</Representation>
<Representation id="v2" codecs="avc1.4d401f"
width="1280" height="720" bandwidth="2800000">
<SegmentTemplate timescale="1000" duration="4000"
initialization="v2/init.mp4"
media="v2/seg-$Number$.m4s"
startNumber="1"/>
</Representation>
</AdaptationSet>
<AdaptationSet mimeType="audio/mp4" lang="en">
<Representation id="a1" codecs="mp4a.40.2" bandwidth="128000">
<SegmentTemplate timescale="1000" duration="4000"
initialization="a1/init.mp4"
media="a1/seg-$Number$.m4s"
startNumber="1"/>
</Representation>
</AdaptationSet>
</Period>
</MPD>
Каждый атрибут означает что-то конкретное. type="static" помечает это как VOD (прямой эфир — это type="dynamic"). mediaPresentationDuration="PT1H30M" — это длительность в формате ISO 8601. Каждый Representation несёт строку кодека и бюджет пропускной способности. SegmentTemplate — это где происходит магия: вместо того чтобы перечислять URL каждого сегмента, как это делает HLS, DASH позволяет манифесту объявить шаблон URL, а плеер вычисляет URL на лету.
Period, AdaptationSet и Representation
Строгая иерархия внутри манифеста — это концептуальное сердце DASH:
- Period — непрерывный фрагмент таймлайна. Большинство фильмов — это один период; вещатели используют несколько периодов, чтобы сшивать рекламу или границы глав.
- AdaptationSet — коллекция альтернативных кодировок одного и того же контента, взаимозаменяемых во время выполнения. У типичного фильма есть один видео-AdaptationSet, один или несколько аудио-AdaptationSet (по одному на язык) и один или несколько AdaptationSet субтитров.
- Representation — единичная конкретная кодировка. 1080p H.264 при 5 Мбит/с — это Representation; 720p H.264 при 2,8 Мбит/с — другой; 720p VP9 при 1,5 Мбит/с — ещё один. Плеер выбирает один Representation для каждого AdaptationSet и может переключиться на другой на любой границе сегмента внутри того же AdaptationSet.
Эта трёхуровневая модель более структурирована, чем плоский подход «варианты и сегменты» в HLS, и поэтому DASH выигрывает по расширяемости: несколько аудиодорожек, дорожки trick-play, дорожки миниатюр и вставка рекламы по периодам встраиваются чисто, без изобретения нового синтаксиса манифеста.
Сегменты и инициализация
Байты Representation приходят в двух видах. Инициализационный сегмент — это небольшой fMP4-файл, содержащий бокс moov — параметры кодека, метаданные дорожки и конфигурацию декодера. Плеер получает его один раз для каждого Representation. Медиа-сегменты — это собственно аудио и видео, обычно длиной 2–6 секунд каждый, нарезанные по границам ключевых кадров для видеодорожек, чтобы плеер мог начать декодирование с начала любого сегмента.
Когда манифест устанавливает startWithSAP="1", каждый сегмент начинается со Stream Access Point — эквивалента флага EXT-X-INDEPENDENT-SEGMENTS HLS, гарантирующего, что сегменты независимо декодируемы. Без этой гарантии последующие сегменты могут зависеть от предыдущих, что делает адаптивное переключение небезопасным. Поскольку URL SegmentTemplate управляются шаблонами (v1/seg-$Number$.m4s), манифест может описать 90-минутный фильм в нескольких сотнях байтов XML. SegmentTimeline — альтернатива, когда длительности не однородны.
Common Encryption (CENC)
История DRM в DASH идёт через MPEG Common Encryption (CENC), ISO/IEC 23001-7. CENC шифрует сами медиа-сегменты с помощью AES-128 в режиме CTR под ключом контента, а затем объявляет, какие DRM-системы могут выдать этот ключ. В .mpd вы увидите элементы ContentProtection примерно такого вида:
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc"
cenc:default_KID="34e5db32-8625-47cd-ba06-68fca0655a72"/>
<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
<cenc:pssh>AAAAW3Bzc2gAAAAA...</cenc:pssh>
</ContentProtection>
<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95">
<cenc:pssh>AAACfHBzc2gAAAAA...</cenc:pssh>
</ContentProtection>
Первый блок объявляет ID ключа по умолчанию в рамках CENC. Второй — UUID Widevine; третий — UUID PlayReady. Модуль расшифровки контента (CDM) вашего браузера читает тот блок, который соответствует поддерживаемому им DRM, отправляет запрос лицензии на лицензионный сервер сервиса со встроенными данными PSSH (Protection System Specific Header) и получает обратно ключ контента, необходимый для расшифровки сегментов. Полную картину см. в как Widevine и PlayReady контролируют премиум-потоки. Поддержка FairPlay в DASH исторически встречается редко — FairPlay был спроектирован для HLS — но CMAF + CBCS-шифрование сделали кросс-DRM FairPlay-over-DASH технически возможным на небольшом наборе платформ.
Независимость от кодеков по дизайну
HLS изначально привилегировал H.264 (ранние устройства Apple не могли декодировать ничего другого), и добавление новых кодеков занимало многолетний процесс спецификации. DASH никогда не выбирал кодек — манифест просто объявляет строки кодеков (avc1.640028, hev1.1.6.L150.B0, vp09.00.50.08, av01.0.05M.08), а плеер проверяет, поддерживает ли его декодер их. Именно поэтому YouTube смог поставлять AV1 поверх DASH за годы до того, как эквивалентная поддержка HLS появилась у Apple. Поскольку слой манифеста — единственное, что нужно понимать DASH-плеерам, VidMost может разобрать .mpd, пройти по URL SegmentTemplate, получить каждый fMP4-фрагмент и ремультиплексировать результат, не заботясь о том, какой кодек внутри.
DASH против HLS: честное сравнение
DASH и HLS решают одну и ту же проблему с разными компромиссами. Ни один не лучше универсально. Вот аргументы за каждый по осям, которые действительно важны.
Формат манифеста
.mpd DASH — это XML с определённой схемой: расширяемый (новые функции получают новые элементы, проверяемые схемой, старые плееры игнорируют то, чего не понимают), но многословный. .m3u8 HLS — это простой текст с тегами #EXT-X-, читаемый с одного взгляда и легко поддающийся grep. DASH выигрывает по структуре и машинной валидации; HLS — по человеческой читаемости.
Задержка
Оба начинали с задержки от секунд до десятков секунд. У обоих есть низколатентные расширения: LL-HLS использует частичные сегменты, блокирующие перезагрузки плейлиста и подсказки предзагрузки (Apple заменил свой более ранний дизайн с HTTP/2 push на EXT-X-PRELOAD-HINT), тогда как LL-DASH использует сегменты с chunked transfer encoding и Common Media Application Format Live profile. Оба нацелены на задержку «от стекла до стекла» 2–5 секунд в продакшене. Для субсекундной задержки переходят на WebRTC.
Поддержка кодеков
DASH с первого дня не зависит от кодеков. H.264, H.265, VP9, AV1, AAC, Opus, FLAC, AC-4 — манифест объявляет строку кодека, а плеер решает. HLS начинал только с H.264, потому что этого требовало оригинальное железо iPhone. Apple постепенно расширяла поддержку: H.265 поверх fMP4 с 2017 года, Dolby Vision и HDR10 с 2018 года, AV1 с поколения iPhone 15. Современный HLS не заблокирован на H.264, но у истории кодеков протокола есть отставание, которого у DASH никогда не было.
DRM
Оба опираются на шифрование уровня сегмента на основе AES, но DRM-системы поверх различаются. DASH обычно использует CENC с Widevine и PlayReady — один зашифрованный файл работает с обоими, потому что ключ контента один и тот же; различается лишь формат запроса лицензии. HLS исторически использует FairPlay Streaming (только Apple) плюс, всё чаще, Widevine через CMAF + CBCS. Как только ваш сервис на CMAF, одни и те же зашифрованные сегменты могут обслуживать оба типа манифестов и все три основные DRM-системы.
Поддержка Apple/iOS
HLS обязателен на iOS, iPadOS, Safari и Apple TV. DASH не поддерживается нативно ни на одной платформе Apple. Это единственный самый большой решающий фактор в стратегии DASH-vs-HLS. Воспроизведение DASH в Safari возможно только через Media Source Extensions плюс JavaScript-обёртку вроде shaka-player или dash.js, и даже тогда оно не покрывает все граничные случаи iOS (AirPlay, элементы управления на экране блокировки, picture-in-picture). Любой сервис, нацеленный на iPhone, должен поставлять HLS. Только DASH — провал.
Совместимость с CDN и сходимость на CMAF
Оба протокола — это чистый HTTP. Любой CDN, обслуживающий статические файлы, может обслуживать DASH- или HLS-поток — стоимость и конфигурация CDN по сути идентичны. Самое важное событие последнего десятилетия в том, что DASH и HLS теперь делят байты сегментов. CMAF — Common Media Application Format, ISO/IEC 23000-19 — определяет профиль fragmented-MP4, удовлетворяющий и DASH, и современный HLS. Стриминговый сервис может закодировать один раз в CMAF-сегменты и написать и .mpd, и .m3u8, указывающие на одни и те же файлы .m4s. Именно это и происходит сейчас в YouTube, Netflix, Apple и у большинства хостинговых видеопровайдеров в 2026 году.
Кто что поставляет в 2026 году
- Netflix — DASH как основной на вебе, Windows, Android, смарт-ТВ и консолях; HLS как запасной для Safari и iOS.
- YouTube — DASH в вебе и на Android с VP9 / AV1; HLS для iOS, Safari, AirPlay и большинства ТВ-приложений.
- Apple TV+, iTunes Store — только HLS.
- Twitch — только HLS, для live и VOD, с момента вывода RTMP-воспроизведения в 2014 году.
- Disney+, Hulu, Max, Amazon Prime Video — DASH или HLS в зависимости от клиента, часто одни и те же CMAF-сегменты под обоими манифестами.
HLS владеет устройствами Apple и делит остальной рынок с DASH. Большинство крупных сервисов поддерживают оба, потому что альтернатива — оставить часть аудитории без видео.
Что это значит, если вы хотите сохранить видео
Знание того, как работает DASH, делает практическую проблему загрузки конкретной. Каждая проблема, с которой пользователи HLS сталкиваются при попытке сохранить поток, относится и к DASH, часто хуже:
- Сохранить как в браузере получает только
.mpd. Это XML-манифест. В нём ноль видеобайтов. Открытие его в VLC работает только пока сетевая сессия ещё активна и URL сегментов не истекли. - DASH-сегменты — это файлы
.m4s— один init-сегмент плюс десятки или сотни медиа-сегментов на каждый Representation. Каждый — это fragmented-MP4-фрагмент, бесполезный сам по себе. Чтобы получить один воспроизводимый файл, вам нужно получить init-сегмент плюс каждый медиа-сегмент по порядку и ремультиплексировать их. (Если вы туманно представляете, что на самом деле внутри.m4s, см. контейнер против кодека.) - Вам пришлось бы разбирать XML, проходить по URL SegmentTemplate и ремультиплексировать. Это означает писать код, понимающий заполнители
$Number$,$Time$,$RepresentationID$и$Bandwidth$, собирающий URL, получающий их параллельно, не молотя CDN, и пропускающий байты черезffmpegилиmp4box. Это не выходной скрипт — это реальное программное обеспечение. - Выбор варианта имеет значение. Выберите неверный Representation — и вы скачали копию 480p фильма в 1080p. Токены тоже истекают — многие URL
.mpdи сегментов подписаны и становятся неактуальными за минуты.
VidMost обрабатывает всё это. Он разбирает .mpd, выбирает Representation наивысшего качества для видео и аудио, скачивает каждый сегмент параллельно и ремультиплексирует CMAF-фрагменты в один чистый MP4. Для DRM-защищённых DASH-потоков (типичная связка Widevine + PlayReady) встроенная поддержка Widevine L3 в VidMost работает везде, где доступно воспроизведение L3 — фактический потолок качества задаётся сервисом и уровнем DRM, а премиум-платформы обычно ограничивают L3-потоки разрешением 480p–720p. Вы вставляете URL — получаете MP4.
Распространённые заблуждения и подводные камни
Несколько связанных с DASH путаниц постоянно появляются в ветках форумов. Стоит их прояснить.
- «MPEG-DASH — это что-то от Google». Это не так. DASH — открытый стандарт MPEG/ISO (ISO/IEC 23009-1), управляемый DASH Industry Forum — консорциумом, включающим Adobe, Microsoft, Netflix и Qualcomm. Google помогал его разрабатывать и использует его на YouTube, но ни один вендор не владеет спецификацией.
- «DASH новее и поэтому лучше». DASH (2012) новее HLS (2009), но «лучше» зависит от состава ваших платформ. Если ваша аудитория на iPhone, HLS выигрывает по умолчанию. Если ваша аудитория на Android и смарт-ТВ с максимальной гибкостью по кодекам, выигрывает DASH. Большинство сервисов поставляют оба.
- «
.mpd— это видео». Это не так. Это манифест. Само видео живёт в сегментах.m4s, на которые ссылается манифест. - «Если сайт использует DASH, мой HLS-плеер не сможет его воспроизвести». Верно для нативных плееров. Но большинство современных веб-плееров — shaka-player, dash.js, hls.js, video.js — обрабатывают оба внутри браузера, подавая сегменты в видеоэлемент через Media Source Extensions.
- «DASH всегда означает DRM». Это не так. Множество DASH-потоков идут без шифрования: трансляции прямых событий, образовательные платформы и большая часть бесплатного контента YouTube. DRM — это опциональный слой, объявляемый через элементы
ContentProtection.
Заключение
DASH — это HLS-близнец из параллельной вселенной. Оба нарезают видео на короткие сегменты, описывают их в манифесте и отправляют по обычному HTTP. Различия — XML против простого текста, ISO-стандарт против спецификации Apple, независимость от кодеков против истории привязки к кодекам — важны внутри отрасли, но редко имеют значение для зрителей. Что важно — это что стриминговые сервисы, лицензирующие контент у каждой студии мира, остановились на этих двух протоколах, всё больше сходясь на общих CMAF-сегментах под обоими манифестами. Как только вы научитесь распознавать запрос .mpd и понимать иерархию Period / AdaptationSet / Representation, странное поведение современного стриминга перестаёт быть загадочным — это всё тот же цикл: получить манифест, выбрать варианты, получить сегменты, декодировать, повторить. Если вы предпочитаете полностью пропустить уровень протокола и просто сохранить видео, VidMost обрабатывает HLS, MPEG-DASH, fMP4, CMAF и DRM-защищённые потоки.
Связанные материалы
- Как на самом деле воспроизводится онлайн-видео — большая картина стримингового конвейера от камеры до вашего экрана.
- Что такое HLS и M3U8? — родственный протокол, освещённый от начала до конца.
- Почему качество видео меняется в процессе воспроизведения — логика ABR внутри каждого DASH- и HLS-плеера.
- Контейнеры видео против кодеков — что на самом деле находится внутри сегмента
.m4s. - Что такое DRM-защищённый контент? — как Widevine, PlayReady и FairPlay контролируют зашифрованные варианты, которые нельзя просто сохранить.