HLS란?
HLS(HTTP 라이브 스트리밍)은 가장 널리 사용되는 비디오 스트리밍 프로토콜로써, 비디오 파일을 다운로드할 수 있는 HTTP 파일 조각으로 나누고 HTTP 프로토콜을 이용하여 전송한다.
HLS의 장점
- 모든 인터넷 연결 장치가 HTTP를 지원하기 때문에 전용 서버가 필요한 스트리밍 프로토콜보다 간단하게 실행할 수 있다.
- 재생에 지장을 주지 않고 네트워크 상태에 따라 비디오 품질을 높이거나 낮출 수 있다. (적응형 비트 전송률 비디오 전송) 이 기능이 없으면 네트워크가 느려진 경우 비디오 재생이 완전히 멈출 수 있다.
HLS는 어떻게 작동하는가
서버 : HLS 스트리밍은 미디어 파일이 저장된 서버나 스트리밍이 제작된 서버에서 시작된다.
서버에서 두 가지 주요 프로세스가 진행된다.
- 인코딩 : 비디오 데이터의 포맷을 다시 설정하여 모든 장치가 데이터를 인식하고 해석할 수 있게 한다. HLS는 H.264나 H.265 인코딩을 사용해야 한다.
- 조각화 : 비디오는 몇 초 길이의 세그먼트로 나뉜다.
- 비디오를 세그먼트로 나누는 것과 더불어 HLS는 비디오 세그먼트의 인덱스 파일을 만들어 세그먼트의 순서를 기록한다.
- HLS는 또한 480p, 720p, 1080p 등의 다양한 품질로 여러 세트의 세그먼트를 복제한다.
배포 : 인코딩된 비디오 세그먼트는 클라이언트 장치가 스트리밍을 요청하면 인터넷을 통해 클라이언트 장치로 전송된다.
클라이언트 장치 : 클라이언트 장치는 인덱스 파일을 참조하여 비디오를 순서대로 조합하고 필요에 따라 품질을 높이거나 낮춘다.
HLS로 영상을 인코딩 할 경우 m3u8 확장자와 ts 확장자를 가진 파일이 생성된다.
- m3u8 파일은 영상 재생을 위한 메타 정보들이 담겨 있다.
- ts 파일은 실제 스트리밍 영상 데이터이며, 시간 단위로 작게 쪼개져 있다.
m3u8 파일 예시
아래는 내가 개발중인 서비스의 영상 중 master m3u8 파일을 가져와 봤다.
3가지의 품질로 영상이 준비되어 있고, bandwidth에 따라서 품질을 선택할 수 있도록 작성되어 있다.
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=5640800,RESOLUTION=1080x1920,CODECS="avc1.640028,mp4a.40.2"
1080playlist.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2855600,RESOLUTION=720x1280,CODECS="avc1.64001f,mp4a.40.2"
720playlist.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1170400,RESOLUTION=480x854,CODECS="avc1.64001f,mp4a.40.2"
480playlist.m3u8
마무리
여러 영상 스트리밍 서비스를 둘러봤을 때 가장 범용적으로 사용하는 HLS 방식의 영상 스트리밍에 대해 간단히 알아봤다. 많은 기업이 HLS 방식을 이용한 스트리밍을 활용하고 있는 만큼 장점이 확실한 것 같다. (어댑티브 스트리밍, 여러 장치 지원)
Reference
'Computer Science' 카테고리의 다른 글
Docker란? (1) | 2024.02.19 |
---|---|
SSL이란? (0) | 2024.02.19 |
서버 이중화란? (HA, 클러스터링, Fail-Over) (0) | 2023.10.08 |