我试图在一个video.js项目中配置next.js,但它不起作用。
在加载开始时,玩家出现黑色,突然消失。在控制台中有如下警告:
"video.es.js?31bb:228 VIDEOJS:警告:所提供的元素不包含在DOM"中
播放器组件代码如下:
import React from 'react';
import videojs from 'video.js';
import 'video.js/dist/video-js.css';
export const ThorPlayer = (props) => {
const videoRef = React.useRef(null);
const playerRef = React.useRef(null);
const {options, onReady} = props;
React.useEffect(() => {
// Make sure Video.js player is only initialized once
if (!playerRef.current) {
const videoElement = videoRef.current;
if (!videoElement) return;
const player = playerRef.current = videojs(videoElement, options, () => {
player.log('player is ready');
onReady && onReady(player);
});
// You can update player in the `else` block here, for example:
} else {
player.autoplay(options.autoplay);
player.src(options.sources);
}
}, [options, videoRef]);
// Dispose the Video.js player when the functional component unmounts
React.useEffect(() => {
const player = playerRef.current;
return () => {
if (player) {
player.dispose();
playerRef.current = null;
}
};
}, [playerRef]);
return (
<div data-vjs-player>
<video ref={videoRef} className='video-js vjs-big-play-centered' style={{ width: "800px", height:"400px" }}/>
</div>
);
}
export default ThorPlayer;实现该组件的页面如下:
import React from 'react'
import ThorPlayer from '../../components/_ThorPlayer'
export default function index() {
const playerRef = React.useRef(null);
const videoJsOptions = {
autoplay: true,
controls: true,
responsive: true,
fluid: true,
sources: [{
src: 'https://obj-gravscale.zadarazios.com:443/v1/AUTH_f57eb386f52e4dc0bcdf19764aecc205/ct/bl_se.mp4',
type: 'video/mp4'
}]
};
const handlePlayerReady = (player) => {
playerRef.current = player;
// You can handle player events here, for example:
player.on('waiting', () => {
player.log('player is waiting');
});
player.on('dispose', () => {
player.log('player will dispose');
});
};
return (
<>
<h1>Teste de Player: </h1>
<ThorPlayer options={videoJsOptions} onReady={handlePlayerReady} />
<div></div>
</>
)
}已经在next.js中实现了next.js的人能帮我解决这个问题吗?
发布于 2022-07-04 10:04:16
你用的是反应18吗?我遇到了与您相同的问题,这是由useEffect在开发模式下触发两次造成的。
在发布video.js 7.20之前,您可以使用本评论中描述的技术。
https://stackoverflow.com/questions/72788050
复制相似问题