Giter Site home page Giter Site logo

videojs-for-react's Introduction

VIDEOJS FRO REACT

该项目是一个react组件,组件封装了video.js。并集成了部分拓展功能,如:多码流切换,对HLS流的支持。

使用方法

在项目中使用npm或者yarn安装依赖:

npm install --save videojs-fro-react 或者 yarn add videojf-fro-react

该组件是针对video.js的封装,支持video.js的所有设置。具体设置请参考 video.js文档video.js github
以下仅仅展现部分设置,以及该组件所添加的API。

示例代码:


import React, { Component } from 'react';
import VideoJsForReact from 'videojs-for-react';

class App extends Component {
  constructor() {
    super()
    this.state = {
      videoJsOptions: {
        preload: 'auto',  // 预加载
        bigPlayButton: {},  // 大按钮
        autoplay: true,   // 自动播放
        controls: true,  // 是否开启控制栏
        width: 800,   // 播放器宽度
        height: 600,  // 播放器高度
        playbackRates: [1, 1.5, 2], // 播放倍速
        sources: [  // 视频源
          {
            src: 'http://yunxianchang.live.ujne7.com/vod-system-bj/44_176_20170224113626af3a75cd-3508-4bc3-b51f-366fca3c7e39.m3u8',
            type: 'application/x-mpegURL',
            label: 'HLS1',
            withCredentials: false,
            res: 960
          }, {
            src: 'http://192.168.199.197:5000/nodeJS%E8%A7%86%E9%A2%914.mp4',
            type: 'video/mp4',
            label: 'MP4',
            res: 1080
          }
        ]
      }
    }
  }

  render() {
    return (
      <div className="player">
        <VideoJsForReact
          sourceChanged={(player) => console.log(player)}
          onReady={(player) => console.log('准备完毕', player)}
          {...this.state.videoJsOptions}
          >
        </VideoJsForReact>
      </div>
    )
  }
}

export default App;

与video.js不同的是,videojs-fro-react对接收的资源做了一些拓展:


  // 字段sources为array类型,当sources.length为1时,代表只播放一路码流,不开启视频源切换。
  // 当字段sources.length>1时,播放器将会开启多码流切换功能。 
  sources: [  
          {
            src: 'http://yunxianchang.live.ujne7.com/vod-system-bj/44_176_20170224113626af3a75cd-3508-4bc3-b51f-366fca3c7e39.m3u8',
            type: 'application/x-mpegURL', // MIME类型
            label: 'HLS1', // 代表该路码流名称
            res: 960  // 清晰度
          }, {
            src: 'http://192.168.199.197:5000/nodeJS%E8%A7%86%E9%A2%914.mp4',
            type: 'video/mp4',
            label: 'MP4',
            res: 1080
          }
        ]

API

API 用途
sourceChanged 码流切换成功的回调
onReady 播放器准备就绪的回调

现阶段该组件并没有实现更多功能的封装,接下来将会考虑支持rtmp、http-flv等。希望能够提出宝贵的建议,大家一起完善组件的功能。

videojs-for-react's People

Contributors

sohoorc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

videojs-for-react's Issues

CORS occured, how to fix?

Access to XMLHttpRequest at 'http://playrtmp.rrs.com/live_broadcast/stream1.m3u8' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
index.js:2177 VIDEOJS: ERROR: (CODE:2 MEDIA_ERR_NETWORK) HLS playlist request error at URL: http://playrtmp.rrs.com/live_broadcast/stream1.m3u8 Ct {code: 2, status: 0, message: "HLS playlist request error at URL: http://playrtmp.rrs.com/live_broadcast/stream1.m3u8", responseText: ""}
stack_frame_overlay_proxy_console @ index.js:2177
X @ index.js:13
Y.error @ index.js:13
t.error @ index.js:13
(anonymous) @ index.js:13
Ve.n.dispatcher.n.dispatcher @ index.js:13
Ge @ index.js:13
nt.trigger @ index.js:13
value @ index.js:13
(anonymous) @ index.js:13
Ve.n.dispatcher.n.dispatcher @ index.js:13
Ge @ index.js:13
nt.trigger @ index.js:13
(anonymous) @ index.js:13
(anonymous) @ index.js:13
i @ index.js:22
n @ index.js:22
error (async)
u @ index.js:22
l @ index.js:22
e @ index.js:13
value @ index.js:13
value @ index.js:13
t @ index.js:13
value @ index.js:13
handleSource @ index.js:13
e.setSource @ index.js:13
t @ index.js:13
t.loadTech_ @ index.js:13
t.src_ @ index.js:13
(anonymous) @ index.js:13
e @ index.js:13
e @ index.js:13
(anonymous) @ index.js:13
n @ index.js:13
setTimeout (async)
e.setTimeout @ index.js:13
vi @ index.js:13
t.src @ index.js:13
t @ index.js:13
e.addChild @ index.js:13
(anonymous) @ index.js:13
e.initChildren @ index.js:13
t @ index.js:13
hr @ index.js:13
value @ index.js:35
commitLifeCycles @ react-dom.development.js:15961
commitAllLifeCycles @ react-dom.development.js:17262
callCallback @ react-dom.development.js:149
invokeGuardedCallbackDev @ react-dom.development.js:199
invokeGuardedCallback @ react-dom.development.js:256
commitRoot @ react-dom.development.js:17458
completeRoot @ react-dom.development.js:18912
performWorkOnRoot @ react-dom.development.js:18841
performWork @ react-dom.development.js:18749
performSyncWork @ react-dom.development.js:18723
requestWork @ react-dom.development.js:18592
scheduleWork @ react-dom.development.js:18401
enqueueSetState @ react-dom.development.js:12313
./node_modules/react/cjs/react.development.js.Component.setState @ react.development.js:372
(anonymous) @ dynamic.js:91
Promise.then (async)
load @ dynamic.js:87
DynamicComponent @ dynamic.js:67
constructClassInstance @ react-dom.development.js:12484
updateClassComponent @ react-dom.development.js:14255
beginWork @ react-dom.development.js:15082
performUnitOfWork @ react-dom.development.js:17820
workLoop @ react-dom.development.js:17860
renderRoot @ react-dom.development.js:17946
performWorkOnRoot @ react-dom.development.js:18837
performWork @ react-dom.development.js:18749
performSyncWork @ react-dom.development.js:18723
requestWork @ react-dom.development.js:18592
scheduleWork @ react-dom.development.js:18401
enqueueSetState @ react-dom.development.js:12313
./node_modules/react/cjs/react.development.js.Component.setState @ react.development.js:372
(anonymous) @ dynamic.js:91
Promise.then (async)
load @ dynamic.js:87
DynamicComponent @ dynamic.js:67
constructClassInstance @ react-dom.development.js:12484
updateClassComponent @ react-dom.development.js:14255
beginWork @ react-dom.development.js:15082
performUnitOfWork @ react-dom.development.js:17820
workLoop @ react-dom.development.js:17860
renderRoot @ react-dom.development.js:17946
performWorkOnRoot @ react-dom.development.js:18837
performWork @ react-dom.development.js:18749
performSyncWork @ react-dom.development.js:18723
requestWork @ react-dom.development.js:18592
scheduleWork @ react-dom.development.js:18401
scheduleRootUpdate @ react-dom.development.js:19069
updateContainerAtExpirationTime @ react-dom.development.js:19097
updateContainer @ react-dom.development.js:19154
./node_modules/react-dom/cjs/react-dom.development.js.ReactRoot.render @ react-dom.development.js:19416
(anonymous) @ react-dom.development.js:19556
unbatchedUpdates @ react-dom.development.js:18952
legacyRenderSubtreeIntoContainer @ react-dom.development.js:19552
render @ react-dom.development.js:19613
render @ index.js:115
start @ index.js:81
./src/index.js @ index.js:43
webpack_require @ bootstrap 993b573d1df661e3b773:707
fn @ bootstrap 993b573d1df661e3b773:112
0 @ utils.js:94
webpack_require @ bootstrap 993b573d1df661e3b773:707
(anonymous) @ bootstrap 993b573d1df661e3b773:805
(anonymous) @ bootstrap 993b573d1df661e3b773:805
video-preview:1 Access to XMLHttpRequest at 'http://playrtmp.rrs.com/live_broadcast/stream1.m3u8' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
video-preview:1 Access to XMLHttpRequest at 'http://playrtmp.rrs.com/live_broadcast/stream2.m3u8' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
index.js:2177 VIDEOJS: ERROR: (CODE:4 MEDIA_ERR_SRC_NOT_SUPPORTED) The media could not be loaded, either because the server or network failed or because the format is not supported. Ct {code: 4, message: "The media could not be loaded, either because the …rk failed or because the format is not supported."}
stack_frame_overlay_proxy_console @ index.js:2177
X @ index.js:13
Y.error @ index.js:13
t.error @ index.js:13
t.handleTechError_ @ index.js:13
n @ index.js:13
n @ index.js:13
Ve.n.dispatcher.n.dispatcher @ index.js:13
error (async)
Ve @ index.js:13
ct @ index.js:13
on @ index.js:13
ct @ index.js:13
on @ index.js:13
t @ index.js:13
handleSource @ index.js:13
e.setSource @ index.js:13
t @ index.js:13
t.loadTech_ @ index.js:13
t.src_ @ index.js:13
(anonymous) @ index.js:13
e @ index.js:13
e @ index.js:13
(anonymous) @ index.js:13
n @ index.js:13
setTimeout (async)
e.setTimeout @ index.js:13
vi @ index.js:13
t.src @ index.js:13
t @ index.js:13
e.addChild @ index.js:13
(anonymous) @ index.js:13
e.initChildren @ index.js:13
t @ index.js:13
hr @ index.js:13
value @ index.js:35
commitLifeCycles @ react-dom.development.js:15961
commitAllLifeCycles @ react-dom.development.js:17262
callCallback @ react-dom.development.js:149
invokeGuardedCallbackDev @ react-dom.development.js:199
invokeGuardedCallback @ react-dom.development.js:256
commitRoot @ react-dom.development.js:17458
completeRoot @ react-dom.development.js:18912
performWorkOnRoot @ react-dom.development.js:18841
performWork @ react-dom.development.js:18749
performSyncWork @ react-dom.development.js:18723
requestWork @ react-dom.development.js:18592
scheduleWork @ react-dom.development.js:18401
enqueueSetState @ react-dom.development.js:12313
./node_modules/react/cjs/react.development.js.Component.setState @ react.development.js:372
(anonymous) @ dynamic.js:91
Promise.then (async)
load @ dynamic.js:87
DynamicComponent @ dynamic.js:67
constructClassInstance @ react-dom.development.js:12484
updateClassComponent @ react-dom.development.js:14255
beginWork @ react-dom.development.js:15082
performUnitOfWork @ react-dom.development.js:17820
workLoop @ react-dom.development.js:17860
renderRoot @ react-dom.development.js:17946
performWorkOnRoot @ react-dom.development.js:18837
performWork @ react-dom.development.js:18749
performSyncWork @ react-dom.development.js:18723
requestWork @ react-dom.development.js:18592
scheduleWork @ react-dom.development.js:18401
enqueueSetState @ react-dom.development.js:12313
./node_modules/react/cjs/react.development.js.Component.setState @ react.development.js:372
(anonymous) @ dynamic.js:91
Promise.then (async)
load @ dynamic.js:87
DynamicComponent @ dynamic.js:67
constructClassInstance @ react-dom.development.js:12484
updateClassComponent @ react-dom.development.js:14255
beginWork @ react-dom.development.js:15082
performUnitOfWork @ react-dom.development.js:17820
workLoop @ react-dom.development.js:17860
renderRoot @ react-dom.development.js:17946
performWorkOnRoot @ react-dom.development.js:18837
performWork @ react-dom.development.js:18749
performSyncWork @ react-dom.development.js:18723
requestWork @ react-dom.development.js:18592
scheduleWork @ react-dom.development.js:18401
scheduleRootUpdate @ react-dom.development.js:19069
updateContainerAtExpirationTime @ react-dom.development.js:19097
updateContainer @ react-dom.development.js:19154
./node_modules/react-dom/cjs/react-dom.development.js.ReactRoot.render @ react-dom.development.js:19416
(anonymous) @ react-dom.development.js:19556
unbatchedUpdates @ react-dom.development.js:18952
legacyRenderSubtreeIntoContainer @ react-dom.development.js:19552
render @ react-dom.development.js:19613
render @ index.js:115
start @ index.js:81
./src/index.js @ index.js:43
webpack_require @ bootstrap 993b573d1df661e3b773:707
fn @ bootstrap 993b573d1df661e3b773:112
0 @ utils.js:94
webpack_require @ bootstrap 993b573d1df661e3b773:707
(anonymous) @ bootstrap 993b573d1df661e3b773:805
(anonymous) @ bootstrap 993b573d1df661e3b773:805
video-preview:1 Access to XMLHttpRequest at 'http://playrtmp.rrs.com/live_broadcast/stream1.m3u8' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.