1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-10-22 11:43:33 +00:00
Files
seahub/frontend/src/components/video-player.js
2025-09-25 13:37:31 +08:00

59 lines
1.4 KiB
JavaScript

import React from 'react';
import videojs from 'video.js';
import 'videojs-hotkeys';
import 'video.js/dist/video-js.css';
class VideoPlayer extends React.Component {
componentDidMount() {
// instantiate Video.js
this.player = videojs(this.videoNode, {
...this.props,
plugins: {
hotkeys: {
alwaysCaptureHotkeys: true,
volumeStep: 0.1,
seekStep: 5,
enableMute: true,
enableFullscreen: true,
enableNumbers: true
}
}
}, function onPlayerReady() {});
this.player.el().focus();
}
componentDidUpdate(prevProps) {
// Update sources if changed
if (JSON.stringify(this.props.sources) !== JSON.stringify(prevProps.sources)) {
this.player.src(this.props.sources[0]);
}
}
// destroy player on unmount
componentWillUnmount() {
setTimeout(() => {
try {
if (this.player) {
this.player.dispose();
}
} catch (e) {
//
}
}, 0);
}
// wrap the player in a div with a `data-vjs-player` attribute
// so videojs won't create additional wrapper in the DOM
// see https://github.com/videojs/video.js/pull/3856
render() {
return (
<div data-vjs-player>
<video ref={ node => this.videoNode = node } className="video-js" style={{ display: 'block' }}></video>
</div>
);
}
}
export default VideoPlayer;