Skip to content

Latest commit

ย 

History

History
39 lines (21 loc) ยท 4.69 KB

2021-03-13-hlsjs.md

File metadata and controls

39 lines (21 loc) ยท 4.69 KB

์ตœ๊ทผ์—๋Š” ๋ผ์ด๋ธŒ ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋น„์Šค๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์ „๋ถ€ํ„ฐ ์กฐ๊ธˆ์”ฉ ์„ฑ์žฅํ•ด์™”๋˜ ์ฆ๊ธธ๊ฑฐ๋ฆฌ ์œ„์ฃผ์˜ ๊ฐœ์ธ๋ฐฉ์†ก ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์ตœ๊ทผ์—๋Š” ๋ผ์ด๋ธŒ ์ปค๋จธ์Šค ๋“ฑ ๋‹ค์–‘ํ•œ ์‚ฐ์—…์—์„œ ๋ผ์ด๋ธŒ ์ŠคํŠธ๋ฆฌ๋ฐ์ด ์ด์šฉ๋˜๊ณ  ์žˆ์–ด์š”.

์›น์—๋Š” ์ด๋Ÿฌํ•œ ์„œ๋น„์Šค๋ฅผ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ํ”„๋กœํ† ์ฝœ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ MPEG-DASH, HLS, MSS, HDS ๋“ฑ์ด ์žˆ๋Š”๋ฐ์š”. ๊ทธ ์ค‘ HLS ๋ผ๋Š” ํ”„๋กœํ† ์ฝœ์€ HTTP์— ๊ธฐ๋ฐ˜ํ•œ ๋งŒํผ ์‚ฌ์šฉ์ด ๊ฐ„ํŽธํ•ด ๋Œ€์ค‘์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. HTTP ๊ธฐ๋ฐ˜์ด๋ผ ์ธ๊ธฐ์žˆ๋‹ค๋‹ˆ... ๋ญ”๊ฐ€ REST Api๊ฐ€ ๋– ์˜ค๋ฅด๋„ค์š”๐Ÿ™‚. ๊ฒ€์ƒ‰ํ•ด๋ณด๋‹ˆ ์‹ค์ œ๋กœ ๋น„์Šทํ•œ ์ด์œ ๋กœ ๋‹ค๋ฅธ ํ”„๋กœํ† ์ฝœ๋ณด๋‹ค ์„ ํ˜ธ๋˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. HTTP๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ํ”„๋กœํ† ์ฝœ์— ๋น„ํ•ด ๋ฐฉํ™”๋ฒฝ ์„ค์ •์ด ์‰ฝ๊ณ , ๊ธฐ์กด ์›น ์„œ๋น„์Šค๋ฅผ ์œ„ํ•œ ์ธํ”„๋ผ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์ธ๊ธฐ๊ฐ€ ๋งŽ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋Š˜์€ ์›น์—์„œ HLS ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” hls.js๋ฅผ ์†Œ๊ฐœํ•˜๊ณ , react-hls-player ๋ชจ๋“ˆ์„ ์‚ดํŽด๋ณด๋ฉฐ ๋ฆฌ์•กํŠธ์—์„œ๋Š” hls.js๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ•จ๊ป˜ ์•Œ์•„๋ณด์•˜์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค! ์‚ฌ์‹ค... ์ €๋„ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ์ฒ˜์Œ ๋ณธ ๊ฑฐ๋ผ์„œ ์ด์ œ๋ถ€ํ„ฐ ์•Œ์•„๊ฐ€๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค...๐Ÿคฃ

hls.js

hls.js์˜ README๋ฅผ ํ•จ๊ป˜ ์ฝ์–ด๋ณด๋ฉฐ ๋Œ€์ถฉ ์ด๋…€์„์ด ์–ด๋–ค๊ฑธ ํ•˜๋Š”์ง€ ์•Œ์•„๋ด…์‹œ๋‹ค! ์›๋ฌธ์˜ ๋‚ด์šฉ์€ hls.js์—์„œ ์ธ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

hls.js is a JavaScript library that implements an HTTP Live Streaming client. It relies on HTML5 video and MediaSource Extensions for playback.

hls.js๋Š” HLS client ๊ตฌํ˜„์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋ฉฐ, video ํƒœ๊ทธ์™€ MediaSource Extension(MSE)์— ์˜์กด์„ฑ์ด ์žˆ๋„ค์š”. MSE๋Š” ๋ณ„๋„์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ์—†์ด javascript๋กœ๋งŒ ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์ƒ์„ฑํ•˜๋ฉฐ, video, audio ํƒœ๊ทธ์—์„œ ์ด๋ฅผ ์žฌ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค(์ฐธ์กฐ:Media Source API, MDN). ๋Œ€๋ถ€๋ถ„์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” MSE๋ฅผ ์ง€์›ํ•˜๋ฏ€๋กœ, ์‚ฌ์‹ค์ƒ ๊ฒฐ๋ก ์€ ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋Šฅ๋งŒ์œผ๋กœ HLS ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ง์ด๋„ค์š”!

(๋ฌผ๋ก ... ํ•ญ์ƒ ๊ทธ๋ ‡๋“ฏ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ œ๊ณตํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค...) image

It works by transmuxing MPEG-2 Transport Stream and AAC/MP3 streams into ISO BMFF (MP4) fragments. Transmuxing is performed asynchronously using a Web Worker when available in the browser. hls.js also supports HLS + fmp4, as announced during WWDC2016.

์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ”„๋กœํ† ์ฝœ๋ช…์ด ๋‚˜์˜ค๋Š”๋ฐ์š”... ๊ธ€๋งŒ ๋ด์„œ๋Š” ์ž˜ ์ดํ•ด๊ฐ€ ์•ˆ๋˜๋„ค์š”... ๊ทธ๋ž˜์„œ ๊ทธ๋ฆผ์„ ์ฐพ์•„์™”์Šต๋‹ˆ๋‹ค!

HLS์˜ ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ ์ž…๋‹ˆ๋‹ค.

image

์ด ๊ทธ๋ฆผ์—์„œ ์ฃผ๋ชฉํ•  ๊ฒƒ์€ ์ธ์ฝ”๋”ฉ๋œ ๋ฏธ๋””์–ด ๋ฐ์ดํ„ฐ๋ฅผ segmenter๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ fragment๋กœ ๋ถ„ํ• ํ•ด, ์›น ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•œ๋‹ค๋Š” ์  ์ž…๋‹ˆ๋‹ค. fragment๋กœ ๋ถ„ํ• ํ•œ๋‹ค๋Š” ๋‚ด์šฉ์€ ๊ทธ๋ฆผ์— ์—†์ง€๋งŒ... ์–ด์จŒ๋“  ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค๐Ÿ˜…. ๊ถ๊ธˆํ•˜์‹  ๋ถ„๋“ค์€ HTTP Live Streaming[HLS]๋ฅผ ์ฐธ์กฐํ•ด ์ฃผ์„ธ์š”! ์ €ํฌ๊ฐ€ ์ง€๊ธˆ ๊ธฐ์–ตํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์€ ๋ฏธ๋””์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์ชผ๊ฐœ์„œ ์›น ์„œ๋ฒ„๋กœ ๋ณด๋‚ธ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ชผ๊ฐœ์„œ ๋ณด๋‚ด๋Š” ์ด์œ ๋Š” HTTP๊ฐ€ ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์š”์ฒญ,์ˆ˜์‹ ,์š”์ฒญ,์ˆ˜์‹  ์•„์ฃผ ๋Œ€ํ‘œ์ ์ธ ํŠน์ง•์ด์ฃ ! ์—ฐ๊ฒฐ์ด ๋š๋š ๋Š๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋„ ๋š๋š ์ž˜๋ผ์„œ ๋ณด๋‚ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ํ˜๋ฆฌ๋ ค๋ฉด ์›น์†Œ์ผ“์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๊ทธ๋ฆผ์€ ์‹ค์ œ๋กœ hls.js๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

image

๊ตฌ์กฐ๋ฅผ ์ž˜ ๋ณด๋ฉด HLS ์„œ๋ฒ„๊ฐ€ ๋ณด๋‚ด๋Š” ์ŠคํŠธ๋ฆผ ๋ฐ์ดํ„ฐ๋ฅผ loader, demuxer, remuxer๋ฅผ ์‚ฌ์šฉํ•ด MSE๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํฌ๋งท์ธ MP4(๋˜๋Š” fmp4)๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. HLS์˜ ์ŠคํŠธ๋ฆผ ๋ฐ์ดํ„ฐ๋Š” loader๋ฅผ ๊ฑฐ์น˜๋Š” ์ˆœ๊ฐ„ segment๋‹จ์œ„๋กœ ์ชผ๊ฐœ์ง‘๋‹ˆ๋‹ค. ์ด ๊ทธ๋ฆผ์˜ ํŒŒ์ดํ”„๋ผ์ธ์€ segment๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ตœ์ข…์ ์œผ๋กœ๋Š” MSE๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฒ„ํผ์— ์ €์žฅ๋˜๊ณ , ์ฐจ๋ก€๋Œ€๋กœ ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค.

์œ„ ๊ทธ๋ฆผ๊ณผ ๋‹ค๋ฅธ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” ์ด ๊ณผ์ •์ด ๋ธŒ๋ผ์šฐ์ € ๋‚ด์—์„œ ์ผ์–ด๋‚œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๋•๋ถ„์— ๋” ๊ฐ„๊ฒฐํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๊ณ , ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐ์‹œํ‚ฌ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก  : hls.js๋Š” MSE๊ฐ€ ๋ฐ”๋กœ ์žฌ์ƒํ•  ์ˆ˜ ์—†๋Š” HLS ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„, ์žฌ์ƒ ๊ฐ€๋Šฅํ•œ MP4 fragment๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  MSE ๋ฒ„ํผ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ video ํƒœ๊ทธ์—์„œ ์‹คํ–‰์‹œํ‚จ๋‹ค!

์ด๋ฒˆ์ฃผ๋Š” ์—ฌ๊ธฐ๊นŒ์ง€ ํฌ์ŠคํŒ…์„ ๋งˆ์น ๊ฒŒ์š”! ๋‹ค์Œ์ฃผ์—๋Š” ์‹ค์ œ๋กœ ํ•จ๊ป˜ ๋ผ์ด๋ธŒ ์„œ๋น„์Šค๋ฅผ hls.js๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šคํ•ด๋ด์š”!