如何在 ReactJS 中使用 VideoJS 插件?

Posted

技术标签:

【中文标题】如何在 ReactJS 中使用 VideoJS 插件?【英文标题】:How to use VideoJS plugins with ReactJS? 【发布时间】:2018-10-02 14:33:19 【问题描述】:

我正在尝试将videojs-offset 插件与 ReactJS 一起使用。

但是,它向我显示了以下错误 -

TypeError: this.player.offset 不是函数

import React,  Component  from 'react';
import './App.css';
import PropTypes from 'prop-types';
import "video.js/dist/video-js.css";
import videojs from 'video.js'
import videoJsContribHls from 'videojs-contrib-hls'
import offset from 'videojs-offset';

export default class VideoPlayer extends React.Component 
    componentDidMount() 
        // instantiate Video.js
        this.player = videojs(this.videoNode, this.props, function onPlayerReady() 
            console.log('onPlayerReady', this);
            this.player.offset(
                start: 10,
                end: 300,
                restart_beginning: false //Should the video go to the beginning when it ends
          );
        );
        

    // destroy player on unmount
    componentWillUnmount() 
        if (this.player) 
            this.player.dispose()
        
    
    render() 
        return (
            <div>
                <div data-vjs-player>
                    <video ref= node => this.videoNode = node  className="video-js"></video>
                </div>
            </div>
        )
    

这是将任何 videojs 插件与 reactJS 集成时的常见问题。

【问题讨论】:

我猜这个问题是 videojs 父实例。 Videojs 未设置为全局变量,因此插件在与您使用它的位置不同的实例中注册自己。 @bigless 即使我在 componentDidMount() 中添加 videojs.registerPlugin('offset',offset); ,它仍然有同样的问题。 好的。那太天真了。您是否也尝试通过 videojsOptions 初始化,例如 controls: false, plugins: offset: start: 10, end: 300, restart_beginning: false ? @bigless :这行得通,非常感谢! :-) :-) :-) 【参考方案1】:

通过以下更改解决了这个问题 -

首先,在 VideoJS Options 中,插件应该被初始化,比如, plugins: offset: start: 10, end: 300, restart_beginning: false

如果你的插件没有任何参数,你可以像plugin_name: 一样初始化它

然后,在 componentDidMount() 方法中,像这样注册插件 -

componentDidMount() 
        videojs.registerPlugin('offset',offset);
        this.player = videojs(this.videoNode, this.props, function 
        onPlayerReady() 
            console.log('onPlayerReady', this);
        );

此解决方案适用于将任何 videojs 插件与 react 集成。

【讨论】:

亲爱的@Vishwajeet 请分享一些例子。

以上是关于如何在 ReactJS 中使用 VideoJS 插件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 VideoJS 在 Angular App 上显示 360 度视频

如何使用videojs播放rtmp直播流?

如何在视频播放结束时删除大播放按钮(VideoJS)

如何使用 Play Framework 和 videojs 流式传输视频?

videojs中默认情况下如何停用模态对话框?

Videojs和clappr livestream总是在livestream上打开,如何禁用?