时间 2015-05-13 17:11:58
The GIS
Guy

使用 video.js 简单几步编写一个可以在微信、QQ内置浏览器中正常工作的 HTML5 视频播放器。

HTML5 标签看似简单,但在不同设备上使用时却问题不断,原因是很多设备强制使用自身的视频播放器来播放 HTML5
视频。使用第三方组件 video.js 可以在一定程度上克服这个问题。

初始化 video.js

编写 HTML 页面:

<<span class="hljs-name">head>
<<span class="hljs-name">meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<<span class="hljs-name">title></<span class="hljs-name">title>
<<span class="hljs-name">link href="include/video-js/video-js.css" rel="stylesheet">
<<span class="hljs-name">script src="video.js"></<span class="hljs-name">script>
<<span class="hljs-name">script>
videojs.options.flash.swf = "include/video-js/video-js.swf"
</<span class="hljs-name">script>
</<span class="hljs-name">head>
<<span class="hljs-name">body>
<<span class="hljs-name">video id="video" class="video-js vjs-default-skin vjs-big-play-centered"
controls preload="auto" width="100%" height="100%"
poster="img/pure-black.jpg" data-setup=''>
<<span class="hljs-name">source src="video/video.mp4" type='video/mp4' />
<<span class="hljs-name">source src="video/video.webm" type='video/webm' />
<<span class="hljs-name">source src="video/video.ogv" type='video/ogg' />
<<span class="hljs-name">p class="vjs-no-js">播放视频需要启用 JavaScript,推荐使用支持HTML5的浏览器访问。</<span class="hljs-name">p>
</<span class="hljs-name">video>
</<span class="hljs-name">body>

与官方教程相比,这里为 video 元素额外添加了
vjs-big-play-centered 类,让播放按钮显示在视频的正中间(默认在左上角)。
controls 表示自动添加播放控件。加上 preload="auto"
可以让页面加载完成后立即开始加载视频,如果设置为 preload="meta" 则只加载视频元数据。

中声明 ,可以让页面在高分辨率的手机上显示正确的尺寸,防止因为屏幕像素高而使得页面元素变得很小。

虽然页面中已经指定 高度为100%,但此时视频控件高度仍然为0,可以用下面的 CSS 样式让视频控件全屏。

html, body {
width: 100%;
height: 100%;
}

为适配不同内核的浏览器,需要同时提供 .mp4、.ogv、.webm 三种格式的视频,但 OS X
下没有找到好用的免费转换器可以同时转换成 .mp4、.ogv 和 .webm 三种格式。miro
虽然号称免费开源,但是不捐钱无法得到下载链接……如果视频不大,推荐使用 converter.com 的在线转换器。

可以看看上面代码在浏览器中的效果:

video.js 开发 HTML5 视频页面" title="使用 video.js 开发 HTML5 视频页面">

事件响应

video.js 对 HTML5 视频的事件进行了封装,下面的代码演示了如何给视频添加事件响应:

var player = videojs('video');
// 检测播放时间
player.on('timeupdate', function () {
console.log('当前播放时间:' = player.currentTime());
}
});
// 开始或恢复播放
player.on('play', function() {
console.log('开始/恢复播放');
});
// 暂停播放
player.on('pause', function() {
console.log('暂停播放');
});

视频播放控件最常用的事件是 'play','pause','ended',以及'timeupdate'。

适配iOS、安卓设备

正确处理播放结束事件

在设备实测中可以发现,上一节中提到的 'ended' 事件在安卓设备上并没有正确触发。因此,需要通过
'timeupdate' 事件判断视频是否已播放完毕:

player.on('timeupdate', function () {
// 如果 currentTime() === duration(),则视频已播放完毕
if (player.duration() != 0 && player.currentTime() === player.duration()) {
// 播放结束
}
});

与iOS设备不同,安卓设备中视频还未加载的情况下 player.duration()
player.currentTime() 均为0,因此需要通过
player.duration() != 0 确保视频信息已加载成功
,以免在页面刚刚加载的时候就错误地认为视频播放已经结束。

隐藏移动设备自动添加的播放按钮

移动设备上的浏览器检测到 HTML5
视频时,会自动加上播放按钮,然而在大多数情况下,默认的播放按钮点击之后并不能正常播放视频。(为什么要采用第三方组件来写视频控件的原因。)

另外,video.js 本身已经带有播放按钮,因此需要将设备自动添加的播放按钮隐藏。设置下面的 CSS 样式:

video::-webkit-media-controls {
display:none !important;
}

到此为止,一个适配了桌面端与移动端,并用能在QQ、微信浏览器中正常打开视频的页面就完成了。

使用 video.js 开发 HTML5 视频页面的更多相关文章

  1. JS开发HTML5游戏《神奇的六边形》(二)

    近期出现一款魔性的消除类HTML5游戏<神奇的六边形>,今天我们一起来看看如何通过开源免费的青瓷引擎(www.zuoyouxi.com)来实现这款游戏. (点击图片可进入游戏体验) 因内容 ...

  2. JS开发HTML5游戏《神奇的六边形》(四)

    近期出现一款魔性的消除类HTML5游戏<神奇的六边形>,今天我们一起来看看如何通过开源免费的青瓷引擎(www.zuoyouxi.com)来实现这款游戏. (点击图片可进入游戏体验) 因内容 ...

  3. JS开发HTML5游戏《神奇的六边形》(三)

    近期出现一款魔性的消除类HTML5游戏<神奇的六边形>,今天我们一起来看看如何通过开源免费的青瓷引擎(www.zuoyouxi.com)来实现这款游戏. (点击图片可进入游戏体验) 因内容 ...

  4. JS开发HTML5游戏《神奇的六边形》(一)

    近期出现一款魔性的消除类HTML5游戏<神奇的六边形>,今天我们一起来看看如何通过开源免费的青瓷引擎(www.zuoyouxi.com)来实现这款游戏. (点击图片可进入游戏体验) 因内容 ...

  5. 微信 vue中使用video.js播放m3u8视频,解决安卓自动全屏的问题。

    最近一个项目中需要在微信中播放m3u8格式的视频,刚开始用了 vue-video-player 这个插件,在IOS手机体验良好,本以为完事了, 结果安卓手机一点播放就自动全屏,心态略崩.查了资料说是安 ...

  6. vue使用 video.js动态切换视频源视频源不刷新问题

    网上的垃圾代码太多,最后翻了video.js的官方文档,就这么简单,浪费了我这么久,注:我这里使用的vue //html <video  id="my-player" con ...

  7. angular.js开发 将多页面开发成单页面

    用angulara.js做单页面开发时,由于不能跨页面取数据,又需要传参,可以采用:$scope.step=0/1来解决这个问题,设置初始值为想要的页面即可.

  8. video.js使用教程API

    videojs就提供了这样一套解决方案,他是一个兼容html5的视频播放工具,早期版本兼容所有浏览器,方法是:提供三个后缀名的视频,并在不支持html5的浏览器下生成一个flash的版本. 最新的3. ...

  9. WebView&HTML5-----使用WebView播放HTML5视频文件

    一.问题描述 HTML5提供了很多新的特性比如,视频播放.web本地存储.地理定位.应用缓存.Canvas等,但这些特性需要浏览器的支持,在Android应用中我们可以使用WebView构建Web应用 ...

随机推荐

  1. JDK动态代理[4]----ProxyGenerator生成代理类的字节码文件解析

    通过前面几篇的分析,我们知道代理类是通过Proxy类的ProxyClassFactory工厂生成的,这个工厂类会去调用ProxyGenerator类的generateProxyClass()方法来生成 ...

  2. 细说MyEclipse调试

     在程序出现问题时,我们需要找到并解决掉这些恼人的Bug,才能使程序顺利的运行下去.但是,当代码很多,程序很大的时候,找起来就很麻烦. 所以,我们需要借助工具——Eclipse/MyEclipse中的 ...

  3. 微信小程序开发教程目录

    本系列教程是自己在工作中使用到而记录的,没有顺序之分 如有错误之处,请给与指正,也不希望误导了别人 微信小程序开发教程目录 微信小程序之注册和入门 微信小程序之HTTPS请求 微信小程序开发之选项卡 ...

  4. jQuery的get()post()getJson()方法

    jQuery get() 和 post() 方法用于通过 HTTP GET 或 POST 请求从服务器请求数据. HTTP 请求:GET vs. POST 两种在客户端和服务器端进行请求-响应的常用方 ...

  5. Python爬虫——城市公交、地铁站点和线路数据采集

    本篇博文为博主原创,转载请注明. 城市公交.地铁数据反映了城市的公共交通,研究该数据可以挖掘城市的交通结构.路网规划.公交选址等.但是,这类数据往往掌握在特定部门中,很难获取.互联网地图上有大量的信息 ...

  6. Qt用Zip压缩文件夹的一些坑

    环境: QT3.3.8 vs2005 QDir dir("/home/Blinux/html"); if ( !dir.exists() ) { //目录不存在 } QString ...

  7. Windows平台下的内存泄漏检测

    在C/C++中内存泄漏是一个不可避免的问题,很多新手甚至有许多老手也会犯这样的错误,下面说明一下在windows平台下如何检测内存泄漏. 在windows平台下内存泄漏检测的原理大致如下. 1. 在分 ...

  8. mydumper

    Mydumper介绍 Mydumper是一个针对MySQL和Drizzle的高性能多线程备份和恢复工具.开发人员主要来自MySQL,Facebook,SkySQL公司.目前已经在一些线上使用了Mydu ...

  9. [PHP] PHP服务器接口SAPI中的结构体

    SAPI:在各个服务器抽象层之间遵守着相同的约定,这里我们称之为SAPI接口.例如命令行程序的实现,Apache的mod_php模块实现以及fastcgi的实现等等 1.结构体:使用结构体(Struc ...

  10. 用json方法来作深拷贝应该知道的一点东西!

    之前写js比较多的的时候也写过深拷贝,浅拷贝,继承啥的,还有自定义的监听事件.然而过了很久都忘了. 最近在项目上用的深拷贝都是 b = JSON.parse( JSON.stringify(a) ) ...