@codercms/web-player 0.0.36 → 0.0.40
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/dist/HybridDoublyLinkedList.js.map +1 -1
- package/dist/HybridLinkedList.js.map +1 -1
- package/dist/core/AudioCtx/AudioContext.d.ts +2 -0
- package/dist/core/AudioCtx/AudioContext.js +92 -0
- package/dist/core/AudioCtx/AudioContext.js.map +1 -0
- package/dist/core/Loaders/BaseLoader.d.ts +17 -0
- package/dist/core/Loaders/BaseLoader.js +50 -0
- package/dist/core/Loaders/BaseLoader.js.map +1 -0
- package/dist/core/Loaders/HLSLoader.d.ts +17 -0
- package/dist/core/Loaders/HLSLoader.js +313 -0
- package/dist/core/Loaders/HLSLoader.js.map +1 -0
- package/dist/core/{LoaderInterface.d.ts → Loaders/LoaderInterface.d.ts} +11 -3
- package/dist/core/{LoaderInterface.js → Loaders/LoaderInterface.js} +6 -0
- package/dist/core/{LoaderInterface.js.map → Loaders/LoaderInterface.js.map} +1 -1
- package/dist/core/Loaders/NativeAudioTrackList.d.ts +39 -0
- package/dist/core/Loaders/NativeAudioTrackList.js.map +1 -0
- package/dist/core/Loaders/NativeLoader.d.ts +16 -0
- package/dist/core/Loaders/NativeLoader.js +114 -0
- package/dist/core/Loaders/NativeLoader.js.map +1 -0
- package/dist/core/Playlist.d.ts +4 -3
- package/dist/core/Playlist.js.map +1 -1
- package/dist/core/PlaylistPlayer.d.ts +3 -2
- package/dist/core/PlaylistPlayer.js +5 -3
- package/dist/core/PlaylistPlayer.js.map +1 -1
- package/dist/core/VideoPlayer.d.ts +22 -184
- package/dist/core/VideoPlayer.js +102 -577
- package/dist/core/VideoPlayer.js.map +1 -1
- package/dist/core/VideoPlayerEvents.d.ts +74 -0
- package/dist/core/VideoPlayerEvents.js +40 -0
- package/dist/core/VideoPlayerEvents.js.map +1 -0
- package/dist/core/VideoPlayerMediaLoadManager.d.ts +50 -0
- package/dist/core/VideoPlayerMediaLoadManager.js +269 -0
- package/dist/core/VideoPlayerMediaLoadManager.js.map +1 -0
- package/dist/core/VideoPlayerMediaState.d.ts +39 -0
- package/dist/core/VideoPlayerMediaState.js +161 -0
- package/dist/core/VideoPlayerMediaState.js.map +1 -0
- package/dist/core/types/BufferedPart.d.ts +4 -0
- package/dist/core/types/BufferedPart.js +1 -0
- package/dist/core/types/BufferedPart.js.map +1 -0
- package/dist/core/types/PlayerLoadParams.d.ts +11 -0
- package/dist/core/types/PlayerLoadParams.js +1 -0
- package/dist/core/types/PlayerLoadParams.js.map +1 -0
- package/dist/core/types/QualityLevel.js +1 -0
- package/dist/index.d.ts +9 -4
- package/dist/index.js +9 -4
- package/dist/ui/LoadingIndicator.svelte +35 -16
- package/dist/ui/LoadingIndicator.svelte.d.ts +1 -1
- package/dist/ui/ProgressBar.svelte +6 -6
- package/dist/ui/ProgressBar.svelte.d.ts +1 -1
- package/dist/ui/utils/slider.js +7 -0
- package/dist/ui/utils/slider.js.map +1 -1
- package/package.json +1 -1
- package/dist/core/HLSLoader.d.ts +0 -19
- package/dist/core/HLSLoader.js +0 -196
- package/dist/core/HLSLoader.js.map +0 -1
- package/dist/core/NativeLoader.d.ts +0 -14
- package/dist/core/NativeLoader.js +0 -66
- package/dist/core/NativeLoader.js.map +0 -1
- /package/dist/core/{AudioTrack.js → Loaders/NativeAudioTrackList.js} +0 -0
- /package/dist/core/{AudioTrack.d.ts → types/AudioTrack.d.ts} +0 -0
- /package/dist/core/{QualityLevel.js → types/AudioTrack.js} +0 -0
- /package/dist/core/{AudioTrack.js.map → types/AudioTrack.js.map} +0 -0
- /package/dist/core/{QualityLevel.d.ts → types/QualityLevel.d.ts} +0 -0
- /package/dist/core/{QualityLevel.js.map → types/QualityLevel.js.map} +0 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { PlayerEvents } from './VideoPlayerEvents.js';
|
|
2
|
+
export class VideoPlayerMediaState {
|
|
3
|
+
emitter;
|
|
4
|
+
paused = true;
|
|
5
|
+
duration = 0;
|
|
6
|
+
currentTime = 0;
|
|
7
|
+
playbackRate = 0;
|
|
8
|
+
muted = false;
|
|
9
|
+
volume = 1;
|
|
10
|
+
// protected _volumeGain = 1;
|
|
11
|
+
buffered = [];
|
|
12
|
+
buffering = false;
|
|
13
|
+
isAutoQuality = true;
|
|
14
|
+
currentQualityLevel = null;
|
|
15
|
+
qualityLevels = [];
|
|
16
|
+
currentAudioTrack = null;
|
|
17
|
+
audioTracks = [];
|
|
18
|
+
constructor(emitter) {
|
|
19
|
+
this.emitter = emitter;
|
|
20
|
+
}
|
|
21
|
+
syncFromEl(el) {
|
|
22
|
+
this.updatePaused(el.paused);
|
|
23
|
+
this.updateDuration(el.duration);
|
|
24
|
+
this.updateCurrentTime(el.currentTime);
|
|
25
|
+
this.updateBufferedFromTimeRanges(el.buffered);
|
|
26
|
+
this.updateVolume(el.volume, el.muted);
|
|
27
|
+
this.updatePlaybackRate(el.playbackRate);
|
|
28
|
+
// 0 - HAVE NOTHING
|
|
29
|
+
if (el.readyState > 0) {
|
|
30
|
+
// 3 - HAVE_FUTURE_DATA
|
|
31
|
+
this.updateBuffering(el.readyState !== 3 && el.readyState !== 4);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
resetForLoadingStart() {
|
|
35
|
+
this.updateDuration(0);
|
|
36
|
+
this.updateCurrentTime(0);
|
|
37
|
+
this.updateBuffering(false);
|
|
38
|
+
this.updateBuffered([]);
|
|
39
|
+
this.currentQualityLevel = null;
|
|
40
|
+
this.updateQualityLevels([]);
|
|
41
|
+
this.currentAudioTrack = null;
|
|
42
|
+
this.updateAudioTracks([]);
|
|
43
|
+
}
|
|
44
|
+
updatePaused(newPaused) {
|
|
45
|
+
if (newPaused !== this.paused) {
|
|
46
|
+
this.paused = newPaused;
|
|
47
|
+
if (newPaused) {
|
|
48
|
+
this.emitter.emit(PlayerEvents.Pause);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
this.emitter.emit(PlayerEvents.Play);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
updateVolume(newVol, newMuted) {
|
|
56
|
+
newVol = this._normalizeNumber(newVol);
|
|
57
|
+
let isChanged = false;
|
|
58
|
+
if (newVol !== this.volume) {
|
|
59
|
+
isChanged = true;
|
|
60
|
+
this.volume = newVol;
|
|
61
|
+
this.emitter.emit(PlayerEvents.VolumeChange, newVol);
|
|
62
|
+
}
|
|
63
|
+
if (newMuted !== this.muted) {
|
|
64
|
+
isChanged = true;
|
|
65
|
+
this.muted = newMuted;
|
|
66
|
+
this.emitter.emit(PlayerEvents.MuteChange, newMuted);
|
|
67
|
+
}
|
|
68
|
+
if (isChanged) {
|
|
69
|
+
this.emitter.emit(PlayerEvents.VolumeStateChange, newVol, newMuted);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
updateCurrentTime(newTime) {
|
|
73
|
+
newTime = this._normalizeNumber(newTime);
|
|
74
|
+
if (this.currentTime !== newTime) {
|
|
75
|
+
this.currentTime = newTime;
|
|
76
|
+
this.emitter.emit(PlayerEvents.CurrentTimeUpdate, newTime);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
updateDuration(newDuration) {
|
|
80
|
+
newDuration = this._normalizeNumber(newDuration);
|
|
81
|
+
if (this.duration !== newDuration) {
|
|
82
|
+
this.duration = newDuration;
|
|
83
|
+
this.emitter.emit(PlayerEvents.PlaybackDurationChange, newDuration);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
updateBufferedFromTimeRanges(newBuffered) {
|
|
87
|
+
const parts = [];
|
|
88
|
+
for (let i = 0; i < newBuffered.length; i++) {
|
|
89
|
+
const start = this._normalizeNumber(newBuffered.start(i));
|
|
90
|
+
const end = this._normalizeNumber(newBuffered.end(i));
|
|
91
|
+
parts.push({ start, end });
|
|
92
|
+
}
|
|
93
|
+
this.updateBuffered(parts);
|
|
94
|
+
}
|
|
95
|
+
updateBuffered(newBuffered) {
|
|
96
|
+
if (this.buffered.length !== newBuffered.length) {
|
|
97
|
+
this.buffered = newBuffered;
|
|
98
|
+
this.emitter.emit(PlayerEvents.PlaybackBufferingProgress, newBuffered);
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
for (let i = 0; i < newBuffered.length; i++) {
|
|
102
|
+
if (newBuffered[i].start !== this.buffered[i].start ||
|
|
103
|
+
newBuffered[i].end !== this.buffered[i].end) {
|
|
104
|
+
this.buffered = newBuffered;
|
|
105
|
+
this.emitter.emit(PlayerEvents.PlaybackBufferingProgress, newBuffered);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
updateBuffering(newBuffering) {
|
|
111
|
+
if (newBuffering !== this.buffering) {
|
|
112
|
+
this.buffering = newBuffering;
|
|
113
|
+
if (newBuffering) {
|
|
114
|
+
this.emitter.emit(PlayerEvents.BufferingStarted);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
this.emitter.emit(PlayerEvents.BufferingEnded);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
updatePlaybackRate(newRate) {
|
|
122
|
+
newRate = this._normalizeNumber(newRate);
|
|
123
|
+
if (this.playbackRate !== newRate) {
|
|
124
|
+
this.playbackRate = newRate;
|
|
125
|
+
this.emitter.emit(PlayerEvents.PlaybackRateChange, newRate);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
updateQualityLevels(newLevels) {
|
|
129
|
+
this.qualityLevels = newLevels;
|
|
130
|
+
this.emitter.emit(PlayerEvents.QualityLevelsUpdated, newLevels);
|
|
131
|
+
}
|
|
132
|
+
updateQualityLevel(level, isAutoQuality) {
|
|
133
|
+
this.currentQualityLevel = level;
|
|
134
|
+
// this.currentQualityLevelStore.set(level);
|
|
135
|
+
this.isAutoQuality = isAutoQuality;
|
|
136
|
+
// this.isAutoQualityStore.set(isAutoQuality);
|
|
137
|
+
this.emitter.emit(PlayerEvents.QualityLevelSwitched, level, isAutoQuality);
|
|
138
|
+
}
|
|
139
|
+
findQualityLevelById(lvlId) {
|
|
140
|
+
return this.qualityLevels.find((lvl) => lvl.id === lvlId) ?? null;
|
|
141
|
+
}
|
|
142
|
+
updateAudioTracks(audioTracks) {
|
|
143
|
+
this.audioTracks = audioTracks;
|
|
144
|
+
// this.audioTracksStore.set(audioTracks);
|
|
145
|
+
this.emitter.emit(PlayerEvents.AudioTracksUpdated, audioTracks);
|
|
146
|
+
}
|
|
147
|
+
updateAudioTrack(audioTrack) {
|
|
148
|
+
this.currentAudioTrack = audioTrack;
|
|
149
|
+
// this._currentAudioTrackStore.set(audioTrack);
|
|
150
|
+
this.emitter.emit(PlayerEvents.AudioTrackSwitched, audioTrack);
|
|
151
|
+
}
|
|
152
|
+
findAudioTrackById(trackId) {
|
|
153
|
+
return this.audioTracks.find((track) => track.id === trackId) ?? null;
|
|
154
|
+
}
|
|
155
|
+
_normalizeNumber(num) {
|
|
156
|
+
if (isNaN(num) || !isFinite(num)) {
|
|
157
|
+
return 0;
|
|
158
|
+
}
|
|
159
|
+
return num;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VideoPlayerMediaState.js","sourceRoot":"","sources":["VideoPlayerMediaState.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BufferedPart.js","sourceRoot":"","sources":["BufferedPart.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { LoaderType } from '../Loaders/LoaderInterface.js';
|
|
2
|
+
export type GetUrlCb = (signal: AbortSignal) => Promise<string>;
|
|
3
|
+
export type LoadUrl = string | Promise<string> | GetUrlCb;
|
|
4
|
+
export interface PlayerLoadParams {
|
|
5
|
+
url: LoadUrl;
|
|
6
|
+
startPosition?: number;
|
|
7
|
+
audioTrack?: number;
|
|
8
|
+
startLevel?: number;
|
|
9
|
+
loader?: LoaderType;
|
|
10
|
+
playAfterLoad?: boolean;
|
|
11
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlayerLoadParams.js","sourceRoot":"","sources":["PlayerLoadParams.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
|
-
export * from "./core/LoaderInterface.js";
|
|
2
|
-
export * from "./core/
|
|
1
|
+
export * from "./core/Loaders/LoaderInterface.js";
|
|
2
|
+
export * from "./core/Loaders/BaseLoader.js";
|
|
3
|
+
export * from "./core/Loaders/HLSLoader.js";
|
|
4
|
+
export * from "./core/Loaders/NativeLoader.js";
|
|
3
5
|
export * from "./core/Playlist.js";
|
|
4
6
|
export * from "./core/PlaylistPlayer.js";
|
|
5
|
-
export * from "./core/QualityLevel.js";
|
|
6
|
-
export * from "./core/AudioTrack.js";
|
|
7
|
+
export * from "./core/types/QualityLevel.js";
|
|
8
|
+
export * from "./core/types/AudioTrack.js";
|
|
9
|
+
export * from "./core/types/BufferedPart.js";
|
|
10
|
+
export * from "./core/types/PlayerLoadParams.js";
|
|
11
|
+
export * from "./core/VideoPlayerEvents.js";
|
|
7
12
|
export * from "./core/VideoPlayer.js";
|
|
8
13
|
export * from "./ui/utils/duration.js";
|
|
9
14
|
export * from "./ui/utils/slider.js";
|
package/dist/index.js
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
// Reexport your entry components here
|
|
2
|
-
export * from './core/LoaderInterface.js';
|
|
3
|
-
export * from './core/
|
|
2
|
+
export * from './core/Loaders/LoaderInterface.js';
|
|
3
|
+
export * from './core/Loaders/BaseLoader.js';
|
|
4
|
+
export * from './core/Loaders/HLSLoader.js';
|
|
5
|
+
export * from './core/Loaders/NativeLoader.js';
|
|
4
6
|
|
|
5
7
|
export * from './core/Playlist.js';
|
|
6
8
|
export * from './core/PlaylistPlayer.js';
|
|
7
9
|
|
|
8
|
-
export * from './core/QualityLevel.js';
|
|
9
|
-
export * from './core/AudioTrack.js';
|
|
10
|
+
export * from './core/types/QualityLevel.js';
|
|
11
|
+
export * from './core/types/AudioTrack.js';
|
|
12
|
+
export * from './core/types/BufferedPart.js';
|
|
13
|
+
export * from './core/types/PlayerLoadParams.js';
|
|
10
14
|
|
|
15
|
+
export * from './core/VideoPlayerEvents.js';
|
|
11
16
|
export * from './core/VideoPlayer.js';
|
|
12
17
|
|
|
13
18
|
export * from './ui/utils/duration.js';
|
|
@@ -1,39 +1,58 @@
|
|
|
1
|
-
<script>import { PlayerEvents
|
|
1
|
+
<script>import { PlayerEvents } from "../core/VideoPlayerEvents.js";
|
|
2
2
|
import { onMount } from "svelte";
|
|
3
3
|
export let player;
|
|
4
4
|
export let loadThreshold = 200;
|
|
5
5
|
let loading = false;
|
|
6
|
-
let
|
|
6
|
+
let buffering = false;
|
|
7
|
+
let loadingTimeoutId = 0;
|
|
8
|
+
let bufferingTimeoutId = 0;
|
|
7
9
|
const setLoading = () => {
|
|
8
|
-
if (
|
|
10
|
+
if (loadingTimeoutId) {
|
|
9
11
|
return;
|
|
10
12
|
}
|
|
11
|
-
|
|
13
|
+
loadingTimeoutId = window.setTimeout(() => {
|
|
12
14
|
loading = true;
|
|
13
15
|
}, loadThreshold);
|
|
14
16
|
};
|
|
15
17
|
const setLoaded = () => {
|
|
16
|
-
if (
|
|
17
|
-
window.clearTimeout(
|
|
18
|
-
|
|
18
|
+
if (loadingTimeoutId) {
|
|
19
|
+
window.clearTimeout(loadingTimeoutId);
|
|
20
|
+
loadingTimeoutId = 0;
|
|
19
21
|
}
|
|
20
22
|
loading = false;
|
|
21
23
|
};
|
|
24
|
+
const setBuffering = () => {
|
|
25
|
+
if (bufferingTimeoutId) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
bufferingTimeoutId = window.setTimeout(() => {
|
|
29
|
+
buffering = true;
|
|
30
|
+
}, loadThreshold);
|
|
31
|
+
};
|
|
32
|
+
const setBuffered = () => {
|
|
33
|
+
if (bufferingTimeoutId) {
|
|
34
|
+
window.clearTimeout(bufferingTimeoutId);
|
|
35
|
+
bufferingTimeoutId = 0;
|
|
36
|
+
}
|
|
37
|
+
buffering = false;
|
|
38
|
+
};
|
|
22
39
|
onMount(() => {
|
|
23
|
-
player.subscribe(PlayerEvents.
|
|
24
|
-
player.subscribe(PlayerEvents.
|
|
25
|
-
player.subscribe(PlayerEvents.
|
|
26
|
-
player.subscribe(PlayerEvents.
|
|
40
|
+
player.subscribe(PlayerEvents.BeforeLoading, setLoading);
|
|
41
|
+
player.subscribe(PlayerEvents.LoadingDone, setLoaded);
|
|
42
|
+
player.subscribe(PlayerEvents.LoadingFailed, setLoaded);
|
|
43
|
+
player.subscribe(PlayerEvents.BufferingStarted, setBuffering);
|
|
44
|
+
player.subscribe(PlayerEvents.BufferingEnded, setBuffered);
|
|
27
45
|
return () => {
|
|
28
|
-
player.unsubscribe(PlayerEvents.
|
|
29
|
-
player.unsubscribe(PlayerEvents.
|
|
30
|
-
player.unsubscribe(PlayerEvents.
|
|
31
|
-
player.unsubscribe(PlayerEvents.
|
|
46
|
+
player.unsubscribe(PlayerEvents.BeforeLoading, setLoading);
|
|
47
|
+
player.unsubscribe(PlayerEvents.LoadingDone, setLoaded);
|
|
48
|
+
player.unsubscribe(PlayerEvents.LoadingFailed, setLoaded);
|
|
49
|
+
player.unsubscribe(PlayerEvents.BufferingStarted, setBuffering);
|
|
50
|
+
player.unsubscribe(PlayerEvents.BufferingEnded, setBuffering);
|
|
32
51
|
};
|
|
33
52
|
});
|
|
34
53
|
</script>
|
|
35
54
|
|
|
36
|
-
<div class="loading-container" style:visibility={loading ? `visible` : `hidden`}>
|
|
55
|
+
<div class="loading-container" style:visibility={loading || buffering ? `visible` : `hidden`}>
|
|
37
56
|
<div class="loader" />
|
|
38
57
|
</div>
|
|
39
58
|
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
<script>import {
|
|
2
|
-
import {
|
|
1
|
+
<script>import { LoaderEvents } from "../core/Loaders/LoaderInterface.js";
|
|
2
|
+
import { PlayerEvents } from "../core/VideoPlayerEvents.js";
|
|
3
3
|
import { onMount } from "svelte";
|
|
4
4
|
import {
|
|
5
5
|
getValueByMousePos,
|
|
6
6
|
getValueForDragEvent,
|
|
7
7
|
normalizePointerPos,
|
|
8
8
|
draggableAction
|
|
9
|
-
} from "./utils/slider";
|
|
10
|
-
import { toDuration } from "./utils/duration";
|
|
9
|
+
} from "./utils/slider.js";
|
|
10
|
+
import { toDuration } from "./utils/duration.js";
|
|
11
11
|
export let player;
|
|
12
12
|
let selfEl;
|
|
13
13
|
let currentTime = 0;
|
|
@@ -41,13 +41,13 @@ onMount(() => {
|
|
|
41
41
|
player.subscribe(PlayerEvents.PlaybackDurationChange, (newDuration) => {
|
|
42
42
|
duration = newDuration;
|
|
43
43
|
});
|
|
44
|
-
player.subscribe(PlayerEvents.
|
|
44
|
+
player.subscribe(PlayerEvents.CurrentTimeUpdate, (newCurrentTime) => {
|
|
45
45
|
currentTime = newCurrentTime;
|
|
46
46
|
});
|
|
47
47
|
player.subscribe(PlayerEvents.PlaybackBufferingProgress, (newBuffered) => {
|
|
48
48
|
buffered = newBuffered;
|
|
49
49
|
});
|
|
50
|
-
player.subscribe(
|
|
50
|
+
player.subscribe(PlayerEvents.BeforeLoading, () => {
|
|
51
51
|
currentTime = 0;
|
|
52
52
|
duration = 0;
|
|
53
53
|
currentTImeOffset = 0;
|
package/dist/ui/utils/slider.js
CHANGED
|
@@ -87,6 +87,11 @@ export const draggableAction = (node) => {
|
|
|
87
87
|
}
|
|
88
88
|
};
|
|
89
89
|
const startDrag = (e) => {
|
|
90
|
+
e.preventDefault();
|
|
91
|
+
// prevent double start drag
|
|
92
|
+
if (isDragging) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
90
95
|
// Skip non-left mouse button clicks
|
|
91
96
|
if (!('touches' in e) && e.button !== 0) {
|
|
92
97
|
return;
|
|
@@ -127,9 +132,11 @@ export const draggableAction = (node) => {
|
|
|
127
132
|
window.removeEventListener('keydown', handleKeys);
|
|
128
133
|
};
|
|
129
134
|
node.addEventListener('mousedown', startDrag);
|
|
135
|
+
node.addEventListener('touchstart', startDrag);
|
|
130
136
|
return {
|
|
131
137
|
destroy: () => {
|
|
132
138
|
node.removeEventListener('mousedown', startDrag);
|
|
139
|
+
node.removeEventListener('touchstart', startDrag);
|
|
133
140
|
resetDragging();
|
|
134
141
|
}
|
|
135
142
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slider.js","sourceRoot":"","sources":["slider.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"slider.js","sourceRoot":"","sources":["slider.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/dist/core/HLSLoader.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { type LoaderEventsMap, type LoaderInterface, type LoadParams } from './LoaderInterface.js';
|
|
2
|
-
import Hls, { type HlsConfig } from 'hls.js';
|
|
3
|
-
import type { EventEmitter } from 'eventemitter3';
|
|
4
|
-
export type HLSLoaderConfig = Partial<HlsConfig>;
|
|
5
|
-
export declare class HLSLoader implements LoaderInterface {
|
|
6
|
-
private emitter;
|
|
7
|
-
private el;
|
|
8
|
-
protected hls: Hls | null;
|
|
9
|
-
protected hlsConfig: HLSLoaderConfig;
|
|
10
|
-
constructor(emitter: EventEmitter<LoaderEventsMap>, el: HTMLVideoElement, hlsConfig?: HLSLoaderConfig);
|
|
11
|
-
load(params: LoadParams): Promise<void>;
|
|
12
|
-
private _onLevelsUpdated;
|
|
13
|
-
switchAudioTrack(id: number, graceful: boolean): void;
|
|
14
|
-
switchQualityLevel(id: number, graceful: boolean): void;
|
|
15
|
-
getAutoQualityLevelId(): number;
|
|
16
|
-
stop(): void;
|
|
17
|
-
isSupported(): boolean;
|
|
18
|
-
}
|
|
19
|
-
export declare function isHlsJsSupported(): boolean;
|
package/dist/core/HLSLoader.js
DELETED
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
import { LoaderEvents } from './LoaderInterface.js';
|
|
2
|
-
import Hls, {} from 'hls.js';
|
|
3
|
-
const autoQualityLevelId = -1;
|
|
4
|
-
export class HLSLoader {
|
|
5
|
-
emitter;
|
|
6
|
-
el;
|
|
7
|
-
hls = null;
|
|
8
|
-
hlsConfig;
|
|
9
|
-
constructor(emitter, el, hlsConfig) {
|
|
10
|
-
this.emitter = emitter;
|
|
11
|
-
this.el = el;
|
|
12
|
-
if (!this.isSupported()) {
|
|
13
|
-
throw Error('HLS.js is not supported');
|
|
14
|
-
}
|
|
15
|
-
if (hlsConfig) {
|
|
16
|
-
this.hlsConfig = { ...hlsConfig };
|
|
17
|
-
}
|
|
18
|
-
else {
|
|
19
|
-
this.hlsConfig = {};
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
async load(params) {
|
|
23
|
-
if (params.abortSignal.aborted) {
|
|
24
|
-
return Promise.reject(new DOMException('Operation aborted', 'AbortError'));
|
|
25
|
-
}
|
|
26
|
-
this.emitter.emit(LoaderEvents.Loading, params);
|
|
27
|
-
// Cancel any ongoing loading
|
|
28
|
-
if (this.hls) {
|
|
29
|
-
this.stop();
|
|
30
|
-
}
|
|
31
|
-
const cfg = { ...this.hlsConfig };
|
|
32
|
-
if ((params.startPosition ?? 0) > 0) {
|
|
33
|
-
cfg.startPosition = params.startPosition;
|
|
34
|
-
}
|
|
35
|
-
if ((params.startLevel ?? 0) > 0) {
|
|
36
|
-
cfg.startLevel = params.startLevel;
|
|
37
|
-
}
|
|
38
|
-
const hls = new Hls(cfg);
|
|
39
|
-
this.hls = hls;
|
|
40
|
-
hls.attachMedia(this.el);
|
|
41
|
-
return new Promise((resolve, reject) => {
|
|
42
|
-
// Handle abort signal
|
|
43
|
-
const onAbort = () => {
|
|
44
|
-
this.stop();
|
|
45
|
-
reject(new DOMException('Loading aborted', 'AbortError'));
|
|
46
|
-
};
|
|
47
|
-
params.abortSignal.addEventListener('abort', onAbort);
|
|
48
|
-
const onError = (event, data) => {
|
|
49
|
-
params.abortSignal.removeEventListener('abort', onAbort);
|
|
50
|
-
hls.off(Hls.Events.MANIFEST_PARSED, onManifestParsed);
|
|
51
|
-
this.emitter.emit(LoaderEvents.Error, {
|
|
52
|
-
message: `HLS loading error: ${data.error.message}`,
|
|
53
|
-
data
|
|
54
|
-
});
|
|
55
|
-
reject(new Error(`HLS loading error: ${data.error.message}`));
|
|
56
|
-
};
|
|
57
|
-
const onManifestParsed = (event, data) => {
|
|
58
|
-
params.abortSignal.removeEventListener('abort', onAbort);
|
|
59
|
-
hls.off(Hls.Events.ERROR, onError);
|
|
60
|
-
this.emitter.emit(LoaderEvents.Loaded, params);
|
|
61
|
-
this._onLevelsUpdated(data.levels);
|
|
62
|
-
// Add errors recovering listener
|
|
63
|
-
hls.on(Hls.Events.ERROR, (event, data) => {
|
|
64
|
-
if (data.fatal) {
|
|
65
|
-
switch (data.type) {
|
|
66
|
-
case Hls.ErrorTypes.MEDIA_ERROR:
|
|
67
|
-
console.log('fatal media error encountered, try to recover');
|
|
68
|
-
hls.recoverMediaError();
|
|
69
|
-
break;
|
|
70
|
-
case Hls.ErrorTypes.NETWORK_ERROR:
|
|
71
|
-
console.error('fatal network error encountered', data);
|
|
72
|
-
this.emitter.emit(LoaderEvents.Error, {
|
|
73
|
-
message: `fatal network error: ${data.error.message}`,
|
|
74
|
-
data
|
|
75
|
-
});
|
|
76
|
-
// All retries and media options have been exhausted.
|
|
77
|
-
// Immediately trying to restart loading could cause loop loading.
|
|
78
|
-
// Consider modifying loading policies to best fit your asset and network
|
|
79
|
-
// conditions (manifestLoadPolicy, playlistLoadPolicy, fragLoadPolicy).
|
|
80
|
-
break;
|
|
81
|
-
default:
|
|
82
|
-
console.error('unknown fatal error encountered', data);
|
|
83
|
-
this.emitter.emit(LoaderEvents.Error, {
|
|
84
|
-
message: `unknown fatal error: ${data.error.message}`,
|
|
85
|
-
data
|
|
86
|
-
});
|
|
87
|
-
// cannot recover
|
|
88
|
-
hls.destroy();
|
|
89
|
-
break;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
resolve();
|
|
94
|
-
};
|
|
95
|
-
hls.once(Hls.Events.ERROR, onError);
|
|
96
|
-
hls.once(Hls.Events.MANIFEST_PARSED, onManifestParsed);
|
|
97
|
-
hls.on(Hls.Events.LEVEL_SWITCHING, (event, data) => {
|
|
98
|
-
this.emitter.emit(LoaderEvents.QualityLevelSwitching, data.level, hls.autoLevelEnabled);
|
|
99
|
-
});
|
|
100
|
-
hls.on(Hls.Events.LEVEL_SWITCHED, (event, data) => {
|
|
101
|
-
this.emitter.emit(LoaderEvents.QualityLevelSwitched, data.level, hls.autoLevelEnabled);
|
|
102
|
-
});
|
|
103
|
-
hls.on(Hls.Events.LEVELS_UPDATED, (event, data) => {
|
|
104
|
-
this._onLevelsUpdated(data.levels);
|
|
105
|
-
});
|
|
106
|
-
hls.on(Hls.Events.AUDIO_TRACK_SWITCHING, (event, data) => {
|
|
107
|
-
this.emitter.emit(LoaderEvents.AudioTrackSwitching, data.id);
|
|
108
|
-
});
|
|
109
|
-
hls.on(Hls.Events.AUDIO_TRACK_SWITCHED, (event, data) => {
|
|
110
|
-
this.emitter.emit(LoaderEvents.AudioTrackSwitching, data.id);
|
|
111
|
-
});
|
|
112
|
-
hls.on(Hls.Events.AUDIO_TRACKS_UPDATED, (event, data) => {
|
|
113
|
-
const tracks = [];
|
|
114
|
-
for (const track of data.audioTracks) {
|
|
115
|
-
tracks.push({
|
|
116
|
-
id: track.id,
|
|
117
|
-
name: track.name,
|
|
118
|
-
bitrate: track.bitrate,
|
|
119
|
-
loaderData: track
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
this.emitter.emit(LoaderEvents.AudioTracksUpdated, tracks);
|
|
123
|
-
});
|
|
124
|
-
hls.loadSource(params.url);
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
_onLevelsUpdated(levels) {
|
|
128
|
-
const newLevels = [];
|
|
129
|
-
let idx = 0;
|
|
130
|
-
for (const level of levels) {
|
|
131
|
-
const newLvl = {
|
|
132
|
-
id: idx,
|
|
133
|
-
width: level.width,
|
|
134
|
-
height: level.height,
|
|
135
|
-
bitrate: level.bitrate,
|
|
136
|
-
loaderData: level
|
|
137
|
-
};
|
|
138
|
-
idx++;
|
|
139
|
-
newLevels.push(newLvl);
|
|
140
|
-
}
|
|
141
|
-
this.emitter.emit(LoaderEvents.QualityLevelsUpdated, newLevels);
|
|
142
|
-
}
|
|
143
|
-
switchAudioTrack(id, graceful) {
|
|
144
|
-
if (!this.hls) {
|
|
145
|
-
return;
|
|
146
|
-
}
|
|
147
|
-
// TODO: Support graceful = false
|
|
148
|
-
this.hls.audioTrack = id;
|
|
149
|
-
if (!graceful) {
|
|
150
|
-
// eslint-disable-next-line no-self-assign
|
|
151
|
-
this.el.currentTime = this.el.currentTime;
|
|
152
|
-
// this.el.currentTime -= 1;
|
|
153
|
-
// this.el.currentTime += 1;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
switchQualityLevel(id, graceful) {
|
|
157
|
-
if (!this.hls) {
|
|
158
|
-
return;
|
|
159
|
-
}
|
|
160
|
-
if (graceful) {
|
|
161
|
-
this.hls.nextLevel = id;
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
// Bypass HLS.js behavior that doesn't trigger event if level is selected by Auto switched to Manual
|
|
165
|
-
if (this.hls.currentLevel === id) {
|
|
166
|
-
this.hls.currentLevel = id;
|
|
167
|
-
this.emitter.emit(LoaderEvents.QualityLevelSwitching, id, this.hls.autoLevelEnabled);
|
|
168
|
-
this.emitter.emit(LoaderEvents.QualityLevelSwitched, id, this.hls.autoLevelEnabled);
|
|
169
|
-
return;
|
|
170
|
-
}
|
|
171
|
-
this.hls.currentLevel = id;
|
|
172
|
-
}
|
|
173
|
-
getAutoQualityLevelId() {
|
|
174
|
-
return autoQualityLevelId;
|
|
175
|
-
}
|
|
176
|
-
stop() {
|
|
177
|
-
if (this.hls) {
|
|
178
|
-
try {
|
|
179
|
-
this.hls.stopLoad();
|
|
180
|
-
}
|
|
181
|
-
catch (e) { }
|
|
182
|
-
try {
|
|
183
|
-
this.hls.destroy();
|
|
184
|
-
}
|
|
185
|
-
catch (e) { }
|
|
186
|
-
// Reset current time to ensure video playback will start from needed position
|
|
187
|
-
this.hls = null;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
isSupported() {
|
|
191
|
-
return isHlsJsSupported();
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
export function isHlsJsSupported() {
|
|
195
|
-
return Hls.isSupported();
|
|
196
|
-
}
|