๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Hls

๐Ÿฅ™ Hls ์ธ์ฆ

by frontChoi 2024. 2. 22.
๋ฐ˜์‘ํ˜•

๐Ÿ• 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`;
    } 
}
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€