์ต๊ทผ์๋ ๋ผ์ด๋ธ ์คํธ๋ฆฌ๋ฐ ์๋น์ค๋ฅผ ์ฝ๊ฒ ์ฐพ์๋ณผ ์ ์์ต๋๋ค. ์์ ๋ถํฐ ์กฐ๊ธ์ฉ ์ฑ์ฅํด์๋ ์ฆ๊ธธ๊ฑฐ๋ฆฌ ์์ฃผ์ ๊ฐ์ธ๋ฐฉ์ก ๋ฟ๋ง ์๋๋ผ, ์ต๊ทผ์๋ ๋ผ์ด๋ธ ์ปค๋จธ์ค ๋ฑ ๋ค์ํ ์ฐ์ ์์ ๋ผ์ด๋ธ ์คํธ๋ฆฌ๋ฐ์ด ์ด์ฉ๋๊ณ ์์ด์.
์น์๋ ์ด๋ฌํ ์๋น์ค๋ฅผ ์ํ ๋ค์ํ ํ๋กํ ์ฝ์ด ์์ต๋๋ค. ๋ํ์ ์ผ๋ก MPEG-DASH, HLS, MSS, HDS ๋ฑ์ด ์๋๋ฐ์. ๊ทธ ์ค HLS ๋ผ๋ ํ๋กํ ์ฝ์ HTTP์ ๊ธฐ๋ฐํ ๋งํผ ์ฌ์ฉ์ด ๊ฐํธํด ๋์ค์ ์ผ๋ก ์ฌ์ฉ๋๊ณ ์์ต๋๋ค. HTTP ๊ธฐ๋ฐ์ด๋ผ ์ธ๊ธฐ์๋ค๋... ๋ญ๊ฐ REST Api๊ฐ ๋ ์ค๋ฅด๋ค์๐. ๊ฒ์ํด๋ณด๋ ์ค์ ๋ก ๋น์ทํ ์ด์ ๋ก ๋ค๋ฅธ ํ๋กํ ์ฝ๋ณด๋ค ์ ํธ๋๋ ๊ฒฝํฅ์ด ์๋ค๊ณ ํฉ๋๋ค. HTTP๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ํ๋กํ ์ฝ์ ๋นํด ๋ฐฉํ๋ฒฝ ์ค์ ์ด ์ฝ๊ณ , ๊ธฐ์กด ์น ์๋น์ค๋ฅผ ์ํ ์ธํ๋ผ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์์ด ์ธ๊ธฐ๊ฐ ๋ง๋ค๊ณ ํฉ๋๋ค.
์ค๋์ ์น์์ HLS ํด๋ผ์ด์ธํธ๋ฅผ ๊ตฌํํ๋ hls.js๋ฅผ ์๊ฐํ๊ณ , react-hls-player ๋ชจ๋์ ์ดํด๋ณด๋ฉฐ ๋ฆฌ์กํธ์์๋ 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 ํด๋ผ์ด์ธํธ๋ฅผ ๊ตฌํํ ์ ์๋ค๋ ๋ง์ด๋ค์!
(๋ฌผ๋ก ... ํญ์ ๊ทธ๋ ๋ฏ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์ ๊ณตํ์ง๋ ์์ต๋๋ค...)
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์ ์๋น์ค ์ํคํ ์ฒ ์ ๋๋ค.
์ด ๊ทธ๋ฆผ์์ ์ฃผ๋ชฉํ ๊ฒ์ ์ธ์ฝ๋ฉ๋ ๋ฏธ๋์ด ๋ฐ์ดํฐ๋ฅผ segmenter๊ฐ ์ฌ๋ฌ ๊ฐ์ fragment๋ก ๋ถํ ํด, ์น ์๋ฒ๋ก ์ ๋ฌํ๋ค๋ ์ ์ ๋๋ค. fragment๋ก ๋ถํ ํ๋ค๋ ๋ด์ฉ์ ๊ทธ๋ฆผ์ ์์ง๋ง... ์ด์จ๋ ๊ทธ๋ ์ต๋๋ค๐ . ๊ถ๊ธํ์ ๋ถ๋ค์ HTTP Live Streaming[HLS]๋ฅผ ์ฐธ์กฐํด ์ฃผ์ธ์! ์ ํฌ๊ฐ ์ง๊ธ ๊ธฐ์ตํด์ผ ํ๋ ๋ถ๋ถ์ ๋ฏธ๋์ด ๋ฐ์ดํฐ๋ฅผ ์ชผ๊ฐ์ ์น ์๋ฒ๋ก ๋ณด๋ธ๋ค๋ ๊ฒ์ ๋๋ค. ์ชผ๊ฐ์ ๋ณด๋ด๋ ์ด์ ๋ HTTP๊ฐ ๋จ๋ฐฉํฅ ํต์ ์ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์์ฒญ,์์ ,์์ฒญ,์์ ์์ฃผ ๋ํ์ ์ธ ํน์ง์ด์ฃ ! ์ฐ๊ฒฐ์ด ๋๋ ๋๊ธฐ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ ๋๋ ์๋ผ์ ๋ณด๋ด์ค์ผ ํฉ๋๋ค. ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ํ๋ฆฌ๋ ค๋ฉด ์น์์ผ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋ค์ ๊ทธ๋ฆผ์ ์ค์ ๋ก hls.js๊ฐ ์ฌ์ฉํ๋ ํ์ดํ๋ผ์ธ ๊ตฌ์กฐ์ ๋๋ค.
๊ตฌ์กฐ๋ฅผ ์ ๋ณด๋ฉด HLS ์๋ฒ๊ฐ ๋ณด๋ด๋ ์คํธ๋ฆผ ๋ฐ์ดํฐ๋ฅผ loader, demuxer, remuxer๋ฅผ ์ฌ์ฉํด MSE๊ฐ ์คํํ ์ ์๋ ํฌ๋งท์ธ MP4(๋๋ fmp4)๋ก ๋ณํํฉ๋๋ค. HLS์ ์คํธ๋ฆผ ๋ฐ์ดํฐ๋ loader๋ฅผ ๊ฑฐ์น๋ ์๊ฐ segment๋จ์๋ก ์ชผ๊ฐ์ง๋๋ค. ์ด ๊ทธ๋ฆผ์ ํ์ดํ๋ผ์ธ์ segment๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ต์ข ์ ์ผ๋ก๋ MSE๊ฐ ์ ๊ณตํ๋ ๋ฒํผ์ ์ ์ฅ๋๊ณ , ์ฐจ๋ก๋๋ก ๋ ๋๋ง๋ฉ๋๋ค.
์ ๊ทธ๋ฆผ๊ณผ ๋ค๋ฅธ ํน์ง ์ค ํ๋๋ ์ด ๊ณผ์ ์ด ๋ธ๋ผ์ฐ์ ๋ด์์ ์ผ์ด๋๋ค๋ ์ ์ ๋๋ค. ๋๋ถ์ ๋ ๊ฐ๊ฒฐํ ์ํคํ ์ฒ๋ฅผ ๊ฐ์ ธ๊ฐ ์ ์๊ณ , ๋ถํ๋ฅผ ๋ถ์ฐ์ํฌ์๋ ์์ต๋๋ค.
๊ฒฐ๋ก : hls.js๋ MSE๊ฐ ๋ฐ๋ก ์ฌ์ํ ์ ์๋ HLS ๋ฐ์ดํฐ๋ฅผ ๋ฐ์, ์ฌ์ ๊ฐ๋ฅํ MP4 fragment๋ก ๋ฐ๊ฟ์ค๋ค. ๊ทธ๋ฆฌ๊ณ MSE ๋ฒํผ์ ์๋ ๋ฐ์ดํฐ๋ฅผ video ํ๊ทธ์์ ์คํ์ํจ๋ค!
์ด๋ฒ์ฃผ๋ ์ฌ๊ธฐ๊น์ง ํฌ์คํ ์ ๋ง์น ๊ฒ์! ๋ค์์ฃผ์๋ ์ค์ ๋ก ํจ๊ป ๋ผ์ด๋ธ ์๋น์ค๋ฅผ hls.js๋ฅผ ํตํด ์๋น์คํด๋ด์!