首页 > 代码库 > 一款开源免费跨浏览器的视频播放器--videojs使用介绍

一款开源免费跨浏览器的视频播放器--videojs使用介绍

       最近项目中的视频功能,需要做到浏览器全兼容,所以之前用html5实现的视频功能就需要进行改造了。在网上翻了个遍,试来试去,在所有的视频播放器中,就数它最实际了。首先我们来看看它的优点:

     1.它是开源免费的,你可以在github很容易的获取它的最新代码。

     2.使用它非常的容易,只要花几秒钟就可以架起一个视频播放页面。

     3.它几乎兼容所有的浏览器,并且优先使用html5,在不支持的浏览器中,会自动使用flash进行播放。

     4. 界面可以定制,纯javascript和css打造。说明文档也非常的详细。

下面是官网提供的一个简单的使用方法:

<!DOCTYPE HTML><html><head>  <title>Video.js Test Suite</title><link href="//vjs.zencdn.net/4.10/video-js.css" rel="stylesheet"><script src="//vjs.zencdn.net/4.10/video.js"></script> </head><body> <video id="example_video_1" class="video-js vjs-default-skin" controls width="640" height="264">
 <source src=http://www.mamicode.com/"http://video-js.zencoder.com/oceans-clip.mp4" type=‘video/mp4‘ />
</video> 
</body>
</html>

 这样个例子对于想用它做一个电影网站来说够用了。可是我们的需求往往不会只是这么简单。比如我现在要强制在pc端使用flash播放要怎么设置?

有两种途径:

   先说第一种,通过html的data-setup 属性进行设置。

 

<video id="example_video_1" class="video-js vjs-default-skin vjs-big-play-centered"  controls preload="auto" width="640" height="264"  poster="http://video-js.zencoder.com/oceans-clip.png"  data-setup=‘{ techOrder: ["flash","html5"]}‘>  ...</video>

第二种就是使用javascript:

  

  videojs(‘#example_video_1‘,{    techOrder: ["flash","html5"]  },function() {    })

当然,官方的文档说,在内部会自动检测是否支持html5,在不支持的情况下会自动使用flash播放。 

随着单页应用的流行,很多时候,我们在初始化videojs的时候,页面上是不存在存放video的节点的。这个时候,videojs也替我们想到了,我们只需要置空data-setup的属性就可以了。然后在js中进行如下申明:

  

videojs(document.getElementById(‘example_video_1‘), {}, function() {  // This is functionally the same as the previous example.});

也就是说,第一个位置,我们直接传dom节点的引用也是可以的。

这时候我们发现,播放按钮默认是在左上角,官方说这样可以不会遮挡内容的精彩部分,但是如果我们想要放到中间,处理也很简单。在video标签中增加一个vjs-big-play-centered样式就好了

<video id="example_video_1" class="video-js vjs-default-skin vjs-big-play-centered"  controls preload="auto" width="640" height="264"  poster="http://video-js.zencoder.com/oceans-clip.png"  data-setup=‘{"example_option":true}‘>  ...</video>

如果我们想要它自动播放,非常容易,加一个autoplay 就可以了,或者data-setup=‘{"autoplay":true}‘ ,通过js也是一样的道理。非常简单就不演示了。官方说了,由于html5的标准,不建议写成autoplay="true" 或 controls="true",那是html5之前的版本用的。初始化的时候,常用的有如下一些参数:

https://github.com/videojs/video.js/blob/stable/docs/guides/options.md

autoplay

自动播放

<video autoplay ...>or{ "autoplay": true }

preload

预加载资源

<video preload ...>or{ "preload": "auto" }

poster

视频缩略图

<video poster="myPoster.jpg" ...>or{ "poster": "myPoster.jpg" }

loop

自动循环

<video loop ...>or{ "loop": "true" }

width

The width attribute sets the display width of the video.

<video width="640" ...>or{ "width": 640 }

height

The height attribute sets the display height of the video.

<video height="480" ...>or{ "height": 480 }

Component Options

功能组件(例中演示如何移除静音按钮)

You can set the options for any single player component. For instance, if you wanted to remove the muteToggle button, which is a child of controlBar, you can just set that component to false:

var player = videojs(‘video-id‘, {  children: {    controlBar: {      children: {        muteToggle: false      }    }  }});

上面的代码等价于:

var player = videojs(‘video-id‘, {  controlBar: {    muteToggle: false  }});

 videojs 有许多的组件,比如声音,播放按钮,字幕,时间,进度条等等,它们在html中的结构类似于这样子:

Player    PosterImage    TextTrackDisplay    LoadingSpinner    BigPlayButton    ControlBar        PlayToggle        FullscreenToggle        CurrentTimeDisplay        TimeDivider        DurationDisplay        RemainingTimeDisplay        ProgressControl            SeekBar              LoadProgressBar              PlayProgressBar              SeekHandle        VolumeControl            VolumeBar                VolumeLevel                VolumeHandle        MuteToggle

这方便我们自己改写样式和js进行控制。当然,大多数情况我们不需要自己轮子,官方默认的皮肤已经做的非常漂亮了.

通常html5会比flash加载的更快,所以我们通常优先使用html5,同时把我们要进行的操作写在回调里边。比如:

videojs("example_video_1").ready(function(){  var myPlayer = this;  // EXAMPLE: Start playing the video.  myPlayer.play();});

需要强调的是,如果使用flash优先,那么你在本地调式的时候,要用http的方式访问,否则你什么也看不到。

更多的api调用请看这里https://github.com/videojs/video.js/blob/stable/docs/api/vjs.Player.md

METHODSautoplaybufferedbufferedEndbufferedPercentcancelFullScreen deprecatedcontrolscurrentSrccurrentTimecurrentTypedisposedurationendederrorexitFullscreeninitisFullScreen deprecatedisFullscreenlanguageloadloopmutedpausepausedplayplaybackRateposterpreloadremainingTimerequestFullScreen deprecatedrequestFullscreenseekingsrcvolumeaddChild inheritedaddClass inheritedbuildCSSClass inheritedchildren inheritedcontentEl inheritedcreateEl inheriteddimensions inheritedel inheritedenableTouchActivity inheritedgetChild inheritedgetChildById inheritedhasClass inheritedheight inheritedhide inheritedid inheritedinitChildren inheritedname inheritedoff inheritedon inheritedone inheritedoptions inheritedplayer inheritedready inheritedremoveChild inheritedremoveClass inheritedshow inheritedtrigger inheritedtriggerReady inheritedwidth inherited

这里我说一下几个常用的方法:清理 dispose,hide() 隐藏,show() 显示,play()播放,pause()暂停 几本上就差不多了。

最后要说一下的就是事件。官方提示的事件如下:

EVENTSdurationchangeendedfirstplayfullscreenchangeloadedalldataloadeddataloadedmetadataloadstartpauseplayprogressseekedseekingtimeupdatevolumechangewaitingresize inherited

我们常用的有play,pause,ended,这些可以帮助我们在必要的时候进行处理。不过呢,在实践中,我发现flash模式和html5模式还是有一些不一致的地方。

比哪在flash模式中,在播放器暂停或隐藏之后,调用paused()方法报错:VIDEOJS: Video.js: paused unavailable on Flash playback technology element.

调用hide()之后,调用show()方法,在flash模式中,会自动调用播放,而且是重新开始,而html5模式则不会。对于这一点,解决的办法是在option中指定autoplay:false,这样两者行为就一致了。

 

一款开源免费跨浏览器的视频播放器--videojs使用介绍