R2에서 HLS를 내보내는 방법.
HLS는 매니페스트와 조각 파일입니다. 도메인 뒤 버킷에 그 파일들이 있으면 R2는 충분히 좋은 원본 서버입니다. 파일 구조와 중요한 헤더, 그리고 대개 어디서 깨지는지를 정리했습니다.
짧은 답
R2는 HLS를 잘 내보냅니다. 어려운 쪽은 HLS를 만드는 일입니다.
HLS 스트림은 매체 조각(.ts 또는 .m4s)을 나열한 텍스트 매니페스트(.m3u8)와 화질별 하위 매니페스트로 이뤄집니다. 전부 평범한 오브젝트입니다. R2는 이를 전송료 $0으로 내보내고, 플레이어는 R2가 영상을 이해하지 못해도 알아서 화질을 전환합니다.
실제로 중요한 건 올바른 콘텐츠 타입, 일관된 경로 구조, 그리고 플레이어가 버킷 도메인과 다른 출처에 있을 때의 CORS입니다.
제대로 하려면
재생 성공을 가르는 세 가지.
깨진 R2 HLS 구성은 거의 전부 R2가 아니라 이 셋 중 하나에서 실패합니다.
콘텐츠 타입
매니페스트는 application/vnd.apple.mpegurl로, 조각은 video/mp2t 또는 video/iso.segment로 내보내야 합니다. octet-stream이면 일부 플레이어가 재생을 거부합니다.
상대 경로
조각 참조는 매니페스트 기준 상대 경로로 둡니다. 절대 URL은 호스트명을 박아 넣어서 도메인을 바꾸거나 서명하는 순간 깨집니다.
CORS
페이지와 버킷 도메인이 다르면 재생 출처의 GET을 허용하는 CORS 규칙이 필요합니다. 없으면 매니페스트 요청 단계에서 조용히 실패합니다.
파일 구조
버킷에 놓인 화질 단계.
| 오브젝트 | 용도 | 10분 원본 기준 크기 |
|---|---|---|
| master.m3u8 | 사용 가능한 화질 목록 | 1KB 미만 |
| 1080p/index.m3u8 | 1080p 조각 목록 | 수 KB |
| 1080p/seg-*.ts | 1080p 매체 조각 | 약 750MB |
| 720p/seg-*.ts | 720p 매체 조각 | 약 350MB |
| 480p/seg-*.ts | 480p 매체 조각 | 약 150MB |
| source.mp4 | 보관하는 원본 | 촬영 방식에 따라 다름 |
1080p 기준 시간당 약 1.5GB와 3단계 화질을 가정한 값입니다. 원본과 변환본을 함께 두기 때문에 영상 라이브러리의 청구 용량이 원본 용량보다 커집니다.
자주 묻는 질문
R2에서 HLS를 다룰 때의 질문.
HLS를 위해 R2에 특별한 설정이 필요한가요?
R2 전용 기능은 필요 없습니다. 중요한 건 오브젝트의 콘텐츠 타입, 커스텀 도메인, CORS입니다. R2는 이 파일들을 일반 오브젝트로 다룹니다.
HLS에 서명 주소를 쓸 수 있나요?
가능하지만 매니페스트뿐 아니라 모든 조각 요청이 인가돼야 합니다. 보통 오브젝트마다 미리 서명하는 대신 엣지 계층에서 서명합니다.
DASH도 되나요?
같은 방식으로 됩니다. DASH는 MPD 매니페스트와 조각이고 R2는 동일하게 내보냅니다.
인코딩은 어디서 하나요?
R2 밖에서 합니다. FFmpeg를 직접 돌리거나, 서비스가 화질 단계를 만들어 버킷에 기록합니다. NULX는 후자입니다.
출처
요금 확인일 2026년 9월 10일 · 페이지 갱신일 2026년 9월 10일
다음 단계
파이프라인 구축을 건너뛰기.
NULX가 HLS 결과물을 만들어 고객 R2 버킷에 기록합니다. 파일은 그대로 갖고, 인코딩 인프라만 덜어 냅니다.