- aws s3 버킷에 에셋을 올리고 나서 url 을 리턴 받는데,
- 비디오의 경우 일정 시간 동안 해당 url 이 not Found 를 리턴한다
- 아마도 인코딩 시간동안은 접근이 안되는 것으로 추정(카카오 스토리지도 동일한 현상)
- 해결방법으로 not Found 를 받는 경우 비디오 요소를 리랜더링 해서 해당 url 에 접근 재시도
- 일정 주기 & 제한된 횟수 만큼
solution1)
- 비디오 자체를 리랜더링
- 내부 state 를 <video> 태그의 key 로 사용하여 리랜더링 될 수 있도록 한다
- <video> 태그의 onError 속성 사용
component/VideoWithErrorCheck.tsx
import { useState } from "react";
export default function VideoWithErrorCheck({ ...props }) {
const [errorCount, setErrorCount] = useState(0);
const onVideoError = () => {
// S3 URL 최초 몇 초 동안은 not Found 발생
// 3초마다 1번씩 최대 10번만 시도
if (errorCount < 10) {
setTimeout(() => {
setErrorCount((prevErrorCount) => prevErrorCount + 1);
}, 3000);
}
};
return <video key={errorCount} onError={onVideoError} {...props}></video>;
}
컴포넌트 사용부
myPage.tsx
<VideoWithErrorCheck
width={"100%"}
height={"100%"}
style={{
objectFit: "cover",
}}
src={`${el.mediaPath}`}
controls
autoPlay
muted
loop
/>
'programming > Web' 카테고리의 다른 글
Stripe 를 통해 Apple pay 세팅 - 애플페이 탭 노출 안됨, 테스트 키로 결제시 session 생성 불가 에러 (0) | 2024.07.17 |
---|---|
소셜 로그인 - 카카오 로그인 CORS 에러 발생할 때 - NextJS (frontend) (1) | 2024.02.07 |
Frontend 관점 HTTP 응답 상태 코드(RESTful API) (1) | 2024.02.05 |
JWT 로 로그인 인증 구현하기 (0) | 2023.05.10 |
AWS amplify 로 React 배포하기 (+ blank 빈 페이지 보이는 에러 잡기) (0) | 2023.04.20 |