시작하기 전에 비디오 버퍼 메모리를 읽는 [React]
14521 단어 JavaScriptReacttech
규격.
react에 구성 요소를 설치할 때 appi에서 가져온 URL을 비디오의 원본에 넣고 읽기 시작합니다. 모든 버퍼 메모리를 읽은 후 재생 단추를 누르십시오.
이용자의 경험을 고려할 때 영상을 다 읽지 않고 재생할 수 없다면 조금 나쁘다고 느낄 수도 있지만, 앱 때문에 영상을 중도에 정지하는 게 더 낫다는 판단에 따라 이 같은 방법으로 바뀐 것이다.
일정 시간 동안 모두 읽을 수 없으면 재생을 건너뜁니다.
proeload 속성 추가
이번에 실시된 방법은react-helmet에preload 속성을 추가한 링크 라벨을 사용하여 읽을 동영상의 원본을 미리 불러오는 방법입니다.
import { useEffect } from 'react';
import Helmet from 'react-helmet';
import useVideoData from './path/to/useVideoData';
export const App = () => {
const { videoState, fetchVideo } = useVideoData();
useEffect(() => {
fetchVideo();
}, [])
return (
<div>
<Helmet>
<link rel='preload' href={videoState.url} as='video' />
</Helmet>
<video src={videoState.url} />
</div>
)
}
위의 소스는 설치할 때 미리 불러올 수 있으며, 이렇게 하면 버퍼 메모리를 완전히 읽지 않은 상태에서도 재생할 수 있다.이번 설치는 모든 버퍼를 읽는 단계에서 재생됩니다.
버퍼가 duration과 같지 않으면 동영상을 숨깁니다
setInterval에서 비디오가 어느 정도 읽혔는지 확인하고 읽은 상태를 판단할 준비가 되어 있으며, 이 상태로 숨기기를 제어합니다.
import { useEffect, useRef, useState } from 'react';
import Helmet from 'react-helmet';
import useVideoData from './path/to/useVideoData';
export const App = () => {
const { videoState, fetchVideo } = useVideoData();
const [isCompleted, setIsCompleted] = useState(false);
const videoRef = useRef(null);
useEffect(() => {
fetchVideo();
}, [])
useEffect(() => {
if (!isCompleted) {
const intervalId = setInterval(() => {
const videoBuf = videoRef.current.buffered;
const videoDuration = videoBuf.duration;
const videoBufEnd = videoBuf.end(0);
if (videoBufEnd / videoDuration === 1 ) {
setIsCompleted(true);
clearInterval(intervalId);
}
}, 1000);
setTimeout(() => {
clearInterval(intervalId);
}, 10000);
}
}, [isCompleted])
return (
<div>
<Helmet>
<link rel='preload' href={videoState.url} as='video' />
</Helmet>
{ isCompleted && <video src={videoState.url} ref={videoRef} /> }
</div>
)
}
끝맺다
실제 실시에서 여기서부터 다양한 조정이 이루어졌는데 기본적인 논리는 이렇다.
Reference
이 문제에 관하여(시작하기 전에 비디오 버퍼 메모리를 읽는 [React]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/pale_delphinium/articles/383d6d9a413a2b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)