@codercms/web-player 0.0.37 → 0.0.41
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/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 +19 -191
- package/dist/core/VideoPlayer.js +92 -594
- 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/VideoPlayerMediaStateProxy.d.ts +17 -0
- package/dist/core/VideoPlayerMediaStateProxy.js +42 -0
- package/dist/core/VideoPlayerMediaStateProxy.js.map +1 -0
- package/dist/core/svelte/VideoPlayerMediaStateSvelteStore.d.ts +58 -0
- package/dist/core/svelte/VideoPlayerMediaStateSvelteStore.js +146 -0
- package/dist/core/svelte/VideoPlayerMediaStateSvelteStore.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/core/types/index.d.ts +4 -0
- package/dist/core/types/index.js +1 -0
- package/dist/core/types/index.js.map +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 +7 -8
- package/dist/ui/ProgressBar.svelte.d.ts +1 -1
- package/package.json +1 -1
- package/dist/HybridDoublyLinkedList.d.ts +0 -20
- package/dist/HybridDoublyLinkedList.js +0 -90
- package/dist/HybridDoublyLinkedList.js.map +0 -1
- package/dist/HybridLinkedList.d.ts +0 -18
- package/dist/HybridLinkedList.js +0 -90
- package/dist/HybridLinkedList.js.map +0 -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
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
<script>import { PlayerEvents } from "../core/
|
|
2
|
-
import { LoaderEvents } from "../core/LoaderInterface";
|
|
1
|
+
<script>import { PlayerEvents } from "../core/VideoPlayerEvents.js";
|
|
3
2
|
import { onMount } from "svelte";
|
|
4
3
|
import {
|
|
5
4
|
getValueByMousePos,
|
|
6
5
|
getValueForDragEvent,
|
|
7
6
|
normalizePointerPos,
|
|
8
7
|
draggableAction
|
|
9
|
-
} from "./utils/slider";
|
|
10
|
-
import { toDuration } from "./utils/duration";
|
|
8
|
+
} from "./utils/slider.js";
|
|
9
|
+
import { toDuration } from "./utils/duration.js";
|
|
11
10
|
export let player;
|
|
12
11
|
let selfEl;
|
|
13
12
|
let currentTime = 0;
|
|
@@ -38,16 +37,16 @@ onMount(() => {
|
|
|
38
37
|
currentTime = player.currentTime;
|
|
39
38
|
duration = player.duration;
|
|
40
39
|
buffered = player.buffered;
|
|
41
|
-
player.subscribe(PlayerEvents.
|
|
40
|
+
player.subscribe(PlayerEvents.DurationChange, (newDuration) => {
|
|
42
41
|
duration = newDuration;
|
|
43
42
|
});
|
|
44
|
-
player.subscribe(PlayerEvents.
|
|
43
|
+
player.subscribe(PlayerEvents.CurrentTimeUpdate, (newCurrentTime) => {
|
|
45
44
|
currentTime = newCurrentTime;
|
|
46
45
|
});
|
|
47
|
-
player.subscribe(PlayerEvents.
|
|
46
|
+
player.subscribe(PlayerEvents.BufferingProgress, (newBuffered) => {
|
|
48
47
|
buffered = newBuffered;
|
|
49
48
|
});
|
|
50
|
-
player.subscribe(
|
|
49
|
+
player.subscribe(PlayerEvents.BeforeLoading, () => {
|
|
51
50
|
currentTime = 0;
|
|
52
51
|
duration = 0;
|
|
53
52
|
currentTImeOffset = 0;
|
package/package.json
CHANGED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
export declare class DoublyListNode<T> {
|
|
2
|
-
data: T;
|
|
3
|
-
next: DoublyListNode<T> | null;
|
|
4
|
-
prev: DoublyListNode<T> | null;
|
|
5
|
-
constructor(data: T);
|
|
6
|
-
}
|
|
7
|
-
export declare class HybridDoublyLinkedList<T> {
|
|
8
|
-
private _head;
|
|
9
|
-
private _tail;
|
|
10
|
-
private _size;
|
|
11
|
-
private _flatList;
|
|
12
|
-
head(): DoublyListNode<T> | null;
|
|
13
|
-
tail(): DoublyListNode<T> | null;
|
|
14
|
-
append(data: T): void;
|
|
15
|
-
remove(data: T): void;
|
|
16
|
-
find(item: T): DoublyListNode<T> | null;
|
|
17
|
-
toArray(): T[];
|
|
18
|
-
getSize(): number;
|
|
19
|
-
[Symbol.iterator](): Iterator<T>;
|
|
20
|
-
}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
export class DoublyListNode {
|
|
2
|
-
data;
|
|
3
|
-
next;
|
|
4
|
-
prev;
|
|
5
|
-
constructor(data) {
|
|
6
|
-
this.data = data;
|
|
7
|
-
this.next = null;
|
|
8
|
-
this.prev = null;
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
export class HybridDoublyLinkedList {
|
|
12
|
-
_head = null;
|
|
13
|
-
_tail = null;
|
|
14
|
-
_size = 0;
|
|
15
|
-
_flatList = [];
|
|
16
|
-
head() {
|
|
17
|
-
return this._head;
|
|
18
|
-
}
|
|
19
|
-
tail() {
|
|
20
|
-
return this._tail;
|
|
21
|
-
}
|
|
22
|
-
// Add a new node to the end of the linked list.
|
|
23
|
-
append(data) {
|
|
24
|
-
const newNode = new DoublyListNode(data);
|
|
25
|
-
if (!this._head) {
|
|
26
|
-
this._head = newNode;
|
|
27
|
-
this._tail = newNode;
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
newNode.prev = this._tail;
|
|
31
|
-
this._tail.next = newNode;
|
|
32
|
-
this._tail = newNode;
|
|
33
|
-
}
|
|
34
|
-
this._size++;
|
|
35
|
-
this._flatList.push(data);
|
|
36
|
-
}
|
|
37
|
-
// Remove the first occurrence of a node with the given data.
|
|
38
|
-
remove(data) {
|
|
39
|
-
let current = this._head;
|
|
40
|
-
while (current) {
|
|
41
|
-
if (current.data === data) {
|
|
42
|
-
if (current.prev) {
|
|
43
|
-
current.prev.next = current.next;
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
this._head = current.next;
|
|
47
|
-
}
|
|
48
|
-
if (current.next) {
|
|
49
|
-
current.next.prev = current.prev;
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
this._tail = current.prev;
|
|
53
|
-
}
|
|
54
|
-
this._size--;
|
|
55
|
-
const indexToRemove = this._flatList.indexOf(data);
|
|
56
|
-
if (indexToRemove !== -1) {
|
|
57
|
-
this._flatList.splice(indexToRemove, 1);
|
|
58
|
-
}
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
current = current.next;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
find(item) {
|
|
65
|
-
let current = this._head;
|
|
66
|
-
while (current) {
|
|
67
|
-
if (current.data === item) {
|
|
68
|
-
return current;
|
|
69
|
-
}
|
|
70
|
-
current = current.next;
|
|
71
|
-
}
|
|
72
|
-
return null;
|
|
73
|
-
}
|
|
74
|
-
// Convert the linked list to an array for easier access and iteration.
|
|
75
|
-
toArray() {
|
|
76
|
-
return this._flatList;
|
|
77
|
-
}
|
|
78
|
-
// Get the size (number of nodes) of the linked list.
|
|
79
|
-
getSize() {
|
|
80
|
-
return this._size;
|
|
81
|
-
}
|
|
82
|
-
// Implement the Symbol.iterator method for iteration.
|
|
83
|
-
*[Symbol.iterator]() {
|
|
84
|
-
let current = this._head;
|
|
85
|
-
while (current) {
|
|
86
|
-
yield current.data;
|
|
87
|
-
current = current.next;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HybridDoublyLinkedList.js","sourceRoot":"","sources":["HybridDoublyLinkedList.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export declare class ListNode<T> {
|
|
2
|
-
data: T;
|
|
3
|
-
next: ListNode<T> | null;
|
|
4
|
-
constructor(data: T);
|
|
5
|
-
}
|
|
6
|
-
export declare class HybridLinkedList<T> {
|
|
7
|
-
private head;
|
|
8
|
-
private tail;
|
|
9
|
-
private size;
|
|
10
|
-
private flatList;
|
|
11
|
-
constructor();
|
|
12
|
-
getHead(): ListNode<T> | null;
|
|
13
|
-
append(data: T): void;
|
|
14
|
-
remove(data: T): void;
|
|
15
|
-
toArray(): T[];
|
|
16
|
-
getSize(): number;
|
|
17
|
-
[Symbol.iterator](): Iterator<T>;
|
|
18
|
-
}
|
package/dist/HybridLinkedList.js
DELETED
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
export class ListNode {
|
|
2
|
-
data;
|
|
3
|
-
next;
|
|
4
|
-
constructor(data) {
|
|
5
|
-
this.data = data;
|
|
6
|
-
this.next = null;
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
export class HybridLinkedList {
|
|
10
|
-
head;
|
|
11
|
-
tail;
|
|
12
|
-
size;
|
|
13
|
-
flatList;
|
|
14
|
-
constructor() {
|
|
15
|
-
this.head = null;
|
|
16
|
-
this.tail = null;
|
|
17
|
-
this.size = 0;
|
|
18
|
-
this.flatList = [];
|
|
19
|
-
}
|
|
20
|
-
getHead() {
|
|
21
|
-
return this.head ?? null;
|
|
22
|
-
}
|
|
23
|
-
// Add a new node to the end of the linked list.
|
|
24
|
-
append(data) {
|
|
25
|
-
const newNode = new ListNode(data);
|
|
26
|
-
if (!this.head) {
|
|
27
|
-
this.head = newNode;
|
|
28
|
-
this.tail = newNode;
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
this.tail.next = newNode;
|
|
32
|
-
this.tail = newNode;
|
|
33
|
-
}
|
|
34
|
-
this.size++;
|
|
35
|
-
this.flatList.push(data);
|
|
36
|
-
}
|
|
37
|
-
// Remove the first occurrence of a node with the given data.
|
|
38
|
-
remove(data) {
|
|
39
|
-
if (!this.head)
|
|
40
|
-
return;
|
|
41
|
-
if (this.head.data === data) {
|
|
42
|
-
this.head = this.head.next;
|
|
43
|
-
if (!this.head)
|
|
44
|
-
this.tail = null;
|
|
45
|
-
this.size--;
|
|
46
|
-
this.flatList.shift();
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
let current = this.head;
|
|
50
|
-
while (current.next) {
|
|
51
|
-
if (current.next.data === data) {
|
|
52
|
-
current.next = current.next.next;
|
|
53
|
-
if (!current.next)
|
|
54
|
-
this.tail = current;
|
|
55
|
-
this.size--;
|
|
56
|
-
const indexToRemove = this.flatList.indexOf(data);
|
|
57
|
-
if (indexToRemove !== -1)
|
|
58
|
-
this.flatList.splice(indexToRemove, 1);
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
current = current.next;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
// Convert the linked list to an array for easier access and iteration.
|
|
65
|
-
toArray() {
|
|
66
|
-
return this.flatList;
|
|
67
|
-
}
|
|
68
|
-
// Get the size (number of nodes) of the linked list.
|
|
69
|
-
getSize() {
|
|
70
|
-
return this.size;
|
|
71
|
-
}
|
|
72
|
-
// Define the Symbol.iterator method to make the list iterable.
|
|
73
|
-
[Symbol.iterator]() {
|
|
74
|
-
let current = this.head;
|
|
75
|
-
let index = 0;
|
|
76
|
-
return {
|
|
77
|
-
next: () => {
|
|
78
|
-
if (current) {
|
|
79
|
-
const value = current.data;
|
|
80
|
-
current = current.next;
|
|
81
|
-
index++;
|
|
82
|
-
return { value, done: false };
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
return { value: undefined, done: true };
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HybridLinkedList.js","sourceRoot":"","sources":["HybridLinkedList.ts"],"names":[],"mappings":"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"}
|
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
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HLSLoader.js","sourceRoot":"","sources":["HLSLoader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { type LoaderEventsMap, type LoaderInterface, type LoadParams } from './LoaderInterface.js';
|
|
2
|
-
import type { EventEmitter } from 'eventemitter3';
|
|
3
|
-
export declare class NativeLoader implements LoaderInterface {
|
|
4
|
-
private emitter;
|
|
5
|
-
private el;
|
|
6
|
-
constructor(emitter: EventEmitter<LoaderEventsMap>, el: HTMLVideoElement);
|
|
7
|
-
getAutoQualityLevelId(): number;
|
|
8
|
-
isSupported(): boolean;
|
|
9
|
-
load(params: LoadParams): Promise<void>;
|
|
10
|
-
stop(): void;
|
|
11
|
-
switchAudioTrack(id: number, graceful: boolean): void;
|
|
12
|
-
switchQualityLevel(id: number, graceful: boolean): void;
|
|
13
|
-
canPlayType(mimeType: string): boolean;
|
|
14
|
-
}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { LoaderEvents } from './LoaderInterface.js';
|
|
2
|
-
export class NativeLoader {
|
|
3
|
-
emitter;
|
|
4
|
-
el;
|
|
5
|
-
constructor(emitter, el) {
|
|
6
|
-
this.emitter = emitter;
|
|
7
|
-
this.el = el;
|
|
8
|
-
if (!this.isSupported()) {
|
|
9
|
-
throw Error('HLS.js is not supported');
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
getAutoQualityLevelId() {
|
|
13
|
-
return 0;
|
|
14
|
-
}
|
|
15
|
-
isSupported() {
|
|
16
|
-
return true;
|
|
17
|
-
}
|
|
18
|
-
async load(params) {
|
|
19
|
-
if (params.abortSignal.aborted) {
|
|
20
|
-
return Promise.reject(new DOMException('Operation aborted', 'AbortError'));
|
|
21
|
-
}
|
|
22
|
-
this.emitter.emit(LoaderEvents.Loading, params);
|
|
23
|
-
return new Promise((resolve, reject) => {
|
|
24
|
-
// Handle abort signal
|
|
25
|
-
const onAbort = () => {
|
|
26
|
-
this.stop();
|
|
27
|
-
reject(new DOMException('Loading aborted', 'AbortError'));
|
|
28
|
-
};
|
|
29
|
-
params.abortSignal.addEventListener('abort', onAbort);
|
|
30
|
-
const onReadyToPlay = () => {
|
|
31
|
-
params.abortSignal.removeEventListener('abort', onAbort);
|
|
32
|
-
this.el.removeEventListener('error', onError);
|
|
33
|
-
this.emitter.emit(LoaderEvents.Loaded, params);
|
|
34
|
-
resolve();
|
|
35
|
-
};
|
|
36
|
-
const onError = (ev) => {
|
|
37
|
-
params.abortSignal.removeEventListener('abort', onAbort);
|
|
38
|
-
this.el.removeEventListener('canplay', onReadyToPlay);
|
|
39
|
-
this.emitter.emit(LoaderEvents.Error, ev.error);
|
|
40
|
-
reject(ev.error);
|
|
41
|
-
};
|
|
42
|
-
const paused = this.el.paused;
|
|
43
|
-
this.el.src = params.url;
|
|
44
|
-
// Respect playback state
|
|
45
|
-
this.el.autoplay = !paused;
|
|
46
|
-
this.el.addEventListener('canplay', onReadyToPlay, { once: true });
|
|
47
|
-
this.el.addEventListener('error', onError, { once: true });
|
|
48
|
-
this.el.load();
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
stop() {
|
|
52
|
-
this.el.pause();
|
|
53
|
-
this.el.src = '';
|
|
54
|
-
}
|
|
55
|
-
switchAudioTrack(id, graceful) {
|
|
56
|
-
console.error('native loader does not support audio track switch');
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
switchQualityLevel(id, graceful) {
|
|
60
|
-
console.error('native loader does not support quality level switch');
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
canPlayType(mimeType) {
|
|
64
|
-
return this.el.canPlayType(mimeType) !== '';
|
|
65
|
-
}
|
|
66
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NativeLoader.js","sourceRoot":"","sources":["NativeLoader.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|