HTTP를 전송 채널로 하는 라이브 스트리밍 프로토콜
HLS에서는 m3u8과 ts를 사용한다. m3u8은 영상 재생을 위한 메타정보이며, ts는 잘개 쪼개 놓은 미디어 파일이라고 보면 된다.
m3u8 파일에는 영상 재생을 위한 메타 정보들이 담겨있고, 이 메타 정보에는 대역폭별 m3u8 파일경로 혹은 ts 파일경로 등이 담겨있다.
ts 파일은 실제 스트리밍 영상 데이터이며, 시간 단위로 작게 쪼개져 있는 영상파일 조각이다.
HLS 스트리밍은 미디어 파일이 저장된 서버나 스트리밍이 제작된 서버에서 동작된다. HLS는 HTTP에 기반하기 때문에 모든 일반 웹 서버에서 스트리밍을 할 수 있다.
서버에서는 두 가지 주요 프로세스가 진행된다
인코딩:
비디오 데이터의 포맷을 다시 설정하여 모든 장치가 데이터를 인식하고 해석할 수 있게 합니다. HLS 은 H.264나 H.265 인코딩을 사용해야 합니다.
조각화:
비디오는 몇 초 길이의 세그먼트로 나뉩니다. 세그먼트 길이는 다양하지만 기본 길이는 6초입니다(2016년까지는 10초)비디오를 세그먼트로 나누는 것과 더불어 HLS는 비디오 세그먼트의 인덱스 파일을 만들어 세그먼트의 순서를 기록합니다.
HLS는 또한 480p, 720p, 1080p 등의 다양한 품질로 여러 세트의 세그먼트를 복제합니다.
인코딩된 비디오 세그먼트는 클라이언트 장치가 스트리밍을 요청하면 인터넷을 통해 클라이언트 장치로 전송
일반적으로 CDN(콘텐츠 전송 네트워크)이 여러 지역으로 스트리밍을 배포하는 것을 도와준다. CDN은 스트리밍을 캐시하여 클라이언트에 더 신속하게 전송한다
스트리밍을 받고 비디오를 재생하는 사용자 스마트폰이나 노트북 같은 장치
클라이언트 장치는 인덱스 파일을 참조하여 비디오를 순서대로 조합하고 필요에 따라 품질을 높이거나 낮춘다
서버에서 HLS 서비스가 시작되면 m3u8 파일은 분할된 파일이 생길 때마다 계속 주기적으로 바뀐다.
위의 그림을 보면 처음에는 2, 3, 4의 일련번호를 갖는 파일이 있다. #EXT-X-TARGETDURATION이 2로 명시되어 있으므로 2초 후에는 5번 파일이 생긴다. m3u8 파일의 뒤에 5번 파일을 가리키는 줄을 추가할 수도 있다. 하지만 줄을 추가하여 m3u8 파일에 명시된 콘텐츠가 늘어나면 5번 파일이 생기고 난 뒤에 스트리밍 요청을 하는 플레이어는 콘텐츠 재생을 위해 2, 3, 4, 5의 4개 파일을 요청하게 된다. 이는 초기 시작을 위한 대기 시간을 늘리고, 실제 동영상과 플레이어에서 재생하는 동영상의 시간 차이를 늘리게 된다. 그래서 일정한 개수의 파일만을 m3u8 파일에 명시하는 것을 권장한다. 이렇게 함으로써 각 사용자마다 동일한 적정 수준의 대기 시간을 제공할 수 있다.
대역폭 별로 화질이 다른 미디어 파일을 읽도록 하여 네트워크 상태가 좋고 나빠짐에 따라 유동적으로 화질이 달라지는 것이다. 사용자 입장에서는 영상 시청 중 네트워크 상태가 나빠져도 끊김 없이 영상 시청을 할 수 있다.