우리가 영화를 10초씩 건너뛰고, 버퍼링 없이 영화를 볼 수 있는 방법.
90년대 후반부터 2000년대 초반까지, 초고속 인터넷 보급이 확대되면서 인터넷에서 동영상이라는 것들이 조금씩 확산되기 시작했다. 아마 현 30~40대 분들은 아시겠지만, 영상을 보기위해서는 '버퍼링'이라는 절차를 거쳐야 했고, 모든 영상은 항상 처음부터 감상을 해야했다. 영상을 감상함과 동시에 영상을 컴퓨터 내 임시 보관소로 다운로드를 했기 때문이다.
그러나 오늘날 우리는 이렇게 영상을 보지 않습니다. HLS라는게 등장했기 때문입니다.
HLS는 애플(Apple)에서 개발한 비디오 스트리밍 프로토콜로, 인터넷을 통해 실시간으로 비디오 콘텐츠를 제공할 때 사용됩니다. 쉽게 말해, 우리가 유튜브에서 영상을 시청할 때 쓰이는 기술 중 하나입니다.
HLS는 비디오를 작은 조각으로 나누어 전송하는 방식입니다. 또한 네트워크 속도에 따라 화질을 다르게 내보낼 수 있는 "Adaptive Streaming"을 지원하는 프로토콜 입니다. 인터넷 속도가 느리면 저화질로, 속도가 빠르면 고화질로 볼 수 있다는 의미 입니다.
HLS의 최종 파일은 m3u8 형태입니다. m3u8은 플레이어가 재생할 비디오 URL의 경로가 담긴 파일로, 일반 텍스트 파일과 동일 합니다. m3u8안에는 화질별 영상에 대한 경로가 있고, 그 화질별 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개가 있는 것을 볼 수 있습니다. 따라서 영상을 전부 받지 않고도, 플레이어의 탐색 바를 특정 위치로 놓게 되면, 해당 위치에 해당하는 영상 조각을 재생할 수 있게 됩니다.
그렇지 않습니다. 영상 표준 그룹인 MPEG그룹에서 2012년 MPEG-DASH(Dynamic Adaptive Streaming over HTTP)라는 프로토콜을 개발, 표준화 하였습니다. 개방형 표준으로 초기 HLS가 Apple 디바이스에서만 사용 가능했던 것과는 달리 범용적으로 사용이 가능합니다.
두 프로토콜 모두 ①영상을 조각내서 저장한다는 점, ②네트워크 환경에 따라 자동으로 비디오 품질을 조정한다는 점에서는 동일 합니다. 다만 크게 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 비용의 현실화로 고화질의 영상을 마음껏 볼 수 있는 세상이 왔습니다.