DASH против HLS: битва протоколов стриминга
DASH против HLS: битва протоколов стриминга. Сравниваем форматы адаптивного стриминга и сценарии применения на dcast.tv
On this page
Введение в MPEG-DASH и HLS
Большую часть адаптивного стриминга в вебе несут два протокола: MPEG-DASH (Dynamic Adaptive Streaming over HTTP) и HLS (HTTP Live Streaming). Оба доставляют сегментированное видео поверх HTTP, но различаются форматом сегментов, поддержкой кодеков и охватом платформ. Этот гид разбирает, как работает каждый, как они сравниваются по задержке и эффективности и как выбрать между ними — а также как CMAF объединяет оба в один набор сегментов.
Краткая история и назначение
MPEG-DASH был разработан группой Moving Picture Experts Group (MPEG), чтобы создать универсальный формат стриминга видео в вебе. Он спроектирован независимым от устройств, обеспечивая совместимость с широким спектром устройств и платформ. Протокол использует HTTP для доставки видеосегментов и очень гибок, поддерживая различные кодеки и контейнерные форматы.
HLS был разработан Apple и изначально запущен вместе с выходом устройств iOS. Он быстро стал стандартом для стриминга live- и on-demand-видео. HLS использует HTTP для доставки видеосегментов и получил широкое распространение на разных платформах и устройствах, особенно для iOS и macOS.
Форматы сегментов
Ключевой аспект и DASH, и HLS — как они работают с видеосегментами. Это меньшие части видеопотока, которые доставляются клиенту независимо, обеспечивая адаптивный битрейт.
Форматы сегментов DASH
Сегменты DASH обычно кодируются в формате ISO Base Media File Format (ISOBMFF), который также используется для файлов MP4. Этот формат обеспечивает эффективный произвольный доступ и стриминг поверх HTTP. Сегменты обычно имеют расширение .mp4 и организованы в структуру каталогов, включающую MPD-файл.
Форматы сегментов HLS
Сегменты HLS обычно кодируются в формате .ts (MPEG-2 Transport Stream), хотя новые версии HLS также поддерживают сегменты .m4s (Fragmented MP4). Эти сегменты группируются в файл плейлиста (.m3u8), который сообщает клиенту информацию о доступных сегментах и их расположении.
Структура манифеста
Файл манифеста критичен и для DASH, и для HLS, так как содержит метаданные о видеоконтенте и доступных сегментах.
MPD (Media Presentation Description) для DASH
MPD-файл для DASH — это XML-документ с метаданными о видеопрезентации: информацией о видео- и аудиопотоках, URL сегментов и данными о таймингах. Вот простой пример MPD-файла:
<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011"
mediaPresentationDuration="PT0H1M24S"
minBufferTime="PT1.5S"
profiles="urn:mpeg:dash:profile:isoff-on-demand:2011"
type="static">
<Period start="PT0S">
<AdaptationSet>
<SegmentTemplate timescale="1000" media="segment-$Number$.mp4" initialization="segment-0.mp4" />
<Representation id="rep1" bandwidth="1000000" codecs="avc1.42c015" width="640" height="360">
<SegmentList>
<SegmentURL media="segment-1.mp4"/>
<SegmentURL media="segment-2.mp4"/>
<SegmentURL media="segment-3.mp4"/>
</SegmentList>
</Representation>
</AdaptationSet>
</Period>
</MPD>
m3u8 для HLS
Файл m3u8 для HLS — это текстовый файл, перечисляющий сегменты и их URL. Он также может включать метаданные о потоке, например кодек и битрейт. Вот простой пример файла m3u8:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.000,
segment_00000.ts
#EXTINF:10.000,
segment_00001.ts
#EXTINF:10.000,
segment_00002.ts
#EXT-X-ENDLIST
Поддержка кодеков
И DASH, и HLS поддерживают широкий спектр кодеков, но есть различия в совместимости и поддержке.
Распространённые кодеки
- H.264: широко поддерживается и DASH, и HLS.
- AAC: часто используется для аудио в обоих протоколах.
- VP9: поддерживается DASH, но реже встречается в HLS.
- HEVC (H.265): поддерживается DASH, но реже в HLS, особенно на старых устройствах и платформах.
Совместимость кодеков
DASH гибче в поддержке кодеков, так как справляется с более широким спектром кодеков и контейнеров. HLS исторически был строже, особенно с новыми кодеками и контейнерами, хотя это улучшилось с появлением HLSv4 и сегментов Fragmented MP4.
Адаптивный битрейт (ABR)
Адаптивный битрейт — ключевая функция и DASH, и HLS, позволяющая клиентам переключаться между уровнями качества в зависимости от условий сети.
ABR в DASH
В DASH клиент использует MPD-файл, чтобы определить доступные битрейты и URL сегментов. Затем клиент переключается между разными представлениями (битрейтами) в зависимости от условий сети. MPD-файл описывает разные представления, а клиент динамически выбирает лучшее исходя из доступной полосы.
ABR в HLS
В HLS клиент использует файл m3u8, чтобы определить доступные битрейты и URL сегментов. Клиент переключается между разными потоками (битрейтами) в зависимости от условий сети. Файл m3u8 включает список доступных потоков и их битрейтов, и клиент динамически выбирает лучший исходя из доступной полосы.
Производительность и эффективность
И DASH, и HLS спроектированы для эффективного стриминга с низкой задержкой, но есть различия в производительности.
Задержка
Сквозная задержка зависит в основном от длительности сегмента, настроек энкодера/паковщика и расширений низкой задержки (например, LL-HLS или chunked CMAF), а не от трёхбуквенной аббревиатуры. Традиционные развёртывания HLS часто использовали сегменты по 6–10 с, что добавляет задержку glass-to-glass; DASH нередко паковали с более короткими сегментами, но настроить можно и так, и так. Современный fMP4 HLS с правильной настройкой плеера может достичь задержки, сопоставимой с DASH, при совпадающих настройках.
Использование полосы
Оба протокола используют лестницы адаптивного битрейта; эффективность идёт от выбора кодека, размера сегмента и кэширования на CDN, а не от ярлыка DASH или HLS. MPEG-TS HLS несёт чуть больше mux-накладных расходов, чем fMP4; сравнивайте реальные манифесты, а не предполагайте, что один протокол всегда «эффективнее».
Распространённость и присутствие на рынке
Распространённость DASH и HLS различается на разных платформах и устройствах, а рыночные тренды постоянно меняются.
Текущие рыночные тренды
DASH набирает популярность благодаря гибкости и широкой поддержке кодеков, а HLS остаётся популярным выбором, особенно на iOS и macOS. Многие платформы и устройства поддерживают оба протокола, и выбор часто зависит от конкретных сценариев и требований.
Уровни распространения
- DASH: всё чаще принимается стриминговыми сервисами и платформами, которым нужны широкая поддержка кодеков и гибкость.
- HLS: широко распространён у Apple и других платформ, особенно для live-стриминга и on-demand-контента.
Внедрение DASH и HLS
Внедрение DASH или HLS требует внимательного учёта технических требований и конкретного сценария.
Практические шаги внедрения
Внедрение DASH
- Подготовьте видеоконтент: закодируйте видео в несколько битрейтов.
- Сгенерируйте сегменты: используйте инструменты вроде FFmpeg для генерации сегментов DASH.
- Создайте MPD-файл: используйте инструмент вроде MP4Box для генерации MPD-файла.
- Разместите контент: загрузите сегменты и MPD-файл на веб-сервер.
- Отдавайте контент: настройте сервер на отдачу DASH-контента поверх HTTP.
Внедрение HLS
- Подготовьте видеоконтент: закодируйте видео в несколько битрейтов.
- Сгенерируйте сегменты: используйте инструменты вроде FFmpeg для генерации сегментов HLS.
- Создайте файл m3u8: используйте инструмент вроде FFmpeg для генерации m3u8.
- Разместите контент: загрузите сегменты и файл m3u8 на веб-сервер.
- Отдавайте контент: настройте сервер на отдачу HLS-контента поверх HTTP.
Сравнительная таблица
| Характеристика | DASH | HLS |
|---|---|---|
| Поддержка кодеков | Гибкая, поддерживает H.264, VP9, HEVC и др. | Поддерживает H.264, AAC, ограниченная поддержка новых кодеков |
| Формат сегментов | Сегменты MP4 (ISOBMFF) | MPEG-2 Transport Stream (.ts) или Fragmented MP4 (.m4s) |
| Манифест | MPD-файл (XML) | Файл m3u8 (текст) |
| Задержка | Зависит от длины сегмента и паковки низкой задержки; не фиксируется одним MPD | Зависит от длины сегмента и настройки LL-HLS / fMP4; не фиксируется одним m3u8 |
| Эффективность полосы | Зависит от кодека, лестницы и контейнера; часто fMP4 | TS добавляет mux-накладные; fMP4 HLS распространён в новых стеках |
| Распространённость | Всё активнее у стриминговых сервисов | Широко распространён у Apple и других платформ |
Заключение
DASH и HLS — зрелые протоколы стриминга на базе HTTP. DASH даёт более широкую гибкость кодеков, а HLS — самую широкую поддержку устройств и экосистемы Apple; задержка и эффективность полосы зависят от ваших настроек сегментов и паковки, а не от названия протокола. Выбирайте HLS для максимального охвата, DASH — для гибкости кодеков, и обращайтесь к CMAF плюс расширениям низкой задержки, когда важна задержка glass-to-glass.
Часто задаваемые вопросы
Каковы основные различия между DASH и HLS
DASH и HLS различаются по нескольким ключевым аспектам: - **Поддержка кодеков**: DASH поддерживает более широкий спектр кодеков, включая новые вроде VP9 и HEVC. - **Формат сегментов**: DASH использует сегменты MP4, а HLS — MPEG-2 Transport Stream или Fragmented MP4. - **Задержка**: ни один протокол не является изначально более быстрым; всё зависит от длительности сегмента и расширений низкой задержки вроде LL-HLS или chunked CMAF. - **Эффективность полосы**: эффективность идёт от выбора кодека, размера сегмента и кэширования на CDN, а не от ярлыка протокола.
Чем различаются форматы сегментов DASH и HLS
DASH использует сегменты MP4 (ISOBMFF), которые эффективнее для произвольного доступа и стриминга поверх HTTP. HLS использует сегменты MPEG-2 Transport Stream (`.ts`) или Fragmented MP4 (`.m4s`), которые могут требовать больше накладных расходов.
Какой кодек чаще поддерживают DASH и HLS
И DASH, и HLS обычно поддерживают H.264 для видео и AAC для аудио. Однако DASH также поддерживает новые кодеки вроде VP9 и HEVC, а у HLS их поддержка ограничена.
Как работает адаптивный битрейт в DASH и HLS
ABR работает, позволяя клиентам переключаться между уровнями качества в зависимости от условий сети. DASH использует MPD-файлы, а HLS — файлы m3u8 для управления разными битрейтами и URL сегментов.
У какого протокола ниже задержка, DASH или HLS
Ни один протокол не гарантирует низкую задержку сам по себе. Задержка зависит от длительности сегмента и расширений низкой задержки вроде LL-HLS или chunked CMAF; используйте короткие, выровненные по ключевым кадрам сегменты и измеряйте задержку glass-to-glass на вашем энкодере, CDN и плеере.
Бесплатные инструменты по этой теме
- Stream LabОдин инструмент для HLS: анализ манифеста, таблица вариантов, встроенный плеер и телеметрия воспроизведения в реальном времени — буфер, задержка, кодеки и битрейт.
- HLS / M3U8 плеерПроверьте свой HLS-поток перед выходом в эфир. Вставьте URL .m3u8 или выберите образец. Поддерживается HLS с сегментами TS и fMP4. Работает на десктопе и мобильных. Мы не проксируем и не храним ваш поток.
- Проверка DASH / MPDЗагрузите публичный URL .mpd прямо из браузера и получите быстрый структурный разбор: тип MPD, adaptation sets, representations и фрагмент документа. Дополняет HLS-инструменты — действуют те же правила CORS.
- Почему не воспроизводится?Пройдите этот чек-лист, когда ваш поток или ссылка на видео не воспроизводятся. Затем проверьте URL ниже или в проверке потока.
dcast Team
Professional video streaming experts helping creators succeed.
Похожие статьи
Начните свой видеобизнес сегодня
Присоединяйтесь к тысячам авторов, которые монетизируют контент с DCAST.
Начать бесплатно



