初始化播放器的时候,video标签的data-setup属性和videojs函数的第二个参数,都可以传一个对象, 用来初始化播放器的一些配置信息。
<video poster="http://vjs.zencdn.net/v/oceans.png" data-setup="{}" >
<source src="http://vjs.zencdn.net/v/oceans.mp4" type="video/mp4" />
</video>
var options = {};
var player = videojs('my-player', options, function onPlayerReady() {});
video.js的可用的配置项如下:
autoplay
Type: boolean|string
<video autoplay>
<source src="http://vjs.zencdn.net/v/oceans.mp4" type="video/mp4" />
</video>
有3点需要注意:
1.浏览器对autoplay的支持情况不同,即使配置了autoplay,也不一定能生效。
2.如果在video标签上配置了autoplay属性,则会忽略从options中传入的autoplay值
3.如果要传字符串类型的值,则不能够通过video标签属性传,只能通过options传。
可取值:
- 布尔类型 false ,等同于 video 标签上没有 autoplay 属性。表示不用自动播放
- 布尔类型 true ,等同于在video标签上添加了autoplay 属性,表示需要自动播放
- 字符串类型 ‘muted’, 将会把播放器设置成静音,然后调用play() 实现自动播放
- 字符串类型 ‘play’, 将会调用play()实现自动播放。
- 字符串类型 ‘any’, 将会调用play实现自动播放,如果不能播放,则会把播放器设置成静音状态,再调用play()
代码如下:
<template>
<div class="example example1">
<video
id="my-player"
class="video-js"
controls
preload="auto"
poster="//vjs.zencdn.net/v/oceans.png"
>
<source src="//vjs.zencdn.net/v/oceans.mp4" type="video/mp4"/>
</video>
</div>
</template>
<script>
// 引入video.js相关的js和css
import videojs from 'video.js'
import "video.js/dist/video-js.min.css"
export default {
name: 'App',
mounted(){
// 添加初始化宽和高,否则加载播放器的时候会闪一下
let options = {width:960,height:400,autoplay:'muted'}
videojs('my-player', options, function() {
videojs.log('播放器准备好了!');
// 最新的浏览器一般禁止video自动播放,直接调用play()会报错。只有用户在页面上操作后或者在video标签上添加muted(静音)属性,才能调用play函数。
// this.play();
});
}
}
</script>
个人亲测,如果是使用npm包引入video.js,设置autoplay为’muted’或者’any’可以实现自动播放。如果是cdn引入的video.js,那么无论设置autoplay为什么值都不能实现自动播放。暂时也不知道原因。有知道的人可以联系我。
controls
Type: boolean
控制条,默认是true,设置为false后,将隐藏控制条。
height
Type: string|number
播放器的高度,单位为px
loop
Type: boolean
循环播放
muted
Type: boolean
静音
poster
Type: string
封面,值为图片的url链接
preload
Type: string
提前下载,用于告诉浏览器,当video标签加载后,是否需要立即下载视频资源。
可以设置的值如下:
- ‘auto’ 立即下载视频资源(如果浏览器支持的话),有些手机浏览器节省带宽,会禁止提前下载。
- ‘metadata’ 只下载视频的 meta 数据,meta 数据包含视频的时长和大小,有时候是通过下载几帧视频数据来得到meta的相关信息。
- ‘none’ 不用提前下载任何数据,只有用户点击播放后才开始下载数据
src
Type: string
视频的url链接
width
Type: string|number
播放器的宽度,单位为px
aspectRatio
Type: string
宽高比,设置aspectRatio后,播放器大小将不再是固定的值,播放器大小会根据aspectRatio的值动态计算得到。aspectRatio的值为一个比例,如4:3或者16:9
你也可以通过给video设置特定的class,如vjs-16-9, vjs-9-16, vjs-4-3,vjs-1-1来实现同样的效果。
设置aspectRatio
let options = {width:960,height:400,aspectRatio:'4:3'}
videojs('my-player', options, function() {
videojs.log('播放器准备好了!');
});
个人亲测:设置了aspectRatio后,设置width和height就不起作用了。
autoSetup
Type: boolean
是否允许使用video的data-setup属性启动播放器。
这必须在加载 videojs 时使用 videojs.options.autoSetup = false 全局设置才能生效。
<template>
<div class="example example1">
<video
id="my-player"
class="video-js"
controls
poster="//vjs.zencdn.net/v/oceans.png"
data-setup="{}"
>
<source src="//vjs.zencdn.net/v/oceans.mp4" type="video/mp4"/>
</video>
</div>
</template>
<script>
// 引入video.js相关的js和css
import videojs from 'video.js'
import "video.js/dist/video-js.min.css"
// 设置autoSetup
videojs.options.autoSetup = false
export default {
name: 'App',
mounted(){
}
}
</script>
breakpoints
Type: Object
当与响应式选项一起使用时,通过设置断点,可以决定播放器使用哪个class名称,以便根据播放器的尺寸调整ui样式。
默认的断点如下:
class名 | 宽度范围 |
---|---|
vjs-layout-tiny | 0-210 |
vjs-layout-x-small | 211-320 |
vjs-layout-small | 321-425 |
vjs-layout-medium | 426-768 |
vjs-layout-large | 769-1440 |
vjs-layout-x-large | 1441-2560 |
vjs-layout-huge | 2561+ |
class的名字是不能改变的,可以通过设置断点,来决定使用那个class。通常按如下的方式设置断点:
breakpoints: {
tiny: 300,
xsmall: 400,
small: 500,
medium: 600,
large: 700,
xlarge: 800,
huge: 900
}
- key是class名去掉vjs-layout-前缀和-后的值
- 值是宽度范围的的最大值
- 并不是所有的key都需要设置值,videojs会把用户设置的跟默认的合并。
children
Type: Array|Object
用于设置播放器可以包含的组件类型和顺序。
个人亲测,加上children后,播放器就没有办法正常播放了
fluid
Type: boolean
设置为true,播放器的的大小将不再是一个固定的值,它会根据宽高比(aspectRatio)动态计算出来,以适应其容器的大小。
如果video标签有vjs-fluid属性,那么fluid会自动被设置成true。
<template>
<div class="example example1">
<video
id="my-player"
class="video-js"
poster="//vjs.zencdn.net/v/oceans.png"
>
<source src="//vjs.zencdn.net/v/oceans.mp4" type="video/mp4"/>
</video>
</div>
</template>
<script>
// 引入video.js相关的js和css
import videojs from 'video.js'
import "video.js/dist/video-js.min.css"
export default {
name: 'App',
mounted(){
let options = {
width:960,
height:400,
autoplay:'any',
fluid:true
}
videojs('my-player',options,function(){
console.log('播放器准备就绪')
})
}
}
</script>
inactivityTimeout
Type: number
当播放器处于活动状态时,播放器上会存在一个值为vjs-user-active的class。如果用户长时间对播放器无操作的话,播放器将进入非活动状态,播放器会删除vjs-user-active,添加一个值为vjs-user-inactive的class。
inactivityTimeout就是用来定义多少毫秒用户不操作,播放器将进入非活动状态。如果设置值为0,表示播放器永远不会进入非活动状态。
可以通过监听useractive来判断播放器是否进入活动状态。
language
Type: string, 默认: 浏览器语言 or ‘en’
用来设置初始化播放器时,使用的语言。播放器可以使用那些语言可以在dist/lang文件夹查看
设置成中文
<template>
<div class="example">
<video
id="my-player"
class="video-js"
poster="//vjs.zencdn.net/v/oceans.png"
controls
>
<source src="//vjs.zencdn.net/v/oceans.mp4" type="video/mp4"/>
</video>
</div>
</template>
<script>
// 引入video.js相关的js和css
import videojs from 'video.js'
import "video.js/dist/video-js.min.css"
import lang_zhcn from "video.js/dist/lang/zh-CN.json"
videojs.addLanguage('zh-CN', lang_zhcn);
export default {
name: 'App',
mounted(){
let options = {
width:960,
height:400,
language:'zh-CN'
}
videojs('my-player',options,function(){
console.log('播放器准备就绪')
this.on('useractive',function(){
console.log('useractive')
})
})
}
}
</script>
想要了解更多的话,请查看(languages in Video.js)[https://docs.videojs.com/tutorial-languages.html]
languages
Type: Object
定义哪些语言可以在播放器中使用,Object的key为(language code)[https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry],值为一个对象(对象的key为英语,值为翻译)。
<template>
<div class="example">
<video
id="my-player"
class="video-js"
poster="//vjs.zencdn.net/v/oceans.png"
controls
>
<source src="//vjs.zencdn.net/v/oceans.mp4" type="video/mp4"/>
</video>
</div>
</template>
<script>
// 引入video.js相关的js和css
import videojs from 'video.js'
import "video.js/dist/video-js.min.css"
import lang_zhcn from "video.js/dist/lang/zh-CN.json"
import lang_zhtw from "video.js/dist/lang/zh-TW.json"
export default {
name: 'App',
mounted(){
let options = {
width:960,
height:400,
languages:{
'zh-CN':lang_zhcn,
'zh-TW':lang_zhtw
},
language:'zh-TW',
}
videojs('my-player',options,function(){
})
}
}
</script>
通常我们不会在options中使用languages属性,而是使用videojs.addLanguage()这个函数。
想要了解更多的话,请查看(languages in Video.js)[https://docs.videojs.com/tutorial-languages.html]
liveui
Type: boolean Default: false
允许播放器使用新的直播ui界面。该界面包括:
- 进度条,用户切换视频进度
- 一个按钮,可以让你跳转到最新的直播进度,还有一个圆圈,用来显示你是否是最新的直播。
没有这个选项的话,进度条将会被隐藏,取而代之的是一个LIVE播放按钮。没有控制条,你就无法跳转到最新的直播。在未来的版本中 liveui 将会被设置成true。
liveTracker.trackingThreshold
Type: number Default: 20
播放器的 liveTracker 组件的一个选项,用于控制什么时候显示liveui。默认情况下如果一个视频小于20s,即使我们设置了liveui选项,liveui也不会显示。
liveTracker.liveTolerance
Type: number Default: 15
播放器的 liveTracker 组件的一个选项,用于判定距离边缘多远可以被当做实时播放。默认情况下,距离边缘15s以内,就会被认为是实时播放,否则就是非实时播发。
nativeControlsForTouch
Type: boolean
Explicitly set a default value for the associated tech option.
normalizeAutoplay
Type: boolean
是否将autoplay: true和**
notSupportedMessage
Type: string
覆盖当 Video.js 无法播放媒体源时显示的默认消息
亲测这个选项,配置了也不起作用
noUITitleAttributes
Type: boolean Default: false
控制UI元素是否可以有title属性。当鼠标移动到元素上的时候,会显示title属性。把noUITitleAttributes设置成true,就会禁止在UI元素上添加title属性,可以通过插件或者框架可以在控制条上添加更多有用的提示。
fullscreen
Type: Object Default: {options: {navigationUI: ‘hide’}
fullscreen.options 可以设置特殊的全屏选项,在某些时候,它将增加元素和处理程序来获得更多功能。
options
Type: Object Default: {navigationUI: ‘hide’}
想了解更多信息,请查看(The Fullscreen API Spec)[https://fullscreen.spec.whatwg.org/#dictdef-fullscreenoptions]
playbackRates
Type: Array
播放速度
由大于0的数字所组成的数组,1是正常播放,0.5是0.5倍播放,2是2倍播放,以此类推。video.js会在控制条上显示该选项,以供用户选择。按照从小到大的顺序,自底到顶显示。
videojs('my-player', {
playbackRates: [0.5, 1, 1.5, 2]
});
plugins
Type: Object
插件,这个支持初始化播放器的时候,使用自定义选项自动初始化插件,而不需要你手动去初始化它们。
videojs('my-player', {
plugins: {
foo: {bar: true},
boo: {baz: false}
}
});
这个等价于
var player = videojs('my-player');
player.foo({bar: true});
player.boo({baz: false});
因为 plugins 是一个对象,所以初始的顺序是不确定的。
查看the plugins guide 可以获取更多插件相关的信息
preferFullWindow
Type: boolean, Defaut: false
将这个选项设置为true时,将更改不支持 HTML5 全屏 API 但支持video元素全屏的设备(即 iPhone)上的全屏行为。 播放器将被拉伸以填充浏览器窗口。
responsive
Type: boolean, Default: false
设置这个选项为true的时候,播放器将根据之前设置的响应式断点(breakpoints),自动调整自己的尺寸。
如果设置为false,之前设置的响应式断点(breakpoints)就会被忽略。
sources
Type: Array
视频来源,由对象组成的数组,相当于video 元素拥有多个 scource 元素。对象应该拥有src和type两个属性。
videojs('my-player', {
sources: [{
src: '//path/to/video.mp4',
type: 'video/mp4'
}, {
src: '//path/to/video.webm',
type: 'video/webm'
}]
});
suppressNotSupportedError
Type: boolean
如果设置为 true,则不会立即触发视频源不兼容的错误,而是会在第一次用户交互时发生。 这对于 Google 的“移动友好”测试工具很有用,该工具无法播放视频,设置为true,就可以不显示错误。
techCanOverridePoster
Type: boolean
Gives the possibility to techs to override the player’s poster and integrate into the player’s poster life-cycle. This can be useful when multiple techs are used and each has to set their own poster any time a new source is played.
个人理解:video.js 可以使用多种播放技术,比如html、falsh、youtube等。设置techCanOverridePoster为true时,每个技术,都自定义预览图。
techOrder
Type: Array, Default: [‘html5’]
定义使用什么播放技术,默认是html5
userActions
Type: Object
用户操作相关设置
userActions.click
Type: boolean|function
定义点击播放器时的动作,默认点击播放器,会切换播放器的播放和暂停状态。如果设置为false,点击播放器时,就不能够切换状态了。
videojs('my-player', {
userActions: {
click: false
}
});
userActions.doubleClick
Type: boolean|function
定义双击播放器时执行的操作,如果设置为flase,双击将没有反应。如果不设置或者设置为true。双击时播放器,将全屏。如果想覆盖默认行文,可以给doubleClick传一个函数。
function myDoubleClickHandler(event) = {
// `this` is the player in this context
this.pause();
};
videojs('my-player', {
userActions: {
doubleClick: myDoubleClickHandler
}
});
userActions.hotkeys
Type: boolean|function|object
定义播放器快捷键操作。如果设置为false,那么按快捷键,播放器就没有反应。如果想覆盖播放器,默认快捷键行为,可以按下面的格式覆盖。
var player = videojs('my-player', {
userActions: {
hotkeys: function(event) {
// `this` is the player in this context
// `x` key = pause
if (event.which === 88) {
this.pause();
}
// `y` key = play
if (event.which === 89) {
this.play();
}
}
}
});
默认快捷键行为如下:
- ‘x’ 全屏,只有当控制条存在全屏控件的时候才有效
- ‘m’ 静音,不管有没有控制条都有效
- ‘k’ 播放/暂停 ,不管有没有控制条都有效
- ‘space’ 播放/暂停 ,不管有没有控制条都有效
快捷键要求播放器首先要获取焦点,space 快捷键必须得在控制条获取焦点时才起作用,其他快捷键就不要求必须控制条获取焦点。
userActions.hotkeys.fullscreenKey
Type: function
覆盖全屏快捷键行为,如果设置的话,会将键盘事件传给该函数,如果函数返回true,就可以切换全屏。
var player = videojs('my-player', {
userActions: {
hotkeys: {
muteKey: function(event) {
// disable mute key
},
fullscreenKey: function(event) {
// override fullscreen to trigger when pressing the v key
return (event.which === 86);
}
}
}
});
userActions.hotkeys.muteKey
Type: function
覆盖静音快捷键行为,如果设置的话,会把键盘事件传给函数。函数返回true,就可以切换播放器静音效果。
userActions.hotkeys.playPauseKey
Type: function
覆盖播放/暂定快捷键行为,如果设置的话,会把键盘事件传给函数。函数返回true,就可以切换播放器的播放和暂停。
vtt.js
Type: string
覆盖vtt.js的默认url。这个将会异步加载,以支持WebVTT
此选项将用于 Video.js 的“novtt”构建(即 video.novtt.js)。 这样就不用把,vtt.js与Video.js 捆绑在一起了。
- autoplay
- controls
- height
- loop
- muted
- poster
- preload
- src
- width
- aspectRatio
- autoSetup
- breakpoints
- children
- fluid
- inactivityTimeout
- language
- languages
- liveui
- liveTracker.trackingThreshold
- liveTracker.liveTolerance
- nativeControlsForTouch
- normalizeAutoplay
- notSupportedMessage
- noUITitleAttributes
- fullscreen
- playbackRates
- plugins
- preferFullWindow
- responsive
- sources
- suppressNotSupportedError
- techCanOverridePoster
- techOrder
- userActions
- userActions.click
- userActions.doubleClick
- userActions.hotkeys
- userActions.hotkeys.fullscreenKey
- userActions.hotkeys.muteKey
- userActions.hotkeys.playPauseKey
- vtt.js