HLS란?

HLS(HTTP 라이브 스트리밍)은 가장 널리 사용되는 비디오 스트리밍 프로토콜로써, 비디오 파일을 다운로드할 수 있는 HTTP 파일 조각으로 나누고 HTTP 프로토콜을 이용하여 전송한다.

HLS의 장점

  • 모든 인터넷 연결 장치가 HTTP를 지원하기 때문에 전용 서버가 필요한 스트리밍 프로토콜보다 간단하게 실행할 수 있다.
  • 재생에 지장을 주지 않고 네트워크 상태에 따라 비디오 품질을 높이거나 낮출 수 있다. (적응형 비트 전송률 비디오 전송) 이 기능이 없으면 네트워크가 느려진 경우 비디오 재생이 완전히 멈출 수 있다.

HLS는 어떻게 작동하는가

서버 : HLS 스트리밍은 미디어 파일이 저장된 서버스트리밍이 제작된 서버에서 시작된다.

서버에서 두 가지 주요 프로세스가 진행된다.

  1. 인코딩 : 비디오 데이터의 포맷을 다시 설정하여 모든 장치가 데이터를 인식하고 해석할 수 있게 한다. HLS는 H.264나 H.265 인코딩을 사용해야 한다.
  2. 조각화 : 비디오는 몇 초 길이의 세그먼트로 나뉜다.
  3. 비디오를 세그먼트로 나누는 것과 더불어 HLS는 비디오 세그먼트의 인덱스 파일을 만들어 세그먼트의 순서를 기록한다.
  4. 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

동영상 플랫폼 이해하기 (1) - HLS

HLS (HTTP 라이브 스트리밍)이란 | Cloudflare

'Computer Science' 카테고리의 다른 글

Docker란?  (1) 2024.02.19
SSL이란?  (0) 2024.02.19
서버 이중화란? (HA, 클러스터링, Fail-Over)  (0) 2023.10.08

+ Recent posts