brunch

우리가 스트리밍 영상을 보는 방법 - HLS가 뭐야?

우리가 영화를 10초씩 건너뛰고, 버퍼링 없이 영화를 볼 수 있는 방법.

by PUMPKINMAN

90년대 후반부터 2000년대 초반까지, 초고속 인터넷 보급이 확대되면서 인터넷에서 동영상이라는 것들이 조금씩 확산되기 시작했다. 아마 현 30~40대 분들은 아시겠지만, 영상을 보기위해서는 '버퍼링'이라는 절차를 거쳐야 했고, 모든 영상은 항상 처음부터 감상을 해야했다. 영상을 감상함과 동시에 영상을 컴퓨터 내 임시 보관소로 다운로드를 했기 때문이다.


그러나 오늘날 우리는 이렇게 영상을 보지 않습니다. HLS라는게 등장했기 때문입니다.




HLS(HTTP Live Streaming)란 무엇인가?

HLS는 애플(Apple)에서 개발한 비디오 스트리밍 프로토콜로, 인터넷을 통해 실시간으로 비디오 콘텐츠를 제공할 때 사용됩니다. 쉽게 말해, 우리가 유튜브에서 영상을 시청할 때 쓰이는 기술 중 하나입니다.


✅ HLS는 어떻게 작동하나요?

HLS는 비디오를 작은 조각으로 나누어 전송하는 방식입니다. 또한 네트워크 속도에 따라 화질을 다르게 내보낼 수 있는 "Adaptive Streaming"을 지원하는 프로토콜 입니다. 인터넷 속도가 느리면 저화질로, 속도가 빠르면 고화질로 볼 수 있다는 의미 입니다.



✅ HLS의 구조

HLS의 최종 파일은 m3u8 형태입니다. m3u8은 플레이어가 재생할 비디오 URL의 경로가 담긴 파일로, 일반 텍스트 파일과 동일 합니다. m3u8안에는 화질별 영상에 대한 경로가 있고, 그 화질별 m3u8 파일에는 개별 영상 조각에 대한 경로 정보가 담겨 있습니다.


hls_구조.png HLS의 구조 ⓒ PUMPKINMAN의 광고 이야기


✅ m3u8파일을 뜯어보자

실제 m3u8 파일을 열어보면 대략 아래와 같은 형태로 되어있습니다. (일부 내용 생략)

(출처: extension://emnphkkblegpebimobpbekeedfgemhof/player.html#https://demo.unified-streaming.com/k8s/features/stable/video/tears-of-steel/tears-of-steel.ism/.m3u8)


#EXTM3U

#EXT-X-VERSION:1


#EXT-X-STREAM-INF:BANDWIDTH=493000,CODECS="mp4a.40.2,avc1.66.30",RESOLUTION=224x100

tears-of-steel-audio_eng=64008-video_eng=401000.m3u8


#EXT-X-STREAM-INF:BANDWIDTH=932000,CODECS="mp4a.40.2,avc1.66.30",RESOLUTION=448x200

tears-of-steel-audio_eng=128002-video_eng=751000.m3u8


#EXT-X-STREAM-INF:BANDWIDTH=1197000,CODECS="mp4a.40.2,avc1.77.31",RESOLUTION=784x350

tears-of-steel-audio_eng=128002-video_eng=1001000.m3u8


#EXT-X-STREAM-INF:BANDWIDTH=1727000,CODECS="mp4a.40.2,avc1.100.40",RESOLUTION=1680x750

tears-of-steel-audio_eng=128002-video_eng=1501000.m3u8


#EXT-X-STREAM-INF:BANDWIDTH=2468000,CODECS="mp4a.40.2,avc1.100.40",RESOLUTION=1680x750

tears-of-steel-audio_eng=128002-video_eng=2200000.m3u8


BANDWIDTH(대역폭/인터넷 속도)가 특정 속도일때 재생할 파일의 경로를 표기하고 있는 것을 볼 수 있습니다. 여기서 가장 마지막 파일, 즉 고화질 m3u8을 열어보면, 아래와 같이 되어있습니다.



#EXTM3U

#EXT-X-VERSION:1

## Created with Unified Streaming Platform (version=1.13.0-29687)

#EXT-X-MEDIA-SEQUENCE:1

#EXT-X-TARGETDURATION:4

#USP-X-TIMESTAMP-MAP:MPEGTS=900000,LOCAL=1970-01-01T00:00:00Z

#EXTINF:4, no desc

tears-of-steel-audio_eng=128002-video_eng=2200000-1.ts

#EXTINF:4, no desc

tears-of-steel-audio_eng=128002-video_eng=2200000-2.ts

#EXTINF:4, no desc

tears-of-steel-audio_eng=128002-video_eng=2200000-3.ts

#EXTINF:4, no desc

tears-of-steel-audio_eng=128002-video_eng=2200000-4.ts

#EXTINF:4, no desc

tears-of-steel-audio_eng=128002-video_eng=2200000-5.ts

#EXTINF:4, no desc

tears-of-steel-audio_eng=128002-video_eng=2200000-6.ts

#EXTINF:4, no desc

tears-of-steel-audio_eng=128002-video_eng=2200000-7.ts

....<중략>....

#EXTINF:2, no desc

tears-of-steel-audio_eng=128002-video_eng=2200000-184.ts

#EXT-X-ENDLIST


위 내용을 보면 각 영상 조각(.ts)파일이 4초이고, 4초짜리 영상 조각이 184개가 있는 것을 볼 수 있습니다. 따라서 영상을 전부 받지 않고도, 플레이어의 탐색 바를 특정 위치로 놓게 되면, 해당 위치에 해당하는 영상 조각을 재생할 수 있게 됩니다.




HLS가 유일한 프로토콜인가요?

그렇지 않습니다. 영상 표준 그룹인 MPEG그룹에서 2012년 MPEG-DASH(Dynamic Adaptive Streaming over HTTP)라는 프로토콜을 개발, 표준화 하였습니다. 개방형 표준으로 초기 HLS가 Apple 디바이스에서만 사용 가능했던 것과는 달리 범용적으로 사용이 가능합니다.


✅ HLS와 MPEG-DASH, 뭐가 다르죠?

두 프로토콜 모두 ①영상을 조각내서 저장한다는 점, ②네트워크 환경에 따라 자동으로 비디오 품질을 조정한다는 점에서는 동일 합니다. 다만 크게 2가지 점에서 차이점이 있습니다.


�HLS는 영상 조각이 .ts로 이루어져 있고, MPEG-DASH는 .mp4 파일로 이루어져 있습니다.

�디지털 미디어 보호 기술인 DRM(Digital Rights Management)이 다릅니다.

- HLS는 AES-128암호화를 기본 지원하고, Apple의 FairPlay를 지원 합니다.

- MPEG-DASH는 다양한 DRM(PlayReady, Widevine)등을 지원 합니다.


✅ 뭐가 좋은가요?

어떤 것을 선택할지는 타겟 플랫폼과 요구사항에 따라 다릅니다. 다만 최근 많은 서비스(AWS등)들은 두 기술 모두 지원을 하고 있기 때문에 어떤 것이 더 우월하다고 말하기는 어려운 것 같습니다.




마치며...

과거 wmv나 mpg, asf 등 다양한 파일의 영상을 다운 받아 보았던 기억이 납니다. 스케이트보드 기술을 알려주는 영상이었는데, 56k 모뎀으로 조금씩 파일을 받아가면서 봤었는데 이러한 HLS과 같은 기술과 더불어 CDN 비용의 현실화로 고화질의 영상을 마음껏 볼 수 있는 세상이 왔습니다.

keyword
작가의 이전글광고를 보면 컨텐츠가 무료라고? FAST가 뭐야?