27 KiB
Getting started
Install
Install with npm
$ npm install artplayer
Or install with yarn
$ yarn add artplayer
import Artplayer from 'artplayer';
import 'artplayer/dist/artplayer.css';
Or umd builds are also available
<link rel="stylesheet" href="path/to/artplayer.css" />
<script src="path/to/artplayer.js"></script>
Will expose the global variable to window.Artplayer.
Usage
<div class="artplayer-app"></div>
var art = new Artplayer({
container: '.artplayer-app',
url: 'path/to/video.mp4',
});
Configuration
container
- Type:
String、Element - Default:
#artplayer - Required:
true
DOM container of the player
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
// container: document.querySelector('.artplayer-app'),
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
});
You may need to initialize a size for the container element, like:
.artplayer-app {
width: 400px;
height: 300px;
}
url
- Type:
String - Default:
'' - Required:
true
Video source url, Three video file formats are supported: mp4, ogg, webm
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
// url: url + '/video/one-more-time-one-more-chance-480p.ogg',
// url: url + '/video/one-more-time-one-more-chance-480p.webm',
});
type
- Type:
String - Default:
''
Specify the format for the url, use with customType
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.flv'
type: 'flv'
});
customType
- Type:
Object - Default:
{}
Customize when loading third-party libraries
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.flv'
type: 'flv',
customType: {
flv: function(video, url, art) {
// video: The video element
// url: The video url
// art: The Artplayer instance
}
}
});
poster
- Type:
String - Default:
''
Video poster image url
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
poster: url + '/image/one-more-time-one-more-chance-poster.jpg',
});
title
- Type:
String - Default:
''
Video title, will be shown in screenshot file name and pip mode
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
title: '【新海诚动画】『秒速5センチメートル』',
});
volume
- Type:
Number - Default:
0.7
Default volume, player will cache the last volume, which may be overwritten
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
volume: 0.5,
});
muted
- Type:
Boolean - Default:
false
Whether to mute by default
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
muted: true,
});
autoplay
- Type:
Boolean - Default:
false
Whether to play automatically, sometimes it doesn't necessarily succeed
More info: autoplay-policy-changes
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
autoplay: true,
});
autoSize
- Type:
Boolean - Default:
false
Keep the original video aspect ratio and automatically zoom
// Zoom browser window
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
autoSize: true,
});
loop
- Type:
Boolean - Default:
false
Automatic loop playback
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
loop: true,
});
playbackRate
- Type:
Boolean - Default:
false
Whether to show playback rate controller in the contextmenu
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
playbackRate: true,
});
aspectRatio
- Type:
Boolean - Default:
false
Whether to show aspect ratio controller in the contextmenu
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
aspectRatio: true,
});
screenshot
- Type:
Boolean - Default:
false
Whether to show screenshot controller in the bottom
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
screenshot: true,
});
setting
- Type:
Boolean - Default:
false
Whether to show setting controller in the bottom
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
setting: true,
});
pip
- Type:
Boolean - Default:
false
Whether to show pip controller in the bottom, it will give priority to the native picture-in-picture feature.
More info: picture-in-picture
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
pip: true,
});
fullscreen
- Type:
Boolean - Default:
false
Whether to show window fullscreen controller in the bottom
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
fullscreen: true,
});
fullscreenWeb
- Type:
Boolean - Default:
false
Whether to show web page fullscreen controller in the bottom
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
fullscreenWeb: true,
});
mutex
- Type:
Boolean - Default:
true
Player mutually exclusive, only one player can play at a time
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
mutex: true,
});
hotkey
- Type:
Boolean - Default:
true
Whether to use hotkey
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
hotkey: true,
});
| Key | Description |
|---|---|
↑ |
Increase volume |
↓ |
Decrease volume |
← |
Seek backward |
→ |
Seek forward |
space |
Toggle playback |
lang
- Type:
String - Default:
navigator.language.toLowerCase()
Default display language: en, zh-cn, zh-tw
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
lang: 'en',
});
icons
- Type:
Object - Default:
{}
Replace the default icon, The currently configurable icons are: loading、playBig
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
icons: {
loading: 'Loading...',
playBig: 'PLAY',
},
});
theme
- Type:
String - Default:
#f00
Default display language: en, zh-cn, zh-tw
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
theme: '#ffad00',
});
subtitle
- Type:
Object - Default:
{}
Custom subtitle
url
- Type:
String - Default:
''
Subtitle url, support vtt and srt format
style
- Type:
Object - Default:
{}
Subtitle style
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
subtitle: {
url: url + '/subtitle/one-more-time-one-more-chance.srt',
style: {
color: '#03A9F4',
},
},
});
thumbnails
- Type:
Object - Default:
{}
Custom thumbnails in the progress bar with lazy load
style
- Type:
String - Default:
''
Thumbnails image url
number
- Type:
Number - Default:
60
Thumbnails number
width
- Type:
Number - Default:
160
Thumbnails width
height
- Type:
Number - Default:
90
Thumbnails height
column
- Type:
Number - Default:
10
Thumbnails column
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
thumbnails: {
url: url + '/image/one-more-time-one-more-chance-thumbnails.png',
width: 190,
height: 107,
},
});
moreVideoAttr
- Type:
Object - Default:
{'controls': false,'preload': 'auto'}
More video Attributes, these properties will be written directly to the video element
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
moreVideoAttr: {
'webkit-playsinline': true,
playsinline: true,
},
});
quality
- Type:
Array - Default:
[]
Custom quality, The type of quality is an object
default
- Type:
Boolean - Default:
false
Whether the default quality, if not specified, the first quality will be taken
name
- Type:
String - Default:
''
Quality name
url
- Type:
String - Default:
''
Quality url
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
quality: [
{
default: true,
name: 'SD 480P',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
},
{
name: 'HD 720P',
url: url + '/video/one-more-time-one-more-chance-720p.mp4',
},
],
});
highlight
- Type:
Array - Default:
[]
Custom highlight, The type of highlight is an object
time
- Type:
Number - Default:
0
highlight seconds
text
- Type:
String - Default:
''
highlight text
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
highlight: [
{
time: 60,
text: 'One more chance',
},
{
time: 120,
text: '谁でもいいはずなのに',
},
{
time: 180,
text: '夏の想い出がまわる',
},
{
time: 240,
text: 'こんなとこにあるはずもないのに',
},
{
time: 300,
text: '--终わり--',
},
],
});
layers
- Type:
Array - Default:
[]
Custom layer, The type of layer is an object or function
disable
- Type:
Boolean - Default:
false
Whether to disable
name
- Type:
String - Default:
layer${id}
The unique name , used for the class name
index
- Type:
Number - Default:
${id}
The unique index, used for the priority level
html
- Type:
String、Element - Default:
''
The dom element
style
- Type:
Object - Default:
{}
The style object
click
- Type:
Function - Default:
undefined
Click event
mounted
- Type:
Function - Default:
undefined
Callback after mounted
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
layers: [
{
html: `<img style="width: 100px" src="${url}/image/your-name.png">`,
style: {
position: 'absolute',
top: '20px',
right: '20px',
opacity: '.9',
},
},
],
});
contextmenu
- Type:
Array - Default:
[]
Custom contextmenu, The type of layer is an object or function
disable
- Type:
Boolean - Default:
false
Whether to disable
name
- Type:
String - Default:
layer${id}
The unique name , used for the class name
index
- Type:
Number - Default:
${id}
The unique index, used for the priority level
html
- Type:
String、Element - Default:
''
The dom element
style
- Type:
Object - Default:
{}
The style object
click
- Type:
Function - Default:
undefined
Click event
mounted
- Type:
Function - Default:
undefined
Callback after mounted
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
contextmenu: [
{
html: '自定义菜单 - 天亮请关灯 Σ(っ °Д °;)っ',
click: function() {
document.querySelector('.video-wrap').classList.toggle('dark');
this.hide();
},
},
],
});
controls
- Type:
Array - Default:
[]
Custom controls, The type of controls is an object or function
disable
- Type:
Boolean - Default:
false
Whether to disable
name
- Type:
String - Default:
layer${id}
The unique name , used for the class name
index
- Type:
Number - Default:
${id}
The unique index, used for the priority level
html
- Type:
String、Element - Default:
''
The dom element
style
- Type:
Object - Default:
{}
The style object
click
- Type:
Function - Default:
undefined
Click event
mounted
- Type:
Function - Default:
undefined
Callback after mounted
position
- Type:
String - Default:
undefined
The position where the controller appears: top, left, right
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
controls: [
function myController(art) {
return {
name: 'myController',
position: 'right',
index: 10,
html: 'myController',
click: function() {
console.log('myController');
},
};
},
],
});
plugins
- Type:
Array - Default:
[]
Custom plugins, The type of plugin is a function
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.mp4',
plugins: [
function myPlugin(art) {
return {
// This exposes plugin properties or methods for others to use. Like:
something: 'something',
doSomething: function() {
console.log('Do something here...');
},
};
},
],
});
art.plugins.myPlugin.doSomething();
Instance properties
Instance
| propertie | type | Description |
|---|---|---|
isFocus |
Boolean |
Return to focus state |
isPlaying |
Boolean |
Return to play state |
destroy |
Function |
Destroy instance, will not remove dom by default |
player
| propertie | type | Description |
|---|---|---|
aspectRatioState |
String |
Return the current value of aspect ratio |
aspectRatio |
Function |
Set aspect ratio, Currently only accepts three values:default, 4:3, 16:9 |
aspectRatioRemove |
Function |
Remove aspect ratio |
aspectRatioReset |
Function |
Recalculate the aspect ratio |
autoSizeState |
Boolean |
Return the current state of auto size |
autoSize |
Function |
Set auto size |
autoSizeRemove |
Function |
Remove the auto size |
currentTime |
Number |
Geter and Setter of the current time |
duration |
Number |
Geter of the duration |
flipState |
String |
Return the current state of flip |
flip |
Function |
Set flip, Currently only accepts three values:normal, horizontal, vertical |
flipRemove |
Function |
Remove the flip |
fullscreenState |
Boolean |
Return the current state of fullscreen |
fullscreenEnabled |
Function |
Enable fullscreen |
fullscreenExit |
Function |
Exit fullscreen |
fullscreenToggle |
Function |
Toggle fullscreen |
fullscreenWebState |
Boolean |
Return the current state of web fullscreen |
fullscreenWebEnabled |
Function |
Enable web fullscreen |
fullscreenWebExit |
Function |
Exit web fullscreen |
fullscreenWebToggle |
Function |
Toggle web fullscreen |
loaded |
Number |
Return the proportion of the load |
pause |
Function |
Pause playback |
pipState |
Boolean |
Return the current state of pip |
pipEnabled |
Function |
Enable pip |
pipExit |
Function |
Exit pip |
pipToggle |
Function |
Toggle pip |
playbackRateState |
String |
Return the current state of playback rate |
playbackRate |
Function |
Set playbackRate, Currently only accepts three values:0.5, 0.75, 1.0, 1.25, 1.5, 2.0 |
playbackRateRemove |
Function |
Remove the playback rate |
playbackRateReset |
Function |
Recalculate the playback rate |
played |
Number |
Return the proportion of the load |
screenshot |
Function |
Download the screenshot |
seek |
Function |
Set the current time |
switchQuality |
Function |
Switch quality, and you can give it a name |
toggle |
Function |
Toggle play and pause |
volume |
Number |
Geter and Setter of the current volume |
muted |
Boolean |
Geter and Setter of the muted |
storage
| propertie | type | Description |
|---|---|---|
get |
Function |
Get the storage |
set |
Function |
Set the storage |
i18n
| propertie | type | Description |
|---|---|---|
get |
Function |
Get the a i18n value |
update |
Function |
Update the i18n |
notice
- Type:
Object
TODO...
events
- Type:
Object
TODO...
layers
- Type:
Object
TODO...
controls
- Type:
Object
TODO...
contextmenu
- Type:
Object
TODO...
subtitle
- Type:
Object
TODO...
loading
- Type:
Object
TODO...
mask
- Type:
Object
TODO...
setting
- Type:
Object
TODO...
plugins
- Type:
Object
TODO...
Class static properties
All properties are read only
| propertie | Description |
|---|---|
Artplayer.version |
Version Information |
Artplayer.env |
Environmental variable |
Artplayer.config |
Configuration information |
Artplayer.utils |
Utils function |
Artplayer.DEFAULTS |
Default option |
Artplayer.instances |
Instance collection |
Event
TODO...
Third-party libraries
flv.js
- HomePage: https://github.com/Bilibili/flv.js
var url = 'https://blog.zhw-island.com/assets-cdn';
var art = new Artplayer({
container: '.artplayer-app',
url: url + '/video/one-more-time-one-more-chance-480p.flv',
customType: {
flv: function(video, url) {
const flvPlayer = flvjs.createPlayer({
type: 'flv',
url: url,
});
flvPlayer.attachMediaElement(video);
flvPlayer.load();
},
},
});
hls.js
- HomePage: https://github.com/video-dev/hls.js
var art = new Artplayer({
container: '.artplayer-app',
url: 'https://video-dev.github.io/streams/x36xhzz/x36xhzz.m3u8',
customType: {
m3u8: function(video, url) {
var hls = new Hls();
hls.loadSource(url);
hls.attachMedia(video);
},
},
});
dash.js
var art = new Artplayer({
container: '.artplayer-app',
url: 'https://dash.akamaized.net/envivio/EnvivioDash3/manifest.mpd',
customType: {
mpd: function(video, url) {
var player = dashjs.MediaPlayer().create();
player.initialize(video, url, true);
},
},
});
shaka-player
- HomePage: https://github.com/google/shaka-player
var art = new Artplayer({
container: '.artplayer-app',
url: '//storage.googleapis.com/shaka-demo-assets/angel-one/dash.mpd',
customType: {
mpd: function(video, url) {
shaka.polyfill.installAll();
var player = new shaka.Player(video);
player.load(url);
},
},
});
webtorrent
- HomePage: https://github.com/webtorrent/webtorrent
var art = new Artplayer({
container: '.artplayer-app',
url:
'magnet:?xt=urn:btih:6a9759bffd5c0af65319979fb7832189f4f3c35d&dn=sintel.mp4&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com&tr=wss%3A%2F%2Ftracker.webtorrent.io&ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Fsintel-1024-surround.mp4',
type: 'torrent',
customType: {
torrent: function(video, url, art) {
var client = new WebTorrent();
art.loading.show();
client.add(url, function(torrent) {
var file = torrent.files[0];
file.renderTo(video, {
autoplay: true,
});
});
},
},
});