xgplayer 2.32.1 → 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.
Files changed (188) hide show
  1. package/browser/controls/danmu.js +3 -1
  2. package/browser/controls/errorRetry.js +1 -1
  3. package/browser/controls/nativeTextTrack.js +1 -1
  4. package/browser/core_player.js +1 -1
  5. package/browser/core_player.js.map +1 -1
  6. package/browser/index.js +7 -5
  7. package/browser/index.js.map +1 -1
  8. package/browser/simple_player.js +1 -1
  9. package/browser/simple_player.js.map +1 -1
  10. package/dist/controls/danmu.js +3 -1
  11. package/dist/controls/errorRetry.js +1 -1
  12. package/dist/controls/nativeTextTrack.js +1 -1
  13. package/dist/core_player.js +6 -7
  14. package/dist/core_player.js.map +1 -1
  15. package/dist/index.js +2882 -1888
  16. package/dist/index.js.map +1 -1
  17. package/dist/index.min.css +1 -0
  18. package/dist/index.min.js +2 -0
  19. package/dist/index.min.js.map +1 -0
  20. package/dist/simple_player.js +6 -7
  21. package/dist/simple_player.js.map +1 -1
  22. package/es/controls/danmu.js +3 -1
  23. package/es/controls/errorRetry.js +1 -1
  24. package/es/controls/nativeTextTrack.js +1 -1
  25. package/es/core_player.js +1 -1
  26. package/es/core_player.js.map +1 -1
  27. package/es/index.js +7 -5
  28. package/es/index.js.map +1 -1
  29. package/es/simple_player.js +1 -1
  30. package/es/simple_player.js.map +1 -1
  31. package/package.json +12 -3
  32. package/types/index.d.ts +0 -11
  33. package/postcss.config.js +0 -7
  34. package/src/bind/airplay.js +0 -10
  35. package/src/bind/cssFullscreen.js +0 -10
  36. package/src/bind/danmu.js +0 -10
  37. package/src/bind/definition.js +0 -10
  38. package/src/bind/download.js +0 -10
  39. package/src/bind/enter.js +0 -8
  40. package/src/bind/error.js +0 -8
  41. package/src/bind/errorRetry.js +0 -8
  42. package/src/bind/flex.js +0 -8
  43. package/src/bind/fullscreen.js +0 -10
  44. package/src/bind/i18n.js +0 -8
  45. package/src/bind/keyboard.js +0 -8
  46. package/src/bind/loading.js +0 -8
  47. package/src/bind/localPreview.js +0 -10
  48. package/src/bind/memoryPlay.js +0 -10
  49. package/src/bind/miniplayer.js +0 -10
  50. package/src/bind/mobile.js +0 -8
  51. package/src/bind/nativeTextTrack.js +0 -8
  52. package/src/bind/pc.js +0 -8
  53. package/src/bind/pip.js +0 -10
  54. package/src/bind/play.js +0 -10
  55. package/src/bind/playNext.js +0 -10
  56. package/src/bind/playbackRate.js +0 -8
  57. package/src/bind/poster.js +0 -8
  58. package/src/bind/progress.js +0 -8
  59. package/src/bind/reload.js +0 -10
  60. package/src/bind/replay.js +0 -10
  61. package/src/bind/rotate.js +0 -10
  62. package/src/bind/screenShot.js +0 -10
  63. package/src/bind/stallCheck.js +0 -8
  64. package/src/bind/start.js +0 -10
  65. package/src/bind/textTrack.js +0 -8
  66. package/src/bind/time.js +0 -8
  67. package/src/bind/volume.js +0 -10
  68. package/src/controls/airplay.js +0 -20
  69. package/src/controls/cssFullscreen.js +0 -49
  70. package/src/controls/danmu.js +0 -75
  71. package/src/controls/definition.js +0 -13
  72. package/src/controls/download.js +0 -28
  73. package/src/controls/errorRetry.js +0 -132
  74. package/src/controls/fullscreen.js +0 -145
  75. package/src/controls/keyboard.js +0 -214
  76. package/src/controls/localPreview.js +0 -32
  77. package/src/controls/memoryPlay.js +0 -14
  78. package/src/controls/miniplayer.js +0 -128
  79. package/src/controls/mobile.js +0 -100
  80. package/src/controls/pc.js +0 -123
  81. package/src/controls/pip.js +0 -52
  82. package/src/controls/play.js +0 -34
  83. package/src/controls/playNext.js +0 -29
  84. package/src/controls/reload.js +0 -24
  85. package/src/controls/replay.js +0 -30
  86. package/src/controls/rotate.js +0 -99
  87. package/src/controls/screenShot.js +0 -65
  88. package/src/controls/stallCheck.js +0 -38
  89. package/src/controls/start.js +0 -60
  90. package/src/controls/textTrack.js +0 -182
  91. package/src/controls/volume.js +0 -178
  92. package/src/controls.js +0 -36
  93. package/src/core_player.js +0 -13
  94. package/src/error.js +0 -74
  95. package/src/index.js +0 -57
  96. package/src/player.js +0 -553
  97. package/src/proxy.js +0 -495
  98. package/src/simple_player.js +0 -42
  99. package/src/skin/assets/airplay.svg +0 -1
  100. package/src/skin/assets/download.svg +0 -14
  101. package/src/skin/assets/exitCssFull.svg +0 -3
  102. package/src/skin/assets/exitFull.svg +0 -3
  103. package/src/skin/assets/loading.svg +0 -3
  104. package/src/skin/assets/panel.svg +0 -4
  105. package/src/skin/assets/pause.svg +0 -3
  106. package/src/skin/assets/play.svg +0 -3
  107. package/src/skin/assets/playNext.svg +0 -3
  108. package/src/skin/assets/reload.svg +0 -3
  109. package/src/skin/assets/replay.svg +0 -3
  110. package/src/skin/assets/requestCssFull.svg +0 -3
  111. package/src/skin/assets/requestFull.svg +0 -3
  112. package/src/skin/assets/rotate.svg +0 -11
  113. package/src/skin/assets/startPause.svg +0 -3
  114. package/src/skin/assets/startPlay.svg +0 -3
  115. package/src/skin/assets/volumeLarge.svg +0 -4
  116. package/src/skin/assets/volumeMuted.svg +0 -4
  117. package/src/skin/assets/volumeSmall.svg +0 -4
  118. package/src/skin/controls/airplay.js +0 -44
  119. package/src/skin/controls/cssFullscreen.js +0 -36
  120. package/src/skin/controls/danmu.js +0 -214
  121. package/src/skin/controls/definition.js +0 -251
  122. package/src/skin/controls/download.js +0 -29
  123. package/src/skin/controls/enter.js +0 -21
  124. package/src/skin/controls/error.js +0 -57
  125. package/src/skin/controls/flex.js +0 -13
  126. package/src/skin/controls/fullscreen.js +0 -43
  127. package/src/skin/controls/i18n.js +0 -168
  128. package/src/skin/controls/loading.js +0 -17
  129. package/src/skin/controls/localPreview.js +0 -18
  130. package/src/skin/controls/memoryPlay.js +0 -39
  131. package/src/skin/controls/miniplayer.js +0 -26
  132. package/src/skin/controls/nativeTextTrack.js +0 -153
  133. package/src/skin/controls/pip.js +0 -26
  134. package/src/skin/controls/play.js +0 -43
  135. package/src/skin/controls/playNext.js +0 -41
  136. package/src/skin/controls/playbackRate.js +0 -141
  137. package/src/skin/controls/poster.js +0 -18
  138. package/src/skin/controls/progress.js +0 -407
  139. package/src/skin/controls/reload.js +0 -29
  140. package/src/skin/controls/replay.js +0 -56
  141. package/src/skin/controls/rotate.js +0 -29
  142. package/src/skin/controls/screenShot.js +0 -27
  143. package/src/skin/controls/start.js +0 -62
  144. package/src/skin/controls/textTrack.js +0 -113
  145. package/src/skin/controls/time.js +0 -40
  146. package/src/skin/controls/volume.js +0 -63
  147. package/src/skin/index.js +0 -63
  148. package/src/skin/style/common/animation.scss +0 -16
  149. package/src/skin/style/common/svg-url.scss +0 -70
  150. package/src/skin/style/controls/airplay.scss +0 -35
  151. package/src/skin/style/controls/controls.scss +0 -40
  152. package/src/skin/style/controls/cssfullscreen.scss +0 -103
  153. package/src/skin/style/controls/danmu.scss +0 -331
  154. package/src/skin/style/controls/definition.scss +0 -76
  155. package/src/skin/style/controls/download.scss +0 -45
  156. package/src/skin/style/controls/enter.scss +0 -55
  157. package/src/skin/style/controls/error.scss +0 -34
  158. package/src/skin/style/controls/fullscreen.scss +0 -60
  159. package/src/skin/style/controls/icon.scss +0 -12
  160. package/src/skin/style/controls/live.scss +0 -9
  161. package/src/skin/style/controls/loading.scss +0 -44
  162. package/src/skin/style/controls/memoryPlay.scss +0 -28
  163. package/src/skin/style/controls/miniplayer.scss +0 -104
  164. package/src/skin/style/controls/pip.scss +0 -42
  165. package/src/skin/style/controls/placeholder.scss +0 -7
  166. package/src/skin/style/controls/play.scss +0 -79
  167. package/src/skin/style/controls/playNext.scss +0 -44
  168. package/src/skin/style/controls/playbackRate.scss +0 -82
  169. package/src/skin/style/controls/poster.scss +0 -19
  170. package/src/skin/style/controls/progress.scss +0 -182
  171. package/src/skin/style/controls/reload.scss +0 -43
  172. package/src/skin/style/controls/replay.scss +0 -46
  173. package/src/skin/style/controls/rotate.scss +0 -41
  174. package/src/skin/style/controls/screenShot.scss +0 -42
  175. package/src/skin/style/controls/start.scss +0 -78
  176. package/src/skin/style/controls/textTrack.scss +0 -87
  177. package/src/skin/style/controls/time.scss +0 -24
  178. package/src/skin/style/controls/tips.scss +0 -24
  179. package/src/skin/style/controls/videoProxy.scss +0 -6
  180. package/src/skin/style/controls/volume.scss +0 -143
  181. package/src/skin/style/index.scss +0 -88
  182. package/src/utils/sniffer.js +0 -47
  183. package/src/utils/url.js +0 -10
  184. package/src/utils/util.js +0 -358
  185. package/src/utils/xgplayerTimeRange.js +0 -17
  186. package/src/version.js +0 -7
  187. package/version.json +0 -3
  188. package/webpack.config.js +0 -163
@@ -1,100 +0,0 @@
1
- import { hasClass } from '../utils/util'
2
-
3
- let mobile = function () {
4
- let player = this
5
- let root = player.root
6
- let clk = 0; let _click_
7
- let clickedTime = {
8
- first: '',
9
- second: ''
10
- }
11
-
12
- player.onElementTouchend = function (e, element) {
13
- if(!this.config.closeVideoPreventDefault) {
14
- e.preventDefault()
15
- }
16
- if(!this.config.closeVideoStopPropagation) {
17
- e.stopPropagation()
18
- }
19
- let player = this
20
- if (hasClass(root, 'xgplayer-inactive')) {
21
- player.emit('focus')
22
- } else {
23
- player.emit('blur')
24
- }
25
- if (!player.config.closeVideoTouch && !player.isTouchMove) {
26
- function onTouch() {
27
- _click_ = setTimeout(function () {
28
- if (hasClass(player.root, 'xgplayer-nostart')) {
29
- return false
30
- } else if (!player.ended) {
31
- if (player.paused) {
32
- let playPromise = player.play()
33
- if (playPromise !== undefined && playPromise) {
34
- playPromise.catch(err => {})
35
- }
36
- } else {
37
- player.pause()
38
- }
39
- }
40
- clk = 0
41
- }, 200)
42
- }
43
- if (!player.config.closeVideoClick) {
44
- clk++
45
- if (_click_) {
46
- clearTimeout(_click_)
47
- }
48
- if (clk === 1) {
49
- if(player.config.enableVideoDbltouch) {
50
- clickedTime.first = new Date()
51
- } else {
52
- onTouch()
53
- }
54
- } else if (clk === 2) {
55
- if(player.config.enableVideoDbltouch) {
56
- clickedTime.second = new Date()
57
- if (Math.abs(clickedTime.first - clickedTime.second) < 400) {
58
- // 双击
59
- onTouch()
60
- } else {
61
- clickedTime.first = new Date()
62
- clk = 1
63
- }
64
- } else {
65
- clk = 0
66
- }
67
- } else {
68
- clk = 0
69
- }
70
- }
71
- }
72
- }
73
-
74
- function onReady (e) {
75
- player.video.addEventListener('touchend', function (e) {
76
- player.onElementTouchend(e, player.video)
77
- })
78
- player.video.addEventListener('touchstart', () => {
79
- player.isTouchMove = false
80
- })
81
- player.video.addEventListener('touchmove', () => {
82
- player.isTouchMove = true
83
- })
84
- if (player.config.autoplay) {
85
- player.start()
86
- }
87
- }
88
- player.once('ready', onReady)
89
-
90
- function onDestroy () {
91
- player.off('ready', onReady)
92
- player.off('destroy', onDestroy)
93
- }
94
- player.once('destroy', onDestroy)
95
- }
96
-
97
- export default {
98
- name: 'mobile',
99
- method: mobile
100
- }
@@ -1,123 +0,0 @@
1
- import { hasClass } from '../utils/util'
2
-
3
- let pc = function () {
4
- let player = this
5
- if(!player.controls || !player.video) return
6
- let controls = player.controls; let root = player.root
7
- let clk = 0; let _click_
8
-
9
- player.onElementClick = function (e, element) {
10
- if(!this.config.closeVideoPreventDefault) {
11
- e.preventDefault()
12
- }
13
- if(!this.config.closeVideoStopPropagation) {
14
- e.stopPropagation()
15
- }
16
- let player = this
17
- if (!player.config.closeVideoClick) {
18
- clk++
19
- if (_click_) {
20
- clearTimeout(_click_)
21
- }
22
- if (clk === 1) {
23
- _click_ = setTimeout(function () {
24
- if (hasClass(player.root, 'xgplayer-nostart')) {
25
- return false
26
- } else if (!player.ended) {
27
- if (player.paused) {
28
- let playPromise = player.play()
29
- if (playPromise !== undefined && playPromise) {
30
- playPromise.catch(err => {})
31
- }
32
- } else {
33
- player.pause()
34
- }
35
- }
36
- clk = 0
37
- }, 200)
38
- } else {
39
- clk = 0
40
- }
41
- }
42
- }
43
- player.video.addEventListener('click', function (e) { player.onElementClick(e, player.video) }, false)
44
-
45
- player.onElementDblclick = function (e, element) {
46
- if(!this.config.closeVideoPreventDefault) {
47
- e.preventDefault()
48
- }
49
- if(!this.config.closeVideoStopPropagation) {
50
- e.stopPropagation()
51
- }
52
- let player = this
53
- if (!player.config.closeVideoDblclick) {
54
- let fullscreen = controls.querySelector('.xgplayer-fullscreen')
55
- if (fullscreen) {
56
- let clk
57
- if (document.createEvent) {
58
- clk = document.createEvent('Event')
59
- clk.initEvent('click', true, true)
60
- } else {
61
- clk = new Event('click')
62
- }
63
- fullscreen.dispatchEvent(clk)
64
- }
65
- }
66
- }
67
- player.video.addEventListener('dblclick', function (e) { player.onElementDblclick(e, player.video) }, false)
68
-
69
- function onMouseEnter () {
70
- clearTimeout(player.leavePlayerTimer)
71
- player.emit('focus', player)
72
- }
73
- root.addEventListener('mouseenter', onMouseEnter)
74
-
75
- function onMouseLeave () {
76
- if(!player.config.closePlayerBlur) {
77
- player.leavePlayerTimer = setTimeout(function () {
78
- player.emit('blur', player)
79
- }, player.config.leavePlayerTime || 0)
80
- }
81
- }
82
- root.addEventListener('mouseleave', onMouseLeave)
83
-
84
- function onControlMouseEnter (e) {
85
- if (player.userTimer) {
86
- clearTimeout(player.userTimer)
87
- }
88
- }
89
- controls.addEventListener('mouseenter', onControlMouseEnter)
90
-
91
- function onControlMouseLeave (e) {
92
- if(!player.config.closeControlsBlur) {
93
- player.emit('focus', player)
94
- }
95
- }
96
- controls.addEventListener('mouseleave', onControlMouseLeave)
97
-
98
- function onControlClick (e) {
99
- e.preventDefault()
100
- e.stopPropagation()
101
- }
102
- controls.addEventListener('click', onControlClick)
103
-
104
- function onReady (e) {
105
- if (player.config.autoplay) {
106
- player.start()
107
- }
108
- }
109
- player.once('ready', onReady)
110
-
111
- function onDestroy () {
112
- root.removeEventListener('mouseenter', onMouseEnter)
113
- root.removeEventListener('mouseleave', onMouseLeave)
114
- player.off('ready', onReady)
115
- player.off('destroy', onDestroy)
116
- }
117
- player.once('destroy', onDestroy)
118
- }
119
-
120
- export default {
121
- name: 'pc',
122
- method: pc
123
- }
@@ -1,52 +0,0 @@
1
-
2
- import { PresentationMode, checkWebkitSetPresentationMode, addClass, removeClass} from '../utils/util'
3
-
4
- let pip = function () {
5
- let player = this
6
- function onPipBtnClick () {
7
- if (player.video !== document.pictureInPictureElement) {
8
- player.video.requestPictureInPicture()
9
- } else {
10
- document.exitPictureInPicture()
11
- }
12
- }
13
- player.on('pipBtnClick', onPipBtnClick)
14
-
15
- const onWebkitpresentationmodechanged = (e) => {
16
- const mode = player.video.webkitPresentationMode
17
- this.pMode = mode
18
- if (mode === PresentationMode.PIP) {
19
- // 进入pip模式
20
- player.emit('requestPictureInPicture', e.pictureInPictureWindow)
21
- } else if (mode === PresentationMode.INLINE) {
22
- // 退出pip,进去inline模式
23
- player.emit('exitPictureInPicture')
24
- }
25
- }
26
-
27
- player.video.addEventListener('enterpictureinpicture', function (pipWindow) {
28
- addClass(player.root, 'xgplayer-pip-active')
29
- player.emit('requestPictureInPicture', pipWindow)
30
- })
31
-
32
- player.video.addEventListener('leavepictureinpicture', function () {
33
- removeClass(player.root, 'xgplayer-pip-active')
34
- player.emit('exitPictureInPicture')
35
- })
36
-
37
- checkWebkitSetPresentationMode(player.video) &&
38
- player.video.addEventListener('webkitpresentationmodechanged', onWebkitpresentationmodechanged)
39
-
40
- function onDestroy () {
41
- player.off('pipBtnClick', onPipBtnClick)
42
- player.off('destroy', onDestroy)
43
- checkWebkitSetPresentationMode(player.video) &&
44
- player.video.removeEventListener('webkitpresentationmodechanged', onWebkitpresentationmodechanged)
45
- }
46
- player.once('destroy', onDestroy)
47
- }
48
-
49
- export default {
50
- name: 'pip',
51
- method: pip
52
- }
@@ -1,34 +0,0 @@
1
- import { hasClass } from '../utils/util'
2
-
3
- let play = function () {
4
- let player = this
5
-
6
- function onPlayBtnClick () {
7
- if (!player.config.allowPlayAfterEnded && player.ended) {
8
- return
9
- }
10
- if(hasClass(player.root, 'xgplayer-nostart')) {
11
- player.start()
12
- }
13
- if (player.paused) {
14
- let playPromise = player.play()
15
- if (playPromise !== undefined && playPromise) {
16
- playPromise.catch(err => {})
17
- }
18
- } else {
19
- player.pause()
20
- }
21
- }
22
- player.on('playBtnClick', onPlayBtnClick)
23
-
24
- function onDestroy () {
25
- player.off('playBtnClick', onPlayBtnClick)
26
- player.off('destroy', onDestroy)
27
- }
28
- player.once('destroy', onDestroy)
29
- }
30
-
31
- export default {
32
- name: 'play',
33
- method: play
34
- }
@@ -1,29 +0,0 @@
1
- let playNext = function () {
2
- let player = this
3
- let nextBtn = player.config.playNext
4
- player.currentVideoIndex = -1
5
-
6
- function onPlayNextBtnClick () {
7
- if (player.currentVideoIndex + 1 < nextBtn.urlList.length) {
8
- player.currentVideoIndex++
9
- player.video.autoplay = true
10
- player.src = nextBtn.urlList[player.currentVideoIndex]
11
- player.emit('playerNext', player.currentVideoIndex + 1)
12
- if (player.currentVideoIndex + 1 === nextBtn.urlList.length) {
13
- player.emit('urlListEnd')
14
- }
15
- }
16
- }
17
- player.on('playNextBtnClick', onPlayNextBtnClick)
18
-
19
- function onDestroy () {
20
- player.off('playNextBtnClick', onPlayNextBtnClick)
21
- player.off('destroy', onDestroy)
22
- }
23
- player.once('destroy', onDestroy)
24
- }
25
-
26
- export default {
27
- name: 'playNext',
28
- method: playNext
29
- }
@@ -1,24 +0,0 @@
1
- import { removeClass } from '../utils/util'
2
-
3
- let reload = function () {
4
- let player = this
5
- let reloadConfig = player.config.reload
6
- if (!reloadConfig) { return }
7
-
8
- function onReloadBtnClick () {
9
- removeClass(player.root, 'xgplayer-is-error')
10
- player.src = player.config.url
11
- }
12
- player.on('reloadBtnClick', onReloadBtnClick)
13
-
14
- function onDestroy () {
15
- player.off('reloadBtnClick', onReloadBtnClick)
16
- player.off('destroy', onDestroy)
17
- }
18
- player.once('destroy', onDestroy)
19
- }
20
-
21
- export default {
22
- name: 'reload',
23
- method: reload
24
- }
@@ -1,30 +0,0 @@
1
- import { addClass, removeClass } from '../utils/util'
2
-
3
- let replay = function () {
4
- let player = this
5
- let root = player.root
6
-
7
- function onReplayBtnClick () {
8
- removeClass(root, 'xgplayer-is-replay')
9
- player.replay()
10
- }
11
- player.on('replayBtnClick', onReplayBtnClick)
12
-
13
- function onEnded () {
14
- if (!player.config.loop) {
15
- addClass(root, 'xgplayer-is-replay')
16
- }
17
- }
18
- player.on('ended', onEnded)
19
-
20
- function onDestroy () {
21
- player.off('replayBtnClick', onReplayBtnClick)
22
- player.off('destroy', onDestroy)
23
- }
24
- player.once('destroy', onDestroy)
25
- }
26
-
27
- export default {
28
- name: 'replay',
29
- method: replay
30
- }
@@ -1,99 +0,0 @@
1
- let rotate = function () {
2
- let player = this
3
- let rotateConfig = player.config.rotate
4
- if (!rotateConfig) { return }
5
-
6
- function onRotateBtnClick () {
7
- player.rotate(rotateConfig.clockwise, rotateConfig.innerRotate)
8
- }
9
- player.on('rotateBtnClick', onRotateBtnClick)
10
-
11
- function onDestroy () {
12
- player.off('rotateBtnClick', onRotateBtnClick)
13
- player.off('destroy', onDestroy)
14
- }
15
- player.once('destroy', onDestroy)
16
-
17
- player.updateRotateDeg = function () {
18
- let player = this;
19
- if (!player.rotateDeg) {
20
- player.rotateDeg = 0
21
- }
22
-
23
- let width = player.root.offsetWidth
24
- let height = player.root.offsetHeight
25
- let targetWidth = player.video.videoWidth
26
- let targetHeight = player.video.videoHeight
27
-
28
- if (!player.config.rotate.innerRotate && player.config.rotate.controlsFix) {
29
- player.root.style.width = height + 'px'
30
- player.root.style.height = width + 'px'
31
- }
32
-
33
- let scale
34
- if (player.rotateDeg === 0.25 || player.rotateDeg === 0.75) {
35
- if (player.config.rotate.innerRotate) {
36
- if ((targetWidth / targetHeight) > (height / width)) { // 旋转后纵向撑满
37
- let videoWidth = 0
38
- if ((targetHeight / targetWidth) > (height / width)) { // 旋转前是纵向撑满
39
- videoWidth = height * targetWidth / targetHeight
40
- } else { // 旋转前是横向撑满
41
- videoWidth = width
42
- }
43
- scale = height / videoWidth
44
- } else { // 旋转后横向撑满
45
- let videoHeight = 0
46
- if ((targetHeight / targetWidth) > (height / width)) { // 旋转前是纵向撑满
47
- videoHeight = height
48
- } else { // 旋转前是横向撑满
49
- videoHeight = width * targetHeight / targetWidth
50
- }
51
- scale = width / videoHeight
52
- }
53
- } else {
54
- if (width >= height) {
55
- scale = width / height
56
- } else {
57
- scale = height / width
58
- }
59
- }
60
- scale = Number(scale.toFixed(5))
61
- } else {
62
- scale = 1
63
- }
64
-
65
- if (player.config.rotate.innerRotate) {
66
- player.video.style.transformOrigin = 'center center'
67
- player.video.style.transform = `rotate(${player.rotateDeg}turn) scale(${scale})`
68
- player.video.style.webKitTransform = `rotate(${player.rotateDeg}turn) scale(${scale})`
69
- } else {
70
- if (player.config.rotate.controlsFix) {
71
- player.video.style.transformOrigin = 'center center'
72
- player.video.style.transform = `rotate(${player.rotateDeg}turn) scale(${scale})`
73
- player.video.style.webKitTransform = `rotate(${player.rotateDeg}turn) scale(${scale})`
74
- } else {
75
- player.root.style.transformOrigin = 'center center'
76
- player.root.style.transform = `rotate(${player.rotateDeg}turn) scale(${1})`
77
- player.root.style.webKitTransform = `rotate(${player.rotateDeg}turn) scale(${1})`
78
- }
79
- }
80
- }
81
-
82
- player.rotate = function (clockwise = false, innerRotate = true, times = 1) {
83
- let player = this;
84
- if (!player.rotateDeg) {
85
- player.rotateDeg = 0
86
- }
87
- let factor = clockwise ? 1 : -1
88
-
89
- player.rotateDeg = (player.rotateDeg + 1 + factor * 0.25 * times) % 1
90
- this.updateRotateDeg()
91
-
92
- player.emit('rotate', player.rotateDeg * 360)
93
- }
94
- }
95
-
96
- export default {
97
- name: 'rotate',
98
- method: rotate
99
- }
@@ -1,65 +0,0 @@
1
- let screenShot = function () {
2
- let player = this
3
- let screenShotOptions = player.config.screenShot
4
- let callBack = null
5
- if (!screenShotOptions) {
6
- return
7
- }
8
-
9
- player.video.setAttribute('crossOrigin', 'anonymous')
10
-
11
- let encoderOptions = 0.92
12
-
13
- if (screenShotOptions.quality || screenShotOptions.quality === 0) {
14
- encoderOptions = screenShotOptions.quality
15
- }
16
- let type = screenShotOptions.type === undefined ? 'image/png' : screenShotOptions.type
17
- let format = screenShotOptions.format === undefined ? '.png' : screenShotOptions.format
18
-
19
- let canvas = document.createElement('canvas')
20
- let canvasCtx = canvas.getContext('2d')
21
- let img = new Image()
22
-
23
- canvas.width = this.config.width || 600
24
- canvas.height = this.config.height || 337.5
25
- let saveScreenShot = function (data, filename) {
26
- let saveLink = document.createElement('a')
27
- saveLink.href = data
28
- saveLink.download = filename
29
- let event = document.createEvent('MouseEvents')
30
- event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
31
- saveLink.dispatchEvent(event)
32
- }
33
-
34
- player.screenShot = function (save = true) {
35
- save = screenShotOptions.saveImg === undefined ? save : screenShotOptions.saveImg
36
- canvas.width = player.video.videoWidth || 600
37
- canvas.height = player.video.videoHeight || 337.5
38
- callBack = screenShotOptions.callBack
39
- img.onload = (function () {
40
- canvasCtx.drawImage(player.video, 0, 0, canvas.width, canvas.height)
41
- img.src = canvas.toDataURL(type, encoderOptions).replace(type, 'image/octet-stream')
42
- let screenShotImg = img.src.replace(/^data:image\/[^;]+/, 'data:application/octet-stream')
43
- let saveFileName = screenShotOptions.fileName || player.lang.SCREENSHOT
44
-
45
- player.emit('screenShot', screenShotImg)
46
- if (save && callBack) {
47
- callBack(screenShotImg, saveFileName, format)
48
- } else {
49
- save && saveScreenShot(screenShotImg, saveFileName + format)
50
- }
51
- })()
52
- }
53
- player.on('screenShotBtnClick', player.screenShot)
54
-
55
- function onDestroy () {
56
- player.off('screenShotBtnClick', player.screenShot)
57
- player.off('destroy', onDestroy)
58
- }
59
- player.once('destroy', onDestroy)
60
- }
61
-
62
- export default {
63
- name: 'screenShot',
64
- method: screenShot
65
- }
@@ -1,38 +0,0 @@
1
- import Errors from '../error'
2
-
3
- function stallCheck () {
4
- const player = this
5
- if(!player.config.enableStallCheck) return;
6
- let lastCurrentTime = 0;
7
- let stallFlag, stallCheckTimer, progressTimer;
8
- player.once('complete', () => {
9
- progressTimer = setInterval(() => {
10
- if (player.currentTime - (lastCurrentTime || 0) > 0.1 || player.paused) {
11
- if (stallFlag === 1 || stallFlag === 2) {
12
- stallFlag = 0;
13
- clearTimeout(stallCheckTimer);
14
- stallCheckTimer = null;
15
- }
16
- } else {
17
- if (!stallFlag) {
18
- stallFlag = 1;
19
- stallCheckTimer = setTimeout(() => {
20
- if (stallFlag === 1) {
21
- stallFlag = 2;
22
- player.emit('error', new Errors('STALL'));
23
- }
24
- stallCheckTimer = null;
25
- }, 20000);
26
- }
27
- }
28
- lastCurrentTime = player.currentTime;
29
- }, 1000);
30
- })
31
- }
32
-
33
- export default {
34
- name: 'stallCheck',
35
- method: stallCheck
36
- }
37
-
38
-
@@ -1,60 +0,0 @@
1
- import { addClass, hasClass, removeClass } from '../utils/util'
2
-
3
- let start = function () {
4
- let player = this
5
- let root = player.root
6
-
7
- function onCanPlay () {
8
- player.off('canplay', onCanPlay)
9
- let playPromise = player.play()
10
- if (playPromise !== undefined && playPromise) {
11
- playPromise.catch(err => {})
12
- }
13
- }
14
-
15
- function onStartBtnClick () {
16
- if (hasClass(root, 'xgplayer-nostart')) {
17
- removeClass(root, 'xgplayer-nostart') // for ie quick switch
18
- addClass(root, 'xgplayer-is-enter')
19
-
20
- if(typeof root.contains === 'function') {
21
- if((player.video && player.video.nodeType === 1 && !root.contains(player.video)) || (player.video && player.video.nodeType !== 1 && player.video.mediaSource === undefined)) {
22
- player.once('canplay', onCanPlay)
23
- player.start()
24
- } else {
25
- onCanPlay()
26
- }
27
- } else {
28
- if((player.video && player.video.nodeType === 1 && !root.querySelector(this.videoConfig.mediaType)) || (player.video && player.video.nodeType !== 1 && player.video.mediaSource === undefined)) {
29
- player.once('canplay', onCanPlay)
30
- player.start()
31
- } else {
32
- onCanPlay()
33
- }
34
- }
35
- } else {
36
- if (player.paused) {
37
- removeClass(root, 'xgplayer-nostart xgplayer-isloading')
38
- setTimeout(() => {
39
- let playPromise = player.play()
40
- if (playPromise !== undefined && playPromise) {
41
- playPromise.catch(err => {})
42
- }
43
- }, 10)
44
- }
45
- }
46
- }
47
- player.on('startBtnClick', onStartBtnClick)
48
-
49
- function onDestroy () {
50
- player.off('startBtnClick', onStartBtnClick)
51
- player.off('canplay', onCanPlay)
52
- player.off('destroy', onDestroy)
53
- }
54
- player.once('destroy', onDestroy)
55
- }
56
-
57
- export default {
58
- name: 'start',
59
- method: start
60
- }