xgplayer 2.32.2 → 2.32.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/browser/controls/danmu.js +3 -1
- package/browser/controls/errorRetry.js +1 -1
- package/browser/controls/nativeTextTrack.js +1 -1
- package/browser/core_player.js +1 -1
- package/browser/core_player.js.map +1 -1
- package/browser/index.js +7 -5
- package/browser/index.js.map +1 -1
- package/browser/simple_player.js +1 -1
- package/browser/simple_player.js.map +1 -1
- package/dist/controls/danmu.js +3 -1
- package/dist/controls/errorRetry.js +1 -1
- package/dist/controls/nativeTextTrack.js +1 -1
- package/dist/core_player.js +6 -7
- package/dist/core_player.js.map +1 -1
- package/dist/index.js +2881 -1887
- package/dist/index.js.map +1 -1
- package/dist/index.min.css +1 -0
- package/dist/index.min.js +2 -0
- package/dist/index.min.js.map +1 -0
- package/dist/simple_player.js +6 -7
- package/dist/simple_player.js.map +1 -1
- package/es/controls/danmu.js +3 -1
- package/es/controls/errorRetry.js +1 -1
- package/es/controls/nativeTextTrack.js +1 -1
- package/es/core_player.js +1 -1
- package/es/core_player.js.map +1 -1
- package/es/index.js +7 -5
- package/es/index.js.map +1 -1
- package/es/simple_player.js +1 -1
- package/es/simple_player.js.map +1 -1
- package/package.json +11 -2
- package/types/index.d.ts +0 -11
- package/postcss.config.js +0 -7
- package/src/bind/airplay.js +0 -10
- package/src/bind/cssFullscreen.js +0 -10
- package/src/bind/danmu.js +0 -10
- package/src/bind/definition.js +0 -10
- package/src/bind/download.js +0 -10
- package/src/bind/enter.js +0 -8
- package/src/bind/error.js +0 -8
- package/src/bind/errorRetry.js +0 -8
- package/src/bind/flex.js +0 -8
- package/src/bind/fullscreen.js +0 -10
- package/src/bind/i18n.js +0 -8
- package/src/bind/keyboard.js +0 -8
- package/src/bind/loading.js +0 -8
- package/src/bind/localPreview.js +0 -10
- package/src/bind/memoryPlay.js +0 -10
- package/src/bind/miniplayer.js +0 -10
- package/src/bind/mobile.js +0 -8
- package/src/bind/nativeTextTrack.js +0 -8
- package/src/bind/pc.js +0 -8
- package/src/bind/pip.js +0 -10
- package/src/bind/play.js +0 -10
- package/src/bind/playNext.js +0 -10
- package/src/bind/playbackRate.js +0 -8
- package/src/bind/poster.js +0 -8
- package/src/bind/progress.js +0 -8
- package/src/bind/reload.js +0 -10
- package/src/bind/replay.js +0 -10
- package/src/bind/rotate.js +0 -10
- package/src/bind/screenShot.js +0 -10
- package/src/bind/stallCheck.js +0 -8
- package/src/bind/start.js +0 -10
- package/src/bind/textTrack.js +0 -8
- package/src/bind/time.js +0 -8
- package/src/bind/volume.js +0 -10
- package/src/controls/airplay.js +0 -20
- package/src/controls/cssFullscreen.js +0 -49
- package/src/controls/danmu.js +0 -75
- package/src/controls/definition.js +0 -13
- package/src/controls/download.js +0 -28
- package/src/controls/errorRetry.js +0 -132
- package/src/controls/fullscreen.js +0 -145
- package/src/controls/keyboard.js +0 -214
- package/src/controls/localPreview.js +0 -32
- package/src/controls/memoryPlay.js +0 -14
- package/src/controls/miniplayer.js +0 -128
- package/src/controls/mobile.js +0 -100
- package/src/controls/pc.js +0 -123
- package/src/controls/pip.js +0 -52
- package/src/controls/play.js +0 -34
- package/src/controls/playNext.js +0 -29
- package/src/controls/reload.js +0 -24
- package/src/controls/replay.js +0 -30
- package/src/controls/rotate.js +0 -99
- package/src/controls/screenShot.js +0 -65
- package/src/controls/stallCheck.js +0 -38
- package/src/controls/start.js +0 -60
- package/src/controls/textTrack.js +0 -182
- package/src/controls/volume.js +0 -178
- package/src/controls.js +0 -36
- package/src/core_player.js +0 -13
- package/src/error.js +0 -74
- package/src/index.js +0 -57
- package/src/player.js +0 -553
- package/src/proxy.js +0 -495
- package/src/simple_player.js +0 -42
- package/src/skin/assets/airplay.svg +0 -1
- package/src/skin/assets/download.svg +0 -14
- package/src/skin/assets/exitCssFull.svg +0 -3
- package/src/skin/assets/exitFull.svg +0 -3
- package/src/skin/assets/loading.svg +0 -3
- package/src/skin/assets/panel.svg +0 -4
- package/src/skin/assets/pause.svg +0 -3
- package/src/skin/assets/play.svg +0 -3
- package/src/skin/assets/playNext.svg +0 -3
- package/src/skin/assets/reload.svg +0 -3
- package/src/skin/assets/replay.svg +0 -3
- package/src/skin/assets/requestCssFull.svg +0 -3
- package/src/skin/assets/requestFull.svg +0 -3
- package/src/skin/assets/rotate.svg +0 -11
- package/src/skin/assets/startPause.svg +0 -3
- package/src/skin/assets/startPlay.svg +0 -3
- package/src/skin/assets/volumeLarge.svg +0 -4
- package/src/skin/assets/volumeMuted.svg +0 -4
- package/src/skin/assets/volumeSmall.svg +0 -4
- package/src/skin/controls/airplay.js +0 -44
- package/src/skin/controls/cssFullscreen.js +0 -36
- package/src/skin/controls/danmu.js +0 -214
- package/src/skin/controls/definition.js +0 -251
- package/src/skin/controls/download.js +0 -29
- package/src/skin/controls/enter.js +0 -21
- package/src/skin/controls/error.js +0 -57
- package/src/skin/controls/flex.js +0 -13
- package/src/skin/controls/fullscreen.js +0 -43
- package/src/skin/controls/i18n.js +0 -168
- package/src/skin/controls/loading.js +0 -17
- package/src/skin/controls/localPreview.js +0 -18
- package/src/skin/controls/memoryPlay.js +0 -39
- package/src/skin/controls/miniplayer.js +0 -26
- package/src/skin/controls/nativeTextTrack.js +0 -153
- package/src/skin/controls/pip.js +0 -26
- package/src/skin/controls/play.js +0 -43
- package/src/skin/controls/playNext.js +0 -41
- package/src/skin/controls/playbackRate.js +0 -141
- package/src/skin/controls/poster.js +0 -18
- package/src/skin/controls/progress.js +0 -407
- package/src/skin/controls/reload.js +0 -29
- package/src/skin/controls/replay.js +0 -56
- package/src/skin/controls/rotate.js +0 -29
- package/src/skin/controls/screenShot.js +0 -27
- package/src/skin/controls/start.js +0 -62
- package/src/skin/controls/textTrack.js +0 -113
- package/src/skin/controls/time.js +0 -40
- package/src/skin/controls/volume.js +0 -63
- package/src/skin/index.js +0 -63
- package/src/skin/style/common/animation.scss +0 -16
- package/src/skin/style/common/svg-url.scss +0 -70
- package/src/skin/style/controls/airplay.scss +0 -35
- package/src/skin/style/controls/controls.scss +0 -40
- package/src/skin/style/controls/cssfullscreen.scss +0 -103
- package/src/skin/style/controls/danmu.scss +0 -333
- package/src/skin/style/controls/definition.scss +0 -76
- package/src/skin/style/controls/download.scss +0 -45
- package/src/skin/style/controls/enter.scss +0 -55
- package/src/skin/style/controls/error.scss +0 -34
- package/src/skin/style/controls/fullscreen.scss +0 -60
- package/src/skin/style/controls/icon.scss +0 -12
- package/src/skin/style/controls/live.scss +0 -9
- package/src/skin/style/controls/loading.scss +0 -44
- package/src/skin/style/controls/memoryPlay.scss +0 -28
- package/src/skin/style/controls/miniplayer.scss +0 -104
- package/src/skin/style/controls/pip.scss +0 -42
- package/src/skin/style/controls/placeholder.scss +0 -7
- package/src/skin/style/controls/play.scss +0 -79
- package/src/skin/style/controls/playNext.scss +0 -44
- package/src/skin/style/controls/playbackRate.scss +0 -82
- package/src/skin/style/controls/poster.scss +0 -19
- package/src/skin/style/controls/progress.scss +0 -182
- package/src/skin/style/controls/reload.scss +0 -43
- package/src/skin/style/controls/replay.scss +0 -46
- package/src/skin/style/controls/rotate.scss +0 -41
- package/src/skin/style/controls/screenShot.scss +0 -42
- package/src/skin/style/controls/start.scss +0 -78
- package/src/skin/style/controls/textTrack.scss +0 -87
- package/src/skin/style/controls/time.scss +0 -24
- package/src/skin/style/controls/tips.scss +0 -24
- package/src/skin/style/controls/videoProxy.scss +0 -6
- package/src/skin/style/controls/volume.scss +0 -143
- package/src/skin/style/index.scss +0 -88
- package/src/utils/sniffer.js +0 -47
- package/src/utils/url.js +0 -10
- package/src/utils/util.js +0 -358
- package/src/utils/xgplayerTimeRange.js +0 -17
- package/src/version.js +0 -7
- package/version.json +0 -3
- package/webpack.config.js +0 -168
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
import SubTitles from 'xgplayer-subtitles'
|
|
2
|
-
const defaultStyle = {
|
|
3
|
-
follow: true, // 是否跟随控制栏调整位置
|
|
4
|
-
mode: 'stroke', // 字体显示模式,默认是描边
|
|
5
|
-
followBottom: 50, // 跟随底部控制栏的高度
|
|
6
|
-
fitVideo: true, // 是否跟随视频自动调整字号
|
|
7
|
-
offsetBottom: 2, // 字幕距离画面底部百分比,默认2%
|
|
8
|
-
baseSizeX: 49, // 横屏视频适配基准字号
|
|
9
|
-
baseSizeY: 28, // 竖屏视频适配基准字号
|
|
10
|
-
minSize: 16, // pc端最小字号
|
|
11
|
-
minMobileSize: 13, // 移动端最小字号
|
|
12
|
-
line: 'double', // 最大显示行数 single/double/three
|
|
13
|
-
fontColor: '#fff' // 字体颜色
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
// function createSubTitle (textTrack, style = {}, defaultOpen = true) {
|
|
17
|
-
// const config = {
|
|
18
|
-
// subTitles: textTrack,
|
|
19
|
-
// defaultOpen: defaultOpen
|
|
20
|
-
// }
|
|
21
|
-
|
|
22
|
-
// Object.keys(style).map(key => {
|
|
23
|
-
// config[key] = style[key]
|
|
24
|
-
// })
|
|
25
|
-
// return new SubTitles(config)
|
|
26
|
-
// }
|
|
27
|
-
|
|
28
|
-
class XgSubtitles {
|
|
29
|
-
constructor (player, list, style) {
|
|
30
|
-
const subtitle = this.create(list, style, player.textTrackShowDefault)
|
|
31
|
-
subtitle.attachPlayer(player)
|
|
32
|
-
this.subtitle = subtitle
|
|
33
|
-
this.player = player
|
|
34
|
-
this.positionData = {
|
|
35
|
-
vBottom: 0,
|
|
36
|
-
marginBottom: 0
|
|
37
|
-
}
|
|
38
|
-
this.isActive = false
|
|
39
|
-
this.followBottom = style.followBottom;
|
|
40
|
-
['onSubtitleResize', 'onFocus', 'onBlur'].map(item => {
|
|
41
|
-
this[item] = this[item].bind(this)
|
|
42
|
-
})
|
|
43
|
-
|
|
44
|
-
if (player.controls && style.follow) {
|
|
45
|
-
this.subtitle.on('resize', this.onSubtitleResize)
|
|
46
|
-
player.on('focus', this.onFocus)
|
|
47
|
-
player.on('blur', this.onBlur)
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
create (textTrack, style = {}, defaultOpen = true) {
|
|
52
|
-
const config = {
|
|
53
|
-
subTitles: textTrack,
|
|
54
|
-
defaultOpen: defaultOpen
|
|
55
|
-
}
|
|
56
|
-
Object.keys(style).map(key => {
|
|
57
|
-
config[key] = style[key]
|
|
58
|
-
})
|
|
59
|
-
return new SubTitles(config)
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
switch (subtitle) {
|
|
63
|
-
return this.subtitle.switch(subtitle)
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
switchOff () {
|
|
67
|
-
return this.subtitle.switchOff()
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
setSubTitles (subtitles, showDefault, isNeedMove) {
|
|
71
|
-
return this.subtitle.setSubTitles(subtitles, showDefault, isNeedMove)
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
onFocus () {
|
|
75
|
-
const { marginBottom, vBottom } = this.positionData
|
|
76
|
-
if (this.isActive || !marginBottom) {
|
|
77
|
-
return
|
|
78
|
-
}
|
|
79
|
-
this.isActive = true
|
|
80
|
-
let bottom = marginBottom + vBottom
|
|
81
|
-
if (this.followBottom > bottom) {
|
|
82
|
-
bottom = this.followBottom
|
|
83
|
-
}
|
|
84
|
-
this.subtitle && (this.subtitle.root.style.bottom = `${bottom}px`)
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
onBlur () {
|
|
88
|
-
this.isActive = false
|
|
89
|
-
const bottom = this.positionData.vBottom + this.positionData.marginBottom
|
|
90
|
-
this.subtitle && (this.subtitle.root.style.bottom = `${bottom}px`)
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
onSubtitleResize (data) {
|
|
94
|
-
this.positionData.vBottom = data.vBottom
|
|
95
|
-
this.positionData.marginBottom = data.marginBottom
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
destroy () {
|
|
99
|
-
this.subtitle.off('resize', this.onSubtitleResize)
|
|
100
|
-
this.player.off('focus', this.onFocus)
|
|
101
|
-
this.player.off('blur', this.onBlur)
|
|
102
|
-
this.subtitle.destroy()
|
|
103
|
-
this.subtitle = null
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
let textTrack = function () {
|
|
108
|
-
const player = this
|
|
109
|
-
const { textTrack } = player.config
|
|
110
|
-
if (!textTrack) {
|
|
111
|
-
return
|
|
112
|
-
}
|
|
113
|
-
let textTrackStyle = player.config.textTrackStyle || {}
|
|
114
|
-
Object.keys(defaultStyle).map(key => {
|
|
115
|
-
if (textTrackStyle[key] === undefined) {
|
|
116
|
-
textTrackStyle[key] = defaultStyle[key]
|
|
117
|
-
}
|
|
118
|
-
})
|
|
119
|
-
player.textTrackShowDefault = false
|
|
120
|
-
player.config.textTrack.map((item, index) => {
|
|
121
|
-
if (!item.id && !item.language) {
|
|
122
|
-
item.id = index
|
|
123
|
-
}
|
|
124
|
-
!item.url && (item.url = item.src)
|
|
125
|
-
!item.language && (item.language = item.srclang)
|
|
126
|
-
item.isDefault === undefined && (item.isDefault = item.default)
|
|
127
|
-
!player.textTrackShowDefault && (player.textTrackShowDefault = item.isDefault || item.default)
|
|
128
|
-
})
|
|
129
|
-
|
|
130
|
-
this.subTitles = new XgSubtitles(player, player.config.textTrack, textTrackStyle)
|
|
131
|
-
|
|
132
|
-
player.setSubTitles = (textTrack, needRemove = true) => {
|
|
133
|
-
let showDefault = false
|
|
134
|
-
textTrack.map((item, index) => {
|
|
135
|
-
if (!item.id && !item.language) {
|
|
136
|
-
item.id = index
|
|
137
|
-
}
|
|
138
|
-
!item.url && (item.url = item.src)
|
|
139
|
-
!item.language && (item.language = item.srclang)
|
|
140
|
-
item.isDefault === undefined && (item.isDefault = item.default)
|
|
141
|
-
item.isDefault && (showDefault = true)
|
|
142
|
-
})
|
|
143
|
-
player.textTrackShowDefault = showDefault
|
|
144
|
-
this.subTitles.setSubTitles(textTrack, showDefault, needRemove)
|
|
145
|
-
player.emit('subtitle_change', {
|
|
146
|
-
off: false,
|
|
147
|
-
isListUpdate: true,
|
|
148
|
-
list: textTrack
|
|
149
|
-
})
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
player.switchSubTitle = (subtitle = { id: '', language: '' }) => {
|
|
153
|
-
this.subTitles.switch(subtitle).then(data => {
|
|
154
|
-
if (data.code === 0) {
|
|
155
|
-
subtitle.off = false
|
|
156
|
-
subtitle.isListUpdate = false
|
|
157
|
-
subtitle.list = []
|
|
158
|
-
player.emit('subtitle_change', subtitle)
|
|
159
|
-
}
|
|
160
|
-
})
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
player.switchOffSubtile = () => {
|
|
164
|
-
this.subTitles.switchOff()
|
|
165
|
-
player.emit('subtitle_change', {
|
|
166
|
-
off: true,
|
|
167
|
-
isListUpdate: false,
|
|
168
|
-
list: []
|
|
169
|
-
})
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
function onDestroy () {
|
|
173
|
-
this.subTitles.destroy()
|
|
174
|
-
this.subTitles = null
|
|
175
|
-
}
|
|
176
|
-
player.once('destroy', onDestroy)
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
export default {
|
|
180
|
-
name: 'textTrack',
|
|
181
|
-
method: textTrack
|
|
182
|
-
}
|
package/src/controls/volume.js
DELETED
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
import { addClass, removeClass, event } from '../utils/util'
|
|
2
|
-
import sniffer from '../utils/sniffer'
|
|
3
|
-
|
|
4
|
-
let volume = function () {
|
|
5
|
-
let player = this
|
|
6
|
-
let root = player.root
|
|
7
|
-
let container, slider, bar, selected
|
|
8
|
-
function onCanplay () {
|
|
9
|
-
// player.volume = sniffer.device === 'mobile' ? 1 : player.config.volume
|
|
10
|
-
if(!player.controls) return
|
|
11
|
-
player.volume = player.config.volume
|
|
12
|
-
container = player.controls.querySelector('.xgplayer-volume')
|
|
13
|
-
if(!container) return
|
|
14
|
-
slider = container.querySelector('.xgplayer-slider')
|
|
15
|
-
bar = container.querySelector('.xgplayer-bar')
|
|
16
|
-
selected = container.querySelector('.xgplayer-drag')
|
|
17
|
-
if (sniffer.device === 'mobile') {
|
|
18
|
-
if(player.volume === 0) {
|
|
19
|
-
player.video.muted = true
|
|
20
|
-
}
|
|
21
|
-
onVolumeChange()
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
player.once('canplay', onCanplay)
|
|
25
|
-
|
|
26
|
-
function onVolumeBarClick (e) {
|
|
27
|
-
if(!slider) return
|
|
28
|
-
player.video.muted = false
|
|
29
|
-
slider.focus()
|
|
30
|
-
event(e)
|
|
31
|
-
|
|
32
|
-
let barRect = bar.getBoundingClientRect()
|
|
33
|
-
let pos = {x: e.clientX, y: e.clientY}
|
|
34
|
-
let height = selected.getBoundingClientRect().height
|
|
35
|
-
let isMove = false
|
|
36
|
-
let onMove = function (e) {
|
|
37
|
-
e.preventDefault()
|
|
38
|
-
e.stopPropagation()
|
|
39
|
-
event(e)
|
|
40
|
-
isMove = true
|
|
41
|
-
let w = height - e.clientY + pos.y
|
|
42
|
-
let now = w / barRect.height
|
|
43
|
-
selected.style.height = `${w}px`
|
|
44
|
-
player.volume = Math.max(Math.min(now, 1), 0)
|
|
45
|
-
}
|
|
46
|
-
let onUp = function (e) {
|
|
47
|
-
e.preventDefault()
|
|
48
|
-
e.stopPropagation()
|
|
49
|
-
event(e)
|
|
50
|
-
window.removeEventListener('mousemove', onMove)
|
|
51
|
-
window.removeEventListener('touchmove', onMove)
|
|
52
|
-
window.removeEventListener('mouseup', onUp)
|
|
53
|
-
window.removeEventListener('touchend', onUp)
|
|
54
|
-
|
|
55
|
-
if (!isMove) {
|
|
56
|
-
let w = barRect.height - (e.clientY - barRect.top)
|
|
57
|
-
let now = w / barRect.height
|
|
58
|
-
selected.style.height = `${w}px`
|
|
59
|
-
if (now <= 0) {
|
|
60
|
-
if (player.volume > 0) {
|
|
61
|
-
selected.volume = player.video.volume
|
|
62
|
-
} else {
|
|
63
|
-
now = selected.volume
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
player.volume = Math.max(Math.min(now, 1), 0)
|
|
67
|
-
}
|
|
68
|
-
slider.volume = player.volume
|
|
69
|
-
isMove = false
|
|
70
|
-
}
|
|
71
|
-
window.addEventListener('mousemove', onMove)
|
|
72
|
-
window.addEventListener('touchmove', onMove)
|
|
73
|
-
window.addEventListener('mouseup', onUp)
|
|
74
|
-
window.addEventListener('touchend', onUp)
|
|
75
|
-
return false
|
|
76
|
-
}
|
|
77
|
-
player.on('volumeBarClick', onVolumeBarClick)
|
|
78
|
-
|
|
79
|
-
function onVolumeIconClick () {
|
|
80
|
-
if (sniffer.device === 'mobile') {
|
|
81
|
-
if (player.video.muted) {
|
|
82
|
-
player.video.muted = false
|
|
83
|
-
player.emit('unmute')
|
|
84
|
-
player.volume = 1
|
|
85
|
-
} else {
|
|
86
|
-
player.video.muted = true
|
|
87
|
-
player.emit('mute')
|
|
88
|
-
player.volume = 0
|
|
89
|
-
}
|
|
90
|
-
} else {
|
|
91
|
-
if(!slider) return
|
|
92
|
-
player.video.muted = false
|
|
93
|
-
if (player.volume < 0.1) {
|
|
94
|
-
if (slider.volume < 0.1) {
|
|
95
|
-
player.volume = 0.6
|
|
96
|
-
} else {
|
|
97
|
-
player.volume = slider.volume
|
|
98
|
-
}
|
|
99
|
-
player.emit('unmute')
|
|
100
|
-
} else {
|
|
101
|
-
player.volume = 0
|
|
102
|
-
player.emit('mute')
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
// onVolumeChange ()
|
|
106
|
-
}
|
|
107
|
-
player.on('volumeIconClick', onVolumeIconClick)
|
|
108
|
-
|
|
109
|
-
function onVolumeIconEnter () {
|
|
110
|
-
addClass(root, 'xgplayer-volume-active')
|
|
111
|
-
if (container) {
|
|
112
|
-
container.focus()
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
player.on('volumeIconEnter', onVolumeIconEnter)
|
|
116
|
-
|
|
117
|
-
function onVolumeIconLeave () {
|
|
118
|
-
removeClass(root, 'xgplayer-volume-active')
|
|
119
|
-
}
|
|
120
|
-
player.on('volumeIconLeave', onVolumeIconLeave)
|
|
121
|
-
|
|
122
|
-
let _changeTimer = null
|
|
123
|
-
function onVolumeChange () {
|
|
124
|
-
if (_changeTimer) {
|
|
125
|
-
clearTimeout(_changeTimer)
|
|
126
|
-
}
|
|
127
|
-
_changeTimer = setTimeout(() => {
|
|
128
|
-
if (sniffer.device === 'mobile') {
|
|
129
|
-
removeClass(root, 'xgplayer-volume-muted')
|
|
130
|
-
removeClass(root, 'xgplayer-volume-large')
|
|
131
|
-
if (player.video.muted || player.video.defaultMuted) {
|
|
132
|
-
if (!player.video.muted) {
|
|
133
|
-
player.video.muted = true
|
|
134
|
-
}
|
|
135
|
-
player.video.defaultMuted = false
|
|
136
|
-
addClass(root, 'xgplayer-volume-muted')
|
|
137
|
-
} else {
|
|
138
|
-
addClass(root, 'xgplayer-volume-large')
|
|
139
|
-
}
|
|
140
|
-
} else {
|
|
141
|
-
removeClass(root, 'xgplayer-volume-muted')
|
|
142
|
-
removeClass(root, 'xgplayer-volume-small')
|
|
143
|
-
removeClass(root, 'xgplayer-volume-large')
|
|
144
|
-
if (player.volume === 0 || player.muted) {
|
|
145
|
-
addClass(root, 'xgplayer-volume-muted')
|
|
146
|
-
} else if (player.volume < 0.5) {
|
|
147
|
-
addClass(root, 'xgplayer-volume-small')
|
|
148
|
-
} else {
|
|
149
|
-
addClass(root, 'xgplayer-volume-large')
|
|
150
|
-
}
|
|
151
|
-
if (!bar) return
|
|
152
|
-
let containerHeight = bar.getBoundingClientRect().height || 76
|
|
153
|
-
selected.style.height = `${player.volume * containerHeight}px`
|
|
154
|
-
}
|
|
155
|
-
}, 50)
|
|
156
|
-
}
|
|
157
|
-
player.on('volumechange', onVolumeChange)
|
|
158
|
-
|
|
159
|
-
function onDestroy () {
|
|
160
|
-
player.off('canplay', onCanplay)
|
|
161
|
-
player.off('volumeBarClick', onVolumeBarClick)
|
|
162
|
-
player.off('volumeIconClick', onVolumeIconClick)
|
|
163
|
-
player.off('volumeIconEnter', onVolumeIconEnter)
|
|
164
|
-
player.off('volumeIconLeave', onVolumeIconLeave)
|
|
165
|
-
player.off('volumechange', onVolumeChange)
|
|
166
|
-
player.off('destroy', onDestroy)
|
|
167
|
-
if (_changeTimer) {
|
|
168
|
-
clearTimeout(_changeTimer);
|
|
169
|
-
_changeTimer = null;
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
player.once('destroy', onDestroy)
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
export default {
|
|
176
|
-
name: 'volume',
|
|
177
|
-
method: volume
|
|
178
|
-
}
|
package/src/controls.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import * as Controls from './controls/*.js'
|
|
2
|
-
import * as Skin from './skin/controls/*.js';
|
|
3
|
-
|
|
4
|
-
let keyList = []
|
|
5
|
-
for (let k in Controls.controls) {
|
|
6
|
-
keyList.push(k)
|
|
7
|
-
}
|
|
8
|
-
for (let k in Skin.skin.controls) {
|
|
9
|
-
if(keyList.indexOf(k) < 0) {
|
|
10
|
-
keyList.push(k)
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
let controls = {}
|
|
14
|
-
keyList.forEach(item => {
|
|
15
|
-
controls[item] = {
|
|
16
|
-
name: item
|
|
17
|
-
}
|
|
18
|
-
if(Controls.controls[item]) {
|
|
19
|
-
if(Skin.skin.controls[item]) {
|
|
20
|
-
controls[item].method = function () {
|
|
21
|
-
Controls.controls[item].method.call(this)
|
|
22
|
-
Skin.skin.controls[item].method.call(this)
|
|
23
|
-
}
|
|
24
|
-
} else {
|
|
25
|
-
controls[item].method = function () {
|
|
26
|
-
Controls.controls[item].method.call(this)
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
} else {
|
|
30
|
-
controls[item].method = function () {
|
|
31
|
-
Skin.skin.controls[item].method.call(this)
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
})
|
|
35
|
-
|
|
36
|
-
export default controls
|
package/src/core_player.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import Player from './player'
|
|
2
|
-
|
|
3
|
-
import Mobile from './controls/mobile'
|
|
4
|
-
import Pc from './controls/pc'
|
|
5
|
-
import Start from './controls/start'
|
|
6
|
-
import S_start from './skin/controls/start'
|
|
7
|
-
|
|
8
|
-
let controlLst = [Mobile, Pc, Start, S_start]
|
|
9
|
-
controlLst.forEach(function(control) {
|
|
10
|
-
Player.install(control.name, control.method)
|
|
11
|
-
})
|
|
12
|
-
|
|
13
|
-
export default Player
|
package/src/error.js
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import {version} from '../version.json'
|
|
2
|
-
const ErrorTypes = {
|
|
3
|
-
network: {
|
|
4
|
-
code: 1,
|
|
5
|
-
msg: '视频下载错误',
|
|
6
|
-
remark: '只要视频下载错误就使用此类型,无论是video本身的超时还是xhr的分段请求超时或者资源不存在'
|
|
7
|
-
},
|
|
8
|
-
mse: {
|
|
9
|
-
code: 2,
|
|
10
|
-
msg: '流追加错误',
|
|
11
|
-
remark: '追加流的时候如果类型不对、无法被正确解码则会触发此类错误'
|
|
12
|
-
},
|
|
13
|
-
parse: {
|
|
14
|
-
code: 3,
|
|
15
|
-
msg: '解析错误',
|
|
16
|
-
remark: 'mp4、hls、flv我们都是使用js进行格式解析,如果解析失败则会触发此类错误'
|
|
17
|
-
},
|
|
18
|
-
format: {
|
|
19
|
-
code: 4,
|
|
20
|
-
msg: '格式错误',
|
|
21
|
-
remark: '如果浏览器不支持的格式导致播放错误'
|
|
22
|
-
},
|
|
23
|
-
decoder: {
|
|
24
|
-
code: 5,
|
|
25
|
-
msg: '解码错误',
|
|
26
|
-
remark: '浏览器解码异常会抛出此类型错误'
|
|
27
|
-
},
|
|
28
|
-
runtime: {
|
|
29
|
-
code: 6,
|
|
30
|
-
msg: '语法错误',
|
|
31
|
-
remark: '播放器语法错误'
|
|
32
|
-
},
|
|
33
|
-
timeout: {
|
|
34
|
-
code: 7,
|
|
35
|
-
msg: '播放超时',
|
|
36
|
-
remark: '播放过程中无法正常请求下一个分段导致播放中断'
|
|
37
|
-
},
|
|
38
|
-
other: {
|
|
39
|
-
code: 8,
|
|
40
|
-
msg: '其他错误',
|
|
41
|
-
remark: '不可知的错误或被忽略的错误类型'
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
class Errors {
|
|
46
|
-
constructor (type, currentTime, duration, networkState, readyState, src, currentSrc,
|
|
47
|
-
ended, errd = {line: '', handle: '', msg: '', version: ''}, errorCode, mediaError) {
|
|
48
|
-
let r = {}
|
|
49
|
-
if (arguments.length > 1) {
|
|
50
|
-
r.playerVersion = version // 播放器版本
|
|
51
|
-
r.errorType = type
|
|
52
|
-
r.domain = document.domain // domain
|
|
53
|
-
r.duration = duration // 视频时长
|
|
54
|
-
r.currentTime = currentTime
|
|
55
|
-
r.networkState = networkState
|
|
56
|
-
r.readyState = readyState
|
|
57
|
-
r.currentSrc = currentSrc
|
|
58
|
-
r.src = src
|
|
59
|
-
r.ended = ended
|
|
60
|
-
r.errd = errd // 错误详情
|
|
61
|
-
r.ex = (ErrorTypes[type] || {}).msg // 补充信息
|
|
62
|
-
r.errorCode = errorCode
|
|
63
|
-
r.mediaError = mediaError
|
|
64
|
-
} else {
|
|
65
|
-
const arg = arguments[0]
|
|
66
|
-
Object.keys(arg).map(key => {
|
|
67
|
-
r[key] = arg[key]
|
|
68
|
-
})
|
|
69
|
-
r.ex = ((arg.type && ErrorTypes[arg.type]) || {}).msg
|
|
70
|
-
}
|
|
71
|
-
return r
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
export default Errors
|
package/src/index.js
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import Player from './player'
|
|
2
|
-
|
|
3
|
-
import Airplay from './controls/airplay.js'
|
|
4
|
-
import CssFullscreen from './controls/cssFullscreen.js'
|
|
5
|
-
import Danmu from './controls/danmu.js'
|
|
6
|
-
import Definition from './controls/definition.js'
|
|
7
|
-
import Download from './controls/download.js'
|
|
8
|
-
import ErrorRetryControl from './controls/errorRetry.js'
|
|
9
|
-
import Fullscreen from './controls/fullscreen.js'
|
|
10
|
-
import Keyboard from './controls/keyboard.js'
|
|
11
|
-
import LocalPreview from './controls/localPreview.js'
|
|
12
|
-
import MemoryPlay from './controls/memoryPlay.js'
|
|
13
|
-
import Miniplayer from './controls/miniplayer.js'
|
|
14
|
-
import Mobile from './controls/mobile.js'
|
|
15
|
-
import Pc from './controls/pc.js'
|
|
16
|
-
import Pip from './controls/pip.js'
|
|
17
|
-
import Play from './controls/play.js'
|
|
18
|
-
import PlayNext from './controls/playNext.js'
|
|
19
|
-
import Reload from './controls/reload.js'
|
|
20
|
-
import Replay from './controls/replay.js'
|
|
21
|
-
import Rotate from './controls/rotate.js'
|
|
22
|
-
import ScreenShot from './controls/screenShot.js'
|
|
23
|
-
import StallCheck from './controls/stallCheck.js'
|
|
24
|
-
import Start from './controls/start.js'
|
|
25
|
-
import Volume from './controls/volume.js'
|
|
26
|
-
import TextTrack from './controls/textTrack.js'
|
|
27
|
-
|
|
28
|
-
Player.installAll([
|
|
29
|
-
Airplay,
|
|
30
|
-
CssFullscreen,
|
|
31
|
-
Danmu,
|
|
32
|
-
Definition,
|
|
33
|
-
Download,
|
|
34
|
-
ErrorRetryControl,
|
|
35
|
-
Fullscreen,
|
|
36
|
-
Keyboard,
|
|
37
|
-
LocalPreview,
|
|
38
|
-
MemoryPlay,
|
|
39
|
-
Miniplayer,
|
|
40
|
-
Mobile,
|
|
41
|
-
Pc,
|
|
42
|
-
Pip,
|
|
43
|
-
Play,
|
|
44
|
-
PlayNext,
|
|
45
|
-
Reload,
|
|
46
|
-
Replay,
|
|
47
|
-
Rotate,
|
|
48
|
-
ScreenShot,
|
|
49
|
-
StallCheck,
|
|
50
|
-
Start,
|
|
51
|
-
Volume,
|
|
52
|
-
TextTrack
|
|
53
|
-
])
|
|
54
|
-
|
|
55
|
-
import './skin/index.js';
|
|
56
|
-
|
|
57
|
-
export default Player
|