javascript Videojs-youtube:如何在ReactJS中配置VideoJS

edqdpe6u  于 2023-05-15  发布在  Java
关注(0)|答案(1)|浏览(125)

我想用ReactJS和VideoJS创建一个视频播放器,它可以通过Youtube链接运行
我按照VideoJS指南页面中的说明使用功能组件(https://videojs.com/guides/react/#react-functional-component-and-)
但我不知道如何将videojs-youtubehttps://github.com/videojs/videojs-youtube)集成为一个插件,可以在techOrder中使用。

{
  autoplay: true,
  controls: true,
  responsive: true,
  fluid: true,
  sources: [
    {
      type: 'video/youtube',
      src: 'https://www.youtube.com/watch?v=kjlu9RRHcbE',
    },
  ],
  techOrder: ['html5', 'youtube'],
}

我尝试了一些解决方案,通过添加一个脚本到身体,但没有工作
错误截图

mmvthczy

mmvthczy1#

https://codesandbox.io/s/react-video-js-youtube-example-n4xp91
(视频播放目前在沙盒内不工作,但代码将在本地工作)

npm install video.js
npm install videojs-youtube

那么如果你使用的是更高版本的video.js(版本>= 6),那么只需要导入插件即可:

import "videojs-youtube";

并且插件初始化自身。
重要的是,任何Youtube视频源也设置为type: "video/youtube"

import { useEffect, useRef } from "react";
import videojs from "video.js";
import "videojs-youtube";
import "video.js/dist/video-js.css";

const initialOptions = {
  controls: true,
  fluid: true,
  controlBar: {
    volumePanel: {
      inline: false
    }
  }
};

const videoJsOptions = {
  sources: [
    {
      type: "video/youtube", //important
      src: "https://www.youtube.com/watch?v=GlhV-OKHecI"
    }
  ]
};

export default function App() {
  const videoNode = useRef(null);
  const player = useRef(null);
  const initialized = useRef(false);

  useEffect(() => {
    if (videoNode.current && !initialized.current) {
      initialized.current = true; //prevent duplicate initialization
      player.current = videojs(videoNode.current, {
        ...initialOptions,
        ...videoJsOptions
      }).ready(function () {
        console.log("Player Ready");
      });
    }
    //clear up player on dismount
    return () => {
      if (player.current) {
        player.current.dispose();
      }
    };
  }, []);

  return (
    <div className="App">
      <video ref={videoNode} className="video-js" />
    </div>
  );
}

相关问题