๋ฐ์ํ
๐ Hls์์ token ๋ด์์ ์ ๋ฌ
hls์์ ์ด๋ฒ์ http header์ ํ ํฐ์ ์ ๋ฌํด์ผ ํ๋ ์ํฉ์ด ๋ฐ์ํ์๋ค. ์ธ์ฆ์ ์ฌ์ค ์ด๋ ํ๋ก๊ทธ๋จ์ด๋ ํ์ํ ๋ถ๋ถ์ด๋ค. ๋คํํ hls.js์์๋ http header์ ์ปค์คํ ํ ์ ์๋ค.
Hls.js์์ Header Custom ํ๊ธฐ
xhrSetup ์ต์ ์ ํตํด setRequestHeader ํจ์๋ฅผ ํตํด ํค๋์ ๋ด์์ ๋ณด๋ด๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
ํ์ง๋ง ios/safari๋ Hls.js๋ฅผ ์ฌ์ฉํ ์ ์๊ณ , m3u8ํ์ฅ์๋ฅผ ์ง์ํ์ง๋ง, Http header๋ฅผ ์ปค์คํ ํ๋ ๊ฒ์ ์ด๋ ต๋ค.
๊ทธ๋ฆฌํ์ฌ ์ฟผ๋ฆฌ์คํธ๋ง ๋ฐฉ์์ผ๋ก ์ ๋ฌํ๋ ๋ฐฉ๋ฒ ๋ฟ์ด์๋ค. ๋ณด์์ ์ผ๋ก๋ ์์ ํ์ง๋ ์์ง๋ง, ํ์ฌ๋ก์๋ ์ปค์คํ ํ๋ ๋ฐฉ๋ฒ์ด ์กด์ฌ ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ฟผ๋ฆฌ์คํธ๋ง์ผ๋ก ์ฒ๋ฆฌํ์๋ค.
function initHls() {
if (Hls.isSupported()) {
hls = new Hls({
autoStartLoad: false,
maxBufferSize: 320 * 1000 * 1000,
liveSyncDurationCount: 1,
highBufferWatchdogPeriod: 1,
nudgeMaxRetry: 99,
lowLatencyMode: false,
xhrSetup: (xhr) => {
/* xhrSetup ์ต์
์ ํตํด token ์ถ๊ฐ */
xhr.setRequestHeader("x-auth-token", "token");
},
});
hls.loadSource(videoSrc);
hls.attachMedia(video);
hls.startLoad();
}else {
video.src = `${videoSrc}?x-auth-token=token`;
}
}๋ฐ์ํ
๋๊ธ