HLS와 DASH 비교 — 매니페스트, 세그먼트, DRM, 저지연
HLS와 DASH를 매니페스트 문법, 세그먼트 형식, ABR, DRM, 저지연 확장 기준으로 비교합니다. 두 프로토콜이 fMP4를 사용할 때 CMAF 미디어 세그먼트를 공유할 수 있는 조건과 Apple 플랫폼의 HLS 요구사항도 함께 설명합니다. LL-HLS는 HTTP/2 Push가 아니라 blocking playlist reload와 preload hint를 사용한다는 점을 현재 사양에 맞춰 정리했습니다.
목차(20개 항목)
- 0. 핵심 명제 — 프로토콜보다 호환 조건을 먼저 본다
- 1. 한눈 비교 매트릭스
2. 매니페스트 — .m3u8(텍스트) vs .mpd(XML)
3. 세그먼트 — MPEG-TS(.ts) vs fMP4/CMAF(.m4s)
- 4. ABR 동작 — 화질/오디오 전환 방식의 차이
- 5. DRM — FairPlay vs Widevine/PlayReady, 그리고 CENC
- 7. CMAF — 하나의 fMP4로 HLS·DASH 둘 다
- 8. 플랫폼 지원 — 제품별 지원표가 기준이다
- 9. 실무 선택 가이드
- 10. 한 장 요약
- 11. 한 줄 결론
- 관련 글
- 참고 자료
"iOS 앱이랑 웹, 스마트TV까지 다 지원해야 하는데 HLS로 갈까요, DASH로 갈까요?" 라이브든 VOD든 스트리밍 아키텍처를 잡을 때 자주 나오는 질문입니다. 답은 기기·플레이어·코덱·DRM 지원표에 따라 달라집니다. 조건이 맞으면 CMAF 미디어를 공유하고 HLS와 DASH 매니페스트를 함께 제공할 수 있지만, 모든 서비스가 한 벌로 통합되는 것은 아닙니다.
이 글은 HLS와 DASH를 매니페스트·세그먼트·ABR·DRM·저지연 다섯 축으로 비교하고, 둘을 하나로 합친 CMAF, 그리고 실무 선택 기준까지 정리합니다. (라이브 송출 파이프라인 자체는 #49에서 다뤘으니, 여기선 "패키징 산출물" 관점에 집중합니다.)
0. 핵심 명제 — 프로토콜보다 호환 조건을 먼저 본다
HLS와 DASH는 모두 HTTP 기반 적응형 스트리밍에 쓰이지만 매니페스트 문법과 클라이언트 생태계가 다릅니다. 둘 다 호환되는 CMAF 미디어를 참조하도록 구성할 수 있습니다. 다만 코덱 프로필, 트랙 구성, 세그먼트 경계, 암호화 방식과 각 클라이언트의 지원 범위가 맞아야 같은 미디어 파일을 공유할 수 있습니다.
먼저 흔한 오해와 정정:
| 흔한 오해 | 정확한 이해 |
|---|---|
HLS는 .ts, DASH는 .m4s로 포맷이 다르다 | HLS도 fMP4를 지원합니다. 호환 조건을 맞추면 CMAF 미디어를 공유할 수 있습니다. |
| DASH가 더 최신이라 더 좋다 | 우열보다 대상 기기, 플레이어와 DRM 조합이 중요합니다. Apple의 기본 재생 경로는 HLS입니다. |
| HLS는 A/V를 항상 묶어 보낸다 | MPEG-TS로 묶을 수도 있고, 대체 오디오·자막을 별도 Rendition으로 제공할 수도 있습니다. |
| LL-HLS는 HTTP/2 Push로 저지연을 낸다 | 현재 사양은 Partial Segment, Blocking Playlist Reload, Preload Hint 등을 사용합니다. |
| CMAF만 쓰면 DRM도 한 번에 통일된다 | CMAF는 미디어 형식을 정합니다. 공통 암호화 스킴과 DRM별 신호, 키 시스템 호환성은 별도로 맞춰야 합니다. |
1. 한눈 비교 매트릭스
| 항목 | HLS | DASH |
|---|---|---|
| 개발/표준 | Apple이 개발, IETF RFC 8216로 공개 | MPEG / ISO·IEC 23009-1 |
| 매니페스트 | .m3u8 (텍스트) | .mpd (XML) |
| 전통 세그먼트 | MPEG-TS .ts | fMP4 .m4s |
| 현대 세그먼트 | fMP4/CMAF .m4s(v7+) | fMP4/CMAF .m4s |
| A/V 구성 | 전통은 muxed, fMP4는 분리 가능 | AdaptationSet으로 비디오/오디오/자막 분리 |
| Apple 기기 | ✅ AVFoundation·Safari의 기본 경로 | 플레이어·OS 버전·DRM에 따라 별도 구현 필요 |
| DRM | FairPlay Streaming 등 | CENC 기반 DRM 구성 등에 사용 |
| 코덱 | 사양과 클라이언트 지원 범위 안에서 선택 | 사양과 클라이언트 지원 범위 안에서 선택 |
| 선택 기준 | Apple 재생 경로, CDN·플레이어 지원 | 웹·TV 플레이어, DRM·기기 지원 |
핵심 패턴: 본질(조각+HTTP 배달)은 같고, 문법·포맷·DRM 생태계가 다르다. 그 차이를 하나씩 봅니다.
2. 매니페스트 — .m3u8(텍스트) vs .mpd(XML)
가장 눈에 띄는 차이입니다. HLS는 한 줄씩 읽는 텍스트, DASH는 트리 구조의 XML입니다.
HLS — 마스터 + 미디어 2단 구조
마스터는 "어떤 화질이 있는지"의 목록(EXT-X-STREAM-INF에 BANDWIDTH/RESOLUTION/CODECS)입니다. 각 화질의 실제 세그먼트 목록은 별도 미디어 플레이리스트에 있습니다. 플레이어는 선택한 Variant Stream의 미디어 플레이리스트를 읽고 필요할 때 다른 Variant로 전환합니다.
DASH — MPD 한 파일에 전체 구조
DASH는
AdaptationSet과Representation으로 선택 가능한 미디어 구성을 표현합니다. HLS도EXT-X-MEDIA와 Variant Stream으로 대체 오디오·자막 조합을 표현할 수 있습니다. 실제 구성 난이도는 플레이어와 패키저가 해당 기능을 얼마나 잘 지원하는지에 좌우됩니다.
3. 세그먼트 — MPEG-TS(.ts) vs fMP4/CMAF(.m4s)
전통 HLS: MPEG-TS
fMP4 / CMAF (.m4s)
ISO BMFF(MP4) 기반의 "조각난 MP4"입니다. 초기화 세그먼트와 미디어 조각이 분리됩니다.
- moov(init): 코덱·해상도 등 전역 정보. 재생 시작 전 한 번만 받습니다.
- moof + mdat(각 조각): moof는 이 조각의 타임스탬프/샘플 정보, mdat는 실제 H.264/H.265 NAL.
- 비디오·오디오를 별도 트랙/별도 파일로 두기 좋아, 분리·다국어에 유리하고 오버헤드도 작습니다.
RFC 8216은 HLS 미디어 세그먼트 형식으로 Fragmented MPEG-4를 정의합니다. 이 공통 기반 덕분에 HLS와 DASH가 호환되는 CMAF 미디어를 참조하도록 설계할 수 있습니다.
4. ABR 동작 — 화질/오디오 전환 방식의 차이
ABR(적응형 비트레이트)의 "여러 화질을 미리 만들어 두고 플레이어가 고른다"는 원리는 같지만(자세한 건 #49), 전환 절차가 다릅니다.
두 방식 모두 비디오 품질과 대체 오디오를 나눠 구성할 수 있습니다. 전환 품질은 매니페스트 문법만이 아니라 키프레임 정렬, 타임라인, 플레이어 ABR 로직에 달려 있습니다.
5. DRM — FairPlay vs Widevine/PlayReady, 그리고 CENC
콘텐츠 보호가 둘을 가르는 가장 현실적인 벽입니다.
| 항목 | HLS | DASH |
|---|---|---|
| 대표 구성 | FairPlay Streaming 등 | CENC 기반 Widevine·PlayReady 등 |
| 암호화·신호 | EXT-X-KEY와 선택한 보호 방식 | CENC 보호 스킴과 ContentProtection 등 |
| 키 전달 | 키 포맷과 DRM 시스템에 따라 다름 | DRM 시스템과 플레이어에 따라 다름 |
| 브라우저 API | EME를 사용하는 플레이어 구현 가능 | EME를 사용하는 플레이어 구현 가능 |
CMAF 미디어를 공유하려면 각 대상 클라이언트와 DRM 시스템이 같은 암호화 스킴, 코덱 프로필과 트랙 구성을 지원해야 합니다. EME는 브라우저와 Content Decryption Module 사이의 API를 정의할 뿐, 특정 DRM이나 모든 조합의 상호운용성을 보장하지 않습니다. 지원표를 확인하지 않고
cbcs하나로 통일하면 된다고 단정하면 안 됩니다.
6. 저지연 — LL-HLS vs LL-DASH (HTTP/2 Push 정정 포함)
둘 다 "세그먼트를 더 잘게 쪼개 빨리 흘린다"는 방향은 같습니다.
LL-HLS
- Partial Segment(
EXT-X-PART): 전체 세그먼트가 닫히기 전에 더 짧은 파트를 공개합니다. 파트 길이는 지연 목표와 인코더·CDN·플레이어 제약에 맞춰 정합니다. - Blocking Playlist Reload: 플레이어가
?_HLS_msn=&_HLS_part=로 "다음 파트 나오면 응답해"라고 요청하면, 서버가 응답을 붙들었다가(hold) 새 파트 생기는 즉시 돌려줌 → 폴링 대기 제거. - Preload Hint(
EXT-X-PRELOAD-HINT): 곧 나올 파트 URL을 미리 알려 선요청. - Rendition Report(
EXT-X-RENDITION-REPORT): 다른 화질의 최신 위치를 매니페스트에 같이 실어, 화질 전환 시 추가 왕복 제거.
현재 LL-HLS 사양을 설명할 때 HTTP/2 Push를 핵심 메커니즘으로 소개하면 안 됩니다. Apple 문서와 HLS 2nd Edition 초안은 Partial Segment, Blocking Playlist Reload, Preload Hint 등을 정의합니다.
LL-DASH
저지연 DASH 구성은 CMAF Chunk를 세그먼트 완료 전부터 전달하고, MPD의 가용성 정보로 플레이어가 요청 시점을 계산하게 할 수 있습니다. 위 availabilityTimeOffset 값은 예시이며 실제 값은 패키저·오리진·플레이어 설정과 일치해야 합니다.
두 방식 모두 일반 세그먼트 기반 재생보다 지연을 줄일 수 있지만, 결과를 고정된 초 단위로 보장하지는 않습니다. 인코더 버퍼, GOP, 패키저, 오리진·CDN 전달, 플레이어 버퍼를 함께 측정해야 합니다. 프로토콜 선택의 큰 그림은 #40에서 다룹니다.
7. CMAF — 하나의 fMP4로 HLS·DASH 둘 다
CMAF는 ISO Base Media File Format에 기반한 미디어 프로필과 Fragment 구조를 정의합니다. HLS나 DASH 매니페스트 자체를 정의하지는 않습니다. 양쪽 규격과 대상 클라이언트의 공통 조건을 만족하면 두 매니페스트가 같은 CMAF 미디어를 참조할 수 있습니다.
- 공유 가능성: 호환되는 인코딩 결과를 HLS와 DASH가 함께 참조할 수 있습니다.
- 저장·캐시 단순화: 실제로 파일을 공유하면 중복 산출물을 줄일 수 있습니다.
- 전제 조건: 코덱·프로필, 타임스케일, 세그먼트 경계, 트랙 구성, 암호화 스킴과 클라이언트 지원이 맞아야 합니다. 하나라도 다르면 산출물을 나눌 수 있습니다.
따라서 CMAF 미디어 + HLS·DASH 매니페스트 동시 제공은 유용한 선택지이지, 모든 범용 OTT의 고정 정답은 아닙니다.
8. 플랫폼 지원 — 제품별 지원표가 기준이다
| 플랫폼 | HLS | DASH |
|---|---|---|
| iOS / macOS Safari | ✅ 기본 재생 경로 | OS·브라우저·플레이어·DRM 조합별 support matrix와 재생 시험으로 결정 |
| Android 앱 | 플레이어 구현에 따라 지원 | 플레이어 구현에 따라 지원 |
| 데스크톱 Chrome/Firefox | MSE 기반 플레이어로 지원 가능 | MSE 기반 플레이어로 지원 가능 |
| 스마트TV·셋톱 | 모델·연식·플레이어별 확인 | 모델·연식·플레이어별 확인 |
Apple의 AVFoundation과 Safari 기본 재생 경로를 사용하려면 HLS가 우선 선택입니다. 반면 웹·Android·TV는 운영체제 이름만으로 지원을 판단할 수 없습니다. 실제 브라우저 버전, MSE/EME, 코덱, DRM, 플레이어 SDK와 기기 인증 범위를 표로 관리해야 합니다.
9. 실무 선택 가이드
| 상황 | 권장 |
|---|---|
| Apple 기본 재생 경로 필요 | HLS 포함 |
| MSE/EME 기반 웹 플레이어 | 지원 코덱·DRM을 확인해 HLS/DASH 선택 |
| 다국어·다중 자막 | 매니페스트보다 플레이어·패키저의 실제 지원 검증 |
| 공통 CMAF 조건 충족 | 공통 미디어 + HLS·DASH 매니페스트 검토 |
| 저지연 라이브 | 지연 예산과 CDN·플레이어 지원에 따라 LL-HLS/LL-DASH/WebRTC 비교 |
10. 한 장 요약
| 개념 | 한 줄 |
|---|---|
| HLS | Apple이 개발하고 RFC 8216로 공개한 .m3u8 기반 스트리밍 프로토콜 |
| DASH | ISO/IEC 23009-1의 .mpd 기반 스트리밍 표준 |
| 세그먼트 | 전통 TS(.ts) vs fMP4(.m4s) — HLS도 fMP4 지원 |
| ABR | HLS=미디어 플레이리스트 교체 / DASH=Representation 교체(A/V 독립) |
| DRM | 매니페스트와 미디어 암호화, DRM 신호, 클라이언트 키 시스템을 함께 확인 |
| 저지연 | LL-HLS(EXT-X-PART+Blocking+Preload, Push는 제거됨) / LL-DASH(CMAF chunked) |
| CMAF | 호환 조건이 맞을 때 HLS·DASH가 공통 미디어를 참조할 수 있게 하는 형식 |
| 결론 | 대상 기기·플레이어·코덱·DRM 지원표로 결정 |
11. 한 줄 결론
HLS와 DASH 중 하나를 이름만 보고 고르지 말고 대상 기기, 플레이어, 코덱과 DRM 조합을 먼저 검증해야 합니다. 그 공통 조건이 맞을 때 CMAF 미디어를 공유하고 HLS·DASH 매니페스트를 함께 제공하면 중복을 줄일 수 있습니다.
관련 글
- #49 라이브 스트리밍 송출 파이프라인 — RTMP·ABR·m3u8·6초 지연 — 이 글의 "패키징"이 만들어지기까지의 서버 파이프라인
- #40 라이브 스트리밍 프로토콜 선택 — HLS / LL-HLS / WebRTC 의사결정 — 지연 예산 기준 프로토콜 선택
- #15 M3U8과 TS 파일의 모든 것 — HLS Deep Dive — HLS 세그먼트·플레이리스트 내부
- #47 WebRTC 벤더 지형도 — "Flash 이후 표준"이 어떻게 갈렸나
- #43 Agora 자체 코덱 vs Web SDK, SD-RTN, FEC — 실시간 RTC 쪽 네트워크 레이어
참고 자료
- RFC 8216 — HTTP Live Streaming — HLS 사양
- HLS 2nd Edition (RFC 8216bis) draft — LL-HLS(EXT-X-PART 등) 포함 개정안
- ISO/IEC 23009-1 — Dynamic Adaptive Streaming over HTTP (DASH) — DASH 국제표준
- ISO/IEC 23000-19 — Common Media Application Format (CMAF) — CMAF 표준
- Apple — HTTP Live Streaming — HLS·LL-HLS 공식 문서
- Apple — CMAF with HLS — HLS에서 CMAF 사용
- Apple — Enabling Low-Latency HTTP Live Streaming
- ISO Common Encryption (CENC) — ISO/IEC 23001-7 — cenc/cbcs 보호 스킴
- W3C — Encrypted Media Extensions — 웹 DRM 연동 API
- Apple — FairPlay Streaming Overview — FairPlay Streaming 구성