2021-05-28 19:13:48 +02:00
|
|
|
import { h, Component } from 'preact';
|
|
|
|
import videojs from 'video.js';
|
|
|
|
import 'videojs-playlist';
|
|
|
|
import 'video.js/dist/video-js.css';
|
|
|
|
|
|
|
|
const defaultOptions = {
|
|
|
|
controls: true,
|
|
|
|
fluid: true,
|
|
|
|
};
|
|
|
|
|
|
|
|
export default class VideoPlayer extends Component {
|
|
|
|
componentDidMount() {
|
|
|
|
const { options, onReady = () => {} } = this.props;
|
|
|
|
const videoJsOptions = {
|
|
|
|
...defaultOptions,
|
|
|
|
...options,
|
|
|
|
};
|
|
|
|
this.player = videojs(this.videoNode, videoJsOptions, function onPlayerReady() {
|
|
|
|
onReady(this);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
componentWillUnmount() {
|
|
|
|
if (this.player) {
|
|
|
|
this.player.dispose();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
shouldComponentUpdate() {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
render() {
|
2021-06-02 08:41:26 +02:00
|
|
|
const { style, children } = this.props;
|
2021-05-28 19:13:48 +02:00
|
|
|
return (
|
|
|
|
<div style={style}>
|
|
|
|
<div data-vjs-player>
|
2021-06-02 08:41:26 +02:00
|
|
|
<video ref={(node) => (this.videoNode = node)} className="video-js vjs-default-skin" controls playsinline />
|
|
|
|
{children}
|
2021-05-28 19:13:48 +02:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|