M3U8 / HLS
Apple이 만들었고, 모든 Apple 기기가 재생하지만, 그중 무엇도 저장은 못한다.
.m3u8 파일은 동영상이 아니라 재생목록입니다 — 순서대로 가져와야 할 수천 개의 작은 조각을 나열한, 겨우 몇 킬로바이트짜리 텍스트입니다. 이 설계 덕분에 HLS는 모든 Apple 기기에서 흠잡을 데 없이 재생되지만, "이 파일 저장하기"를 누르면 텍스트 문서 하나가 나옵니다. 이걸 다운로드한다는 건 모든 조각을 일일이 가져와서 애초에 존재한 적 없던 파일을 새로 조립한다는 뜻입니다.
2026년 7월 30일
별도 앱 없이 열리는지
HLS는 Apple 자체 사양이라 Safari, AVPlayer, AirPlay까지 어디서나 최고 수준으로 지원됩니다. 시스템 어디에서도 지원하지 않는 건 라이브 스트림을 디스크 위의 파일로 바꾸는 일입니다. 재생하는 것과 보관하는 것은 완전히 다른 문제입니다.
핵심 정보
| 정식 명칭 | HTTP Live Streaming; 재생목록 자체는 UTF-8로 된 M3U |
|---|---|
| 종류 | 텍스트 재생목록 형태로 전달되는 스트리밍 프로토콜 |
| 확장자 | .m3u8(재생목록), .ts나 .m4s(그 목록이 가리키는 조각들) |
| 공개 | 2009년, Apple; 2017년 RFC 8216으로 표준화 |
| 일반적인 조각 길이 | 각 2~10초 — 한 시간짜리 영상이 수백에서 수천 개의 파일이 됨 |
| 마스터 재생목록과 미디어 재생목록 | 마스터는 화질 단계를 나열하고, 각 화질은 실제 조각들이 담긴 미디어 재생목록을 가리킴 |
| 조각 안의 영상 | H.264나 HEVC, 드물게 AV1 |
| 라이브 스트림 | 재생목록이 몇 초마다 다시 불러와지며 방송이 계속되는 동안 계속 길어짐 |
책이 아니라 목차일 뿐
.m3u8을 텍스트 편집기로 열어보면 헤더 몇 줄, 매개변수 몇 개, 그리고 긴 주소 목록이 전부입니다. 그게 파일의 전부입니다. 진짜 동영상은 다른 곳에 있고, 각각 몇 초 분량으로 잘려서 서버에 수천 개의 개별 작은 파일로 놓여 있습니다.
플레이어는 이 목록을 읽고, 처음 몇 개 조각을 가져와서 재생을 시작한 다음, 계속 앞서서 미리 가져옵니다. 연결이 느려지면 마스터 재생목록에 나열된 더 낮은 화질의 버전 — 다른 비트레이트로 만들어진, 완전히 다른 조각 세트 — 으로 전환하고, 이걸 조각 사이의 경계에서 처리하기 때문에 화면이 멈추는 대신 화질만 바뀌는 것처럼 보입니다. 이 적응형 전환 능력이 바로 이 형식이 널리 쓰이게 된 이유입니다.
이는 사람들을 놀라게 하는 사실도 설명해 줍니다 — 손에 쥘 수 있는 단일 파일이라는 게 애초에 없다는 것입니다. 지금 보고 있는 그 영화는 어디에도 하나의 객체로서 존재하지 않습니다. 수천 개의 조각과 그걸 재생하는 방법을 담은 지침서, 그게 전부입니다.
저장하면 텍스트 파일이 나오는 이유
실제로 저장한 게 바로 그것이기 때문입니다. 브라우저는 사용자가 준 주소로 요청을 보냈고, 4킬로바이트짜리 재생목록을 받아서 디스크에 그대로 적었을 뿐입니다. 실제로 시청한 내용은 전부 저장 작업이 전혀 알지 못하는 수천 개의 개별 요청을 통해 도착한 것입니다.
HLS를 제대로 다운로드한다는 건 플레이어가 하는 일을 디스크에 대고 그대로 하는 것을 뜻합니다 — 재생목록을 읽고, 화질을 하나 고르고, 모든 조각을 순서대로 가져온 다음, 이걸 하나의 컨테이너로 이어 붙입니다. 이 마지막 단계를 재다중화라고 부릅니다 — 영상과 오디오는 재인코딩되지 않고, 그저 탐색이 가능하도록 제대로 된 인덱스를 갖춘 하나의 MP4로 다시 기록될 뿐입니다.
이걸 생각보다 어렵게 만드는 요소가 두 가지 있습니다. 조각의 주소는 대개 상대 경로이고 세션마다 바뀌기 때문에, 한 시간 전에 받아온 목록은 이미 죽어 있을 수 있습니다. 그리고 스트림이 재생목록에서 참조하는 키로 암호화되어 있는 경우가 흔한데, 그 키는 별도로 전달되고 재생 도중에도 계속 바뀝니다.
기기로 가져오는 법
보관할 권리가 있는 스트림에 한해서입니다 — 직접 녹화한 것, 본인 명의의 IPTV 구독, 방송사가 직접 다운로드를 제공하는 경우처럼요. 아래 내용은 그 원리가 어떻게 동작하는지에 대한 설명이지, 아무 데나 이걸 써도 된다는 허락이 아닙니다.
- 다운로드 엔진이 조각들을 처리하게 하기
수천 개의 파일을 가져와서 재다중화하는 일, 이게 바로 FoxDL의 다운로더가 HLS 소스를 만났을 때 하는 작업입니다 — 재생목록을 따라가며 조각을 병렬로 끌어온 다음, 일반 파일처럼 탐색되는 MP4 하나를 만들어냅니다. 결국 손에 남는 건 조각들이 담긴 폴더가 아니라 파일 하나입니다.
- 직접 파일이 있다면 그걸 받기
많은 사이트가 HLS와 일반적인 프로그레시브 MP4를 함께 제공합니다. MP4는 요청 한 번, 파일 하나로 끝나고 재조립이 필요 없습니다 — 선택할 수 있다면 언제나 더 나은 쪽입니다.
- 일부는 보관할 수 없다는 사실 받아들이기
FairPlay나 Widevine 같은 DRM으로 보호된 스트림은 종단 간 암호화되어 있고 설계상 다운로드가 불가능합니다. 어떤 도구도 이걸 바꾸지 못하고, 바꿀 수 있다고 주장하는 도구는 뭔가에 대해 거짓말을 하고 있는 것입니다.
HLS 다운로드에서 흔히 잘못되는 지점
재다중화 없이 조각을 그냥 이어 붙이기만 하면 인덱스 없는 파일이 만들어집니다. 처음부터만 재생되고 어디로도 이동할 수 없습니다. 재다중화가 이걸 고쳐주는 인덱스를 새로 씁니다.
라이브 재생목록에는 끝이 없습니다 — 계속 자라날 뿐입니다. 이걸 다운로드한다는 건 사실 녹화하는 것이고, 파일이 끝나서가 아니라 사용자가 멈춰야 끝납니다.
재생목록 주소는 대개 서명이 걸려 있고 유효 시간이 정해져 있습니다. 오늘 아침에 저장해 둔 .m3u8이 오후가 되면 아무것도 가리키지 못하는 경우가 흔합니다.
이 형식에 관한 질문
이 정보의 출처
- RFC 8216 — HTTP Live Streaming IETF
- HTTP Live Streaming Apple Developer