Skip to content

Commit b2d32b1

Browse files
committed
update loading state
1 parent 9ec80ec commit b2d32b1

File tree

4 files changed

+36
-27
lines changed

4 files changed

+36
-27
lines changed

packages/shaka/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@oplayer/shaka",
3-
"version": "1.2.26-beta.4",
3+
"version": "1.2.26-beta.5",
44
"description": "shaka-player plugin for oplayer",
55
"type": "module",
66
"main": "./dist/index.es.js",

packages/shaka/src/index.ts

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -102,21 +102,24 @@ class ShakaPlugin implements PlayerPlugin {
102102

103103
const eventManager = (this.instance.eventManager = new ShakaPlugin.library.util.EventManager())
104104

105-
eventManager.listen(this.instance, 'loaded', (event) => {
106-
player.emit('canplay', event)
105+
eventManager.listen(this.instance, 'loading', (event) => {
106+
player.emit('loading', event)
107107
})
108108

109-
eventManager.listen(this.instance, 'loading', (event) => {
110-
player.emit('waiting', event)
109+
eventManager.listen(this.instance, 'loaded', (event) => {
110+
player.emit('loaded', event)
111111
})
112112

113113
eventManager.listen(this.instance, 'error', (event) => {
114114
player.emit('error', { pluginName: ShakaPlugin.name, ...event })
115115
})
116116

117-
// eventManager.listen(this.instance, 'play', () => {
118-
// player.$video.currentTime = this.seekRange.end
119-
// })
117+
eventManager.listenOnce(player.$video, 'seeking', () => {
118+
// ignore first seeking ?
119+
setTimeout(() => {
120+
player.emit('seeked')
121+
})
122+
})
120123

121124
try {
122125
await this.instance.load(source.src)
@@ -125,6 +128,10 @@ class ShakaPlugin implements PlayerPlugin {
125128
}
126129

127130
if (player.options.isLive) {
131+
eventManager.listenOnce(player.$video, 'loadedmetadata', () => {
132+
player.$video.currentTime = this.seekRange.end
133+
})
134+
128135
const button = player.$root.querySelector('[aria-label="time"')?.parentElement
129136
const dot = button?.firstElementChild as HTMLSpanElement | undefined
130137

packages/ui/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@oplayer/ui",
3-
"version": "1.3.4-beta.7",
3+
"version": "1.3.4-beta.8",
44
"description": "ui plugin for oplayer",
55
"type": "module",
66
"main": "./dist/index.es.js",

packages/ui/src/listeners/loading.ts

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ const loadingListener = (player: Player) => {
1818
if (player.$video.preload == 'none') removeClass()
1919
})
2020

21-
player.on(['loading', 'seeking', 'videoqualitychange', 'videosourcechange'], addClass)
21+
player.on(['loading', 'seeking', 'videoqualitychange', 'videosourcechange', 'waiting'], addClass)
2222
player.on(['loaded', 'canplaythrough', 'playing', 'pause', 'seeked', 'error'], removeClass)
2323

2424
// safari 不预加载, 当 autoplay = true 才触发 canplay(预加载), 改变视频地址后默认预加载(或者是有用户交互?)
@@ -29,27 +29,29 @@ const loadingListener = (player: Player) => {
2929
player.$root.classList.remove(loading)
3030
)
3131

32-
// why playing: 暂停很久后在播放可能会卡很久
33-
player.on(['waiting', 'playing'], ({ type }) => {
34-
const timeWhenWaiting = player.currentTime
35-
36-
if (!timeWhenWaiting) return
32+
let prevPlayStateIsPaused: boolean = !player.isPlaying
3733

38-
if (type == 'waiting') addClass()
39-
40-
// Browsers may emit a timeupdate event after a waiting event. In order to prevent
41-
// premature removal of the waiting class, wait for the time to change.
34+
player.on(['play', 'pause'], () => {
35+
prevPlayStateIsPaused = !player.isPlaying
36+
})
4237

43-
const timeUpdateListener = () => {
44-
if (timeWhenWaiting !== player.currentTime) {
45-
removeClass()
46-
player.off('timeupdate', timeUpdateListener)
47-
} else {
48-
addClass()
38+
// why playing: 暂停很久后在播放可能会卡很久
39+
player.on('playing', () => {
40+
if (prevPlayStateIsPaused) {
41+
const timeWhenWaiting = player.currentTime
42+
// Browsers may emit a timeupdate event after a waiting event. In order to prevent
43+
// premature removal of the waiting class, wait for the time to change.
44+
const timeUpdateListener = () => {
45+
if (timeWhenWaiting !== player.currentTime) {
46+
removeClass()
47+
player.off('timeupdate', timeUpdateListener)
48+
} else {
49+
addClass()
50+
}
4951
}
50-
}
5152

52-
player.on('timeupdate', timeUpdateListener)
53+
player.on('timeupdate', timeUpdateListener)
54+
}
5355
})
5456
}
5557

0 commit comments

Comments
 (0)