video.js使用技巧总结和webpack中使用注意的问题

webpack与video.js使用注意的问题转自https://segmentfault.com/a/1190000007603266
video.js是一个优秀的视频播放器库,不过官网的示例中,是作为全局变量videojs引入的。如果我们的项目使用ES6风格的模块,用webpack来做打包的话,就需要做一些额外的工作。本文介绍我在使用的时候遇到的一些“坑”。

基本使用方法
直接从npm安装video.js,然后就可以在代码中使用video.js了。

npm install video.js --save
import videojs from ‘video.js’;

videojs(document.getElementById(‘foo’));
引入默认皮肤样式
但是这样使用并没有引入video.js的皮肤样式文件,播放器是没有界面的。

所以还需要引入CSS文件:

import ‘video.js/dist/video-js.css’;
另外需要注意的是,因为CSS中使用了图标字体,还需要用webpack的file-loader处理字体文件。在webpack配置文件中添加这样的loader配置:

{
test: /.(ttf|eot|svg|woff(2))(?[a-z0-9]+)?$/,
loader: ‘file’,
}
引入Flash播放器的SWF文件
对于一些HTML5播放器播放不了的格式,video.js回调用Flash播放器去播放器,这样就需要引入一个SWF文件。方法还是用file-loader。在之前的配置中加上swf扩展名:

{
test: /.(swf|ttf|eot|svg|woff(2))(?[a-z0-9]+)?$/,
loader: ‘file’,
}
然后在代码中配置SWF文件的路径:

import SWF_PATH from ‘video.js/dist/video-js.swf’;

videojs.options.flash.swf = SWF_PATH;
引入vtt.js
如果使用Flash播放器,video.js还会异步请求一个vtt.js文件。这个是用来处理WebVTT文件的。

这个JS文件的路径的配置方法跟上面的SWF文件的配置方法是类似的。但是,webpack默认会对JS文件打包,而我们需要的是通过file-loader来引入这个JS文件,从而获得其形对路径,所以要在import语句中指定具体的loader:

import VTTJS_PATH from ‘file!videojs-vtt.js/dist/vtt.min.js’;

videojs.options[‘vtt.js’] = VTTJS_PATH;
引入其他语言翻译
video.js包含了很多种语言的本地化,但是没有包含在库中,需要我们自己加载:

import ‘video.js/dist/lang/zh-CN’;
这样加载的问题是,本地化JS代码中使用了videojs这个全局变量,但是webpack并没有将其暴露,所以运行会报错。

解决这个问题有两种方法,在webpack的文档有所提及。

第一种方法是使用imports-loader,在import一个JS的时候,注入一个全局变量:

import ‘imports?videojs=video.js!video.js/dist/lang/zh-CN’
这样的语句,就是告诉webpack,将videojs这个全局变量指向video.js这个模块。这样就不会报错。

第二种方法是使用ProvidePlugin,直接把全局变量暴露出来。

在webpack的配置文件中,增加这样的plugin配置:

new webpack.ProvidePlugin({
videojs: ‘video.js’,
}),
这样就表示把video.js模块暴露为全局变量videojs。

使用插件
video.js有很多插件,他们一般也会使用videojs这个全局变量。因此如果直接引入也会报错。解决方法跟上一部分“引入其他语言翻译”的方法一样,在此不赘述。

video.js使用技巧总结
转载来自https://www.awaimai.com/2053.html
1 初始化
Video.js初始化有两种方式。

1.1 标签方式
一种是在标签里面加上class="video-js"和data-setup=’{}'属性。

注意,两者缺一不可。

刚开始的时候我觉得后面的值为空对象{},不放也行,

导致播放器加载不出来,后来加上来就可以了。

1.2 JS方式
另外一种方法是通过JS初始化,格式:

var player = videojs(‘my-player’);
这样有个要求,就是不能配置data-setup,并且需要传入的id。

当然,如果不想一个个初始化,可以这样:

(function(){
var videos = document.getElementsByTagName(‘video’);
for(i=0; i<videos.length; i++) {
var video = videos[i];
if(video.className.indexOf(‘video-js’) > -1) {
videojs(video.id).ready(function(){
});
}
}
})();
2 播放按钮居中
video.js默认的播放按钮在左上角,应该是video.js开发人员认为放中间会遮挡内容,所以没放中间。

不过我们常见的一般都在中间,比较符合习惯。

这是可以通过参数修改的,在标签中加入vjs-big-play-centered类,就可以了。

像这样:

class=“video-js vjs-big-play-centered”
3 支持音乐标签
video.js 4.9开始支持标签,与video不同的是:播放audio时封面不会消失。

但是上面的播放框还是一直在的,配置方式和标签一样,也必须要配置data-setup参数。

4 禁止在iPhone safari中自动全屏
方法如下,在标签中加入playsinline参数,


注意,在iOS10之前用的是webkit-playsinline。

5 暂停时显示播放按钮
video.js在未播放时,会显示一个大的播放按钮,上面我们提到如何让他居中。

那么,如何在视频暂停时也显示这个播放按钮呢?

有很多用JS的解决办法,感觉都挺麻烦的。

其实用CSS就可以搞定了:

.vjs-paused .vjs-big-play-button,
.vjs-paused.vjs-has-started .vjs-big-play-button {
display: block;
}
是不是很轻便很简单 :)

6 播放按钮变○圆形
video.js默认的播放按钮是圆角矩形,

我们一般更熟悉播放按钮为圆形的:

那么怎么改呢?还是用CSS来解决。

.video-js .vjs-big-play-button{
font-size: 2.5em;
line-height: 2.3em;
height: 2.5em;
width: 2.5em;
-webkit-border-radius: 2.5em;
-moz-border-radius: 2.5em;
border-radius: 2.5em;
background-color: #73859f;
background-color: rgba(115,133,159,.5);
border-width: 0.15em;
margin-top: -1.25em;
margin-left: -1.75em;
}
/* 中间的播放箭头 /
.vjs-big-play-button .vjs-icon-placeholder {
font-size: 1.63em;
}
/
加载圆圈 */
.vjs-loading-spinner {
font-size: 2.5em;
width: 2em;
height: 2em;
border-radius: 1em;
margin-top: -1em;
margin-left: -1.5em;
}
因为原来居中的时候宽度和高度改变了,所以margin的值也要相应改变

7 点击屏幕播放/暂停
这个是视频播放的时候用得较多的功能,解决方法如下。

.video-js.vjs-playing .vjs-tech {
pointer-events: auto;
}
pointer-events是CSS的一个属性,用来控制鼠标的动作,具体可参考《CSS里的pointer-events属性》。

8 重载视频文件
总有那么一些情形,我们需要重新载入视频文件。

比如,马上播放刚上传的文件。

例如这样的标签:

重载 在video.js中,用现成的js方法就可以实现:

var video = document.getElementById(‘example_video’);
var source = document.getElementById(‘videoMP4’);
$("#reload").click(function() {
video.pause()
source.setAttribute(‘src’, ‘2.mp4’);
video.load();
video.play();
});
或者:

var video = document.getElementById(‘example_video’);
$("#reload").click(function() {
video.pause()
video.setAttribute(‘src’, ‘2.mp4’);
video.load();
video.play();
});
9 进度显示当前播放时间
video.js默认倒序显示时间,也就是视频播放的剩余时间。

要显示当前的播放时间,以及总共视频时长,加2行CSS解决:

.video-js .vjs-time-control{display:block;}
.video-js .vjs-remaining-time{display: none;}

猜你喜欢

转载自blog.csdn.net/weixin_44329718/article/details/88837626