π λΉλμ€ μ μ±
ν¬λ‘¬μ΄λ μ¬νλ¦¬λ± μ¬μ©μμ μ‘μ
μμ΄ λΉλμ€λ₯Ό μλμ¬μ μν¬ μλ μλ€. λ€λ§ μλμ¬μμ΄ νμν κ²½μ° μμκ±° μ²λ¦¬νλ©΄
μλμ€νμ΄ κ°λ₯νλ€
κ·Έλ¬λ νμ¬ μλΉμ€μμλ νμ μλμ¬μμ μνμλ€. λ€λ§ νμ μλμ¬μμ ν μ μλ€κ³ μ λ¬νμκ³ , μλμ¬μμ΄ μλ κ²½μ° alertμ λμ΄μ£ΌκΈ°λ‘ νμλ€
𦬠μλμ¬μ μλ
μ¬μ ν μ¬μ©μ μ‘μ
μμ΄λ μλμ¬μμ΄ κ±°μλΆκ°λ₯ νμ§λ§ μλ ν μ μλ λ°©λ²μ΄ μ‘΄μ¬νλ€. 3νμ κ±Έμ³ κ°μ λ‘ playλ₯Ό νλκ²μ΄λ©°,
μλ κ²½μ° alertμΌλ‘ μ¬μ©μκ° μ¬μλ²νΌμ λλ₯΄λλ‘ μ λνλ€.
π μλμ¬μ μλ - script
μΌλ¨ video retryλ₯Ό Promise ννλ‘ return νλ€.
/* promise retry video*/
const videoPromiseRetry = (retryCount = 3) => {
return new Promise((resolve, reject) => {
const retry = (attempt = 0) => {
const promise = video.play();
promise
.then(() => {
resolve('videoPromiseRetry success')
})
.catch(error => {
console.error("videoPromiseRetry error : ", error);
if (attempt < retryCount) {
console.error(`μμ
μ μ¬μλ ν©λλ€. λ¨μ νμ : ${retryCount - attempt}`);
setTimeout(() => retry(attempt + 1), 1000)
}
else {
const error = new Error('μμ
μ μ€ν¨νμμ΅λλ€.')
error.name = 'FailRetry';
reject(error)
}
})
}
retry(0)
})
}
κ·Έλ¦¬κ³ videoμ μ΄λ²€νΈ μ€ "canplaythrough" κ° νΈλ¦¬κ±°κ° λλ€λ©΄, ν¨μλ₯Ό νΈμΆ νκ³ 3νμ κ±Έμ³ μλμ¬μμ΄ μ€ν¨ν κ²½μ° catchλΆλΆμμ μ²λ¦¬νλλ‘ νλ€.
const videoAddEvent = () => {
video.addEventListener("canplaythrough", eventHandle);
}
const eventHandle = (evt) => {
const { type } = evt;
switch (type) {
case 'canplaythrough':
videoPromiseRetry()
.then(result => {
console.log("result :", result);
initialPlay = false;
})
.catch(err => {
if (err.name === 'FailRetry') {
alert("μ¬μλ²νΌμ ν΄λ¦ν΄μ£ΌμΈμ")
}
else {
alert("κ΄λ¦¬μμκ² λ¬Έμν΄μ£ΌμΈμ")
}
console.error("videoPromiseRetry error : ", err.name);
})
break;
default:
break;
}
}
'Javascript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| πHls μ½ν μΈ λ³κ²½ κ°μ (0) | 2023.12.04 |
|---|---|
| navigator.mediaSession (2) | 2023.07.27 |
| Hls.js μ¬μ© (0) | 2023.06.14 |
| πΈ λΈλΌμ°μ λ λλ§ κ³Όμ (0) | 2023.04.12 |
| π λ μ컬 μ€μ½ν & ν΄λ‘μ (0) | 2023.03.07 |
λκΈ