DASH против HLS: битва протоколов стриминга. Сравниваем форматы адаптивного стриминга и сценарии применения на dcast.tv

Присоединяйтесь к тысячам авторов, которые монетизируют контент с DCAST.
Начать бесплатноБольшую часть адаптивного стриминга в вебе несут два протокола: 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 обычно кодируются в формате ISO Base Media File Format (ISOBMFF), который также используется для файлов MP4. Этот формат обеспечивает эффективный произвольный доступ и стриминг поверх HTTP. Сегменты обычно имеют расширение .mp4 и организованы в структуру каталогов, включающую MPD-файл.
Сегменты HLS обычно кодируются в формате .ts (MPEG-2 Transport Stream), хотя новые версии HLS также поддерживают сегменты .m4s (Fragmented MP4). Эти сегменты группируются в файл плейлиста (.m3u8), который сообщает клиенту информацию о доступных сегментах и их расположении.
Файл манифеста критичен и для DASH, и для HLS, так как содержит метаданные о видеоконтенте и доступных сегментах.
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 — это текстовый файл, перечисляющий сегменты и их 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 поддерживают широкий спектр кодеков, но есть различия в совместимости и поддержке.
DASH гибче в поддержке кодеков, так как справляется с более широким спектром кодеков и контейнеров. HLS исторически был строже, особенно с новыми кодеками и контейнерами, хотя это улучшилось с появлением HLSv4 и сегментов Fragmented MP4.
Адаптивный битрейт — ключевая функция и DASH, и HLS, позволяющая клиентам переключаться между уровнями качества в зависимости от условий сети.
В DASH клиент использует MPD-файл, чтобы определить доступные битрейты и URL сегментов. Затем клиент переключается между разными представлениями (битрейтами) в зависимости от условий сети. MPD-файл описывает разные представления, а клиент динамически выбирает лучшее исходя из доступной полосы.
В 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 требует внимательного учёта технических требований и конкретного сценария.
| Характеристика | 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 различаются по нескольким ключевым аспектам:
DASH использует сегменты MP4 (ISOBMFF), которые эффективнее для произвольного доступа и стриминга поверх HTTP. HLS использует сегменты MPEG-2 Transport Stream (.ts) или Fragmented MP4 (.m4s), которые могут требовать больше накладных расходов.
И DASH, и HLS обычно поддерживают H.264 для видео и AAC для аудио. Однако DASH также поддерживает новые кодеки вроде VP9 и HEVC, а у HLS их поддержка ограничена.
ABR работает, позволяя клиентам переключаться между уровнями качества в зависимости от условий сети. DASH использует MPD-файлы, а HLS — файлы m3u8 для управления разными битрейтами и URL сегментов.
Ни один протокол не гарантирует низкую задержку сам по себе. Используйте короткие сегменты, выровненные ключевые кадры и функции low-latency HLS или DASH там, где они поддерживаются, затем измеряйте задержку glass-to-glass на вашем энкодере, CDN и плеере.
dcast.tv поддерживает и DASH, и HLS, предлагая гибкие и эффективные решения видеостриминга. Он помогает упростить процесс внедрения и обеспечить совместимость на разных платформах.
Выбирайте DASH, если нужна широкая поддержка кодеков и ниже задержка, или HLS, если нужна поддержка конкретной платформы (например, устройств Apple). Учитывайте конкретный сценарий, требования платформ и технические ограничения.
DASH и HLS — зрелые протоколы стриминга на базе HTTP. DASH даёт более широкую гибкость кодеков, а HLS — самую широкую поддержку устройств и экосистемы Apple; задержка и эффективность полосы зависят от ваших настроек сегментов и паковки, а не от названия протокола. Выбирайте HLS для максимального охвата, DASH — для гибкости кодеков, и обращайтесь к CMAF плюс расширениям низкой задержки, когда важна задержка glass-to-glass.
DASH и HLS различаются по нескольким ключевым аспектам: - **Поддержка кодеков**: DASH поддерживает более широкий спектр кодеков, включая новые вроде VP9 и HEVC. - **Формат сегментов**: DASH использует сегменты MP4, а HLS — MPEG-2 Transport Stream или Fragmented MP4. - **Задержка**: ни один протокол не является изначально более быстрым; всё зависит от длительности сегмента и расширений низкой задержки вроде LL-HLS или chunked CMAF. - **Эффективность полосы**: эффективность идёт от выбора кодека, размера сегмента и кэширования на CDN, а не от ярлыка протокола.
DASH использует сегменты MP4 (ISOBMFF), которые эффективнее для произвольного доступа и стриминга поверх HTTP. HLS использует сегменты MPEG-2 Transport Stream (`.ts`) или Fragmented MP4 (`.m4s`), которые могут требовать больше накладных расходов.
И DASH, и HLS обычно поддерживают H.264 для видео и AAC для аудио. Однако DASH также поддерживает новые кодеки вроде VP9 и HEVC, а у HLS их поддержка ограничена.
ABR работает, позволяя клиентам переключаться между уровнями качества в зависимости от условий сети. DASH использует MPD-файлы, а HLS — файлы m3u8 для управления разными битрейтами и URL сегментов.
Ни один протокол не гарантирует низкую задержку сам по себе. Задержка зависит от длительности сегмента и расширений низкой задержки вроде LL-HLS или chunked CMAF; используйте короткие, выровненные по ключевым кадрам сегменты и измеряйте задержку glass-to-glass на вашем энкодере, CDN и плеере.
Professional video streaming experts helping creators succeed.