멀티미디어
HLS
다른 이름: HTTP Live Streaming , HLS.js
정의
HTTP Live Streaming. Apple이 2009년 개발한 HTTP 기반 적응형 스트리밍 프로토콜. M3U8 플레이리스트 + TS/fMP4 세그먼트 구조. ABR(Adaptive Bitrate) 지원으로 네트워크 상태에 따라 화질 자동 조절. IETF RFC 8216 표준. 가장 널리 사용되는 스트리밍 프로토콜
상세 설명
기술 스펙
- 플레이리스트: M3U8 (UTF-8 인코딩 M3U, .m3u8 확장자)
- 마스터 플레이리스트: #EXT-X-STREAM-INF로 다중 비트레이트 변형 정의
- 미디어 플레이리스트: #EXTINF로 세그먼트 목록, #EXT-X-TARGETDURATION (목표 세그먼트 길이)
- 세그먼트: MPEG-TS(.ts) 또는 fMP4(.m4s) 컨테이너
- 세그먼트 길이: 권장 6초 (2~10초), 저지연(LL-HLS)은 1초 이하
- LL-HLS(Low-Latency): #EXT-X-PART, Partial Segments로 0.2초 단위 전송 (지연 2~3초)
- DRM: FairPlay Streaming (Apple), AES-128 암호화 (#EXT-X-KEY)
- Byte-Range: 단일 파일을 범위로 분할 (#EXT-X-BYTERANGE)
실무 활용
- Apple 생태계: Safari, iOS, tvOS, macOS 네이티브 지원
- YouTube, Netflix, Twitch: HLS 또는 DASH 병행 (Apple 기기는 HLS)
- Facebook Live, Instagram Live: 모바일 라이브 스트리밍
- Cloudflare Stream, AWS Elemental: CDN HLS 딜리버리
장점
- HTTP 기반: CDN 캐싱, 방화벽/NAT 투과, 기존 웹 인프라 활용
- ABR: 네트워크 대역폭에 따라 화질 자동 전환
- Apple 네이티브: iOS/Safari에서 <video> 태그 직접 재생
- 표준화: IETF RFC 8216 (2017)
- LL-HLS: 저지연 개선 (2~3초)
단점 및 제약
- 높은 지연: 일반 HLS 10~30초 (세그먼트 3~4개 버퍼링)
- TS 오버헤드: fMP4 대비 5~10% 더 큼 (레거시 호환)
- LL-HLS 복잡도: 인코더/서버 구현 복잡, CDN 지원 제한
- Android 파편화: ExoPlayer 필요 (네이티브 MediaPlayer는 4.1~4.4만 지원)
호환성
iOS, Safari, Edge, Chrome (MSE+HLS.js), Android (ExoPlayer), VLC, FFmpeg, Video.js, Shaka Player
표준 정보
표준화 기구: IETF RFC 8216 (2017), Apple (오리지널)
출시 연도: 2009년