@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.
Files changed (64) hide show
  1. package/dist/HybridDoublyLinkedList.js.map +1 -1
  2. package/dist/HybridLinkedList.js.map +1 -1
  3. package/dist/core/AudioCtx/AudioContext.d.ts +2 -0
  4. package/dist/core/AudioCtx/AudioContext.js +92 -0
  5. package/dist/core/AudioCtx/AudioContext.js.map +1 -0
  6. package/dist/core/Loaders/BaseLoader.d.ts +17 -0
  7. package/dist/core/Loaders/BaseLoader.js +50 -0
  8. package/dist/core/Loaders/BaseLoader.js.map +1 -0
  9. package/dist/core/Loaders/HLSLoader.d.ts +17 -0
  10. package/dist/core/Loaders/HLSLoader.js +313 -0
  11. package/dist/core/Loaders/HLSLoader.js.map +1 -0
  12. package/dist/core/{LoaderInterface.d.ts → Loaders/LoaderInterface.d.ts} +11 -3
  13. package/dist/core/{LoaderInterface.js → Loaders/LoaderInterface.js} +6 -0
  14. package/dist/core/{LoaderInterface.js.map → Loaders/LoaderInterface.js.map} +1 -1
  15. package/dist/core/Loaders/NativeAudioTrackList.d.ts +39 -0
  16. package/dist/core/Loaders/NativeAudioTrackList.js.map +1 -0
  17. package/dist/core/Loaders/NativeLoader.d.ts +16 -0
  18. package/dist/core/Loaders/NativeLoader.js +114 -0
  19. package/dist/core/Loaders/NativeLoader.js.map +1 -0
  20. package/dist/core/Playlist.d.ts +4 -3
  21. package/dist/core/Playlist.js.map +1 -1
  22. package/dist/core/PlaylistPlayer.d.ts +3 -2
  23. package/dist/core/PlaylistPlayer.js +5 -3
  24. package/dist/core/PlaylistPlayer.js.map +1 -1
  25. package/dist/core/VideoPlayer.d.ts +22 -184
  26. package/dist/core/VideoPlayer.js +102 -577
  27. package/dist/core/VideoPlayer.js.map +1 -1
  28. package/dist/core/VideoPlayerEvents.d.ts +74 -0
  29. package/dist/core/VideoPlayerEvents.js +40 -0
  30. package/dist/core/VideoPlayerEvents.js.map +1 -0
  31. package/dist/core/VideoPlayerMediaLoadManager.d.ts +50 -0
  32. package/dist/core/VideoPlayerMediaLoadManager.js +269 -0
  33. package/dist/core/VideoPlayerMediaLoadManager.js.map +1 -0
  34. package/dist/core/VideoPlayerMediaState.d.ts +39 -0
  35. package/dist/core/VideoPlayerMediaState.js +161 -0
  36. package/dist/core/VideoPlayerMediaState.js.map +1 -0
  37. package/dist/core/types/BufferedPart.d.ts +4 -0
  38. package/dist/core/types/BufferedPart.js +1 -0
  39. package/dist/core/types/BufferedPart.js.map +1 -0
  40. package/dist/core/types/PlayerLoadParams.d.ts +11 -0
  41. package/dist/core/types/PlayerLoadParams.js +1 -0
  42. package/dist/core/types/PlayerLoadParams.js.map +1 -0
  43. package/dist/core/types/QualityLevel.js +1 -0
  44. package/dist/index.d.ts +9 -4
  45. package/dist/index.js +9 -4
  46. package/dist/ui/LoadingIndicator.svelte +35 -16
  47. package/dist/ui/LoadingIndicator.svelte.d.ts +1 -1
  48. package/dist/ui/ProgressBar.svelte +6 -6
  49. package/dist/ui/ProgressBar.svelte.d.ts +1 -1
  50. package/dist/ui/utils/slider.js +7 -0
  51. package/dist/ui/utils/slider.js.map +1 -1
  52. package/package.json +1 -1
  53. package/dist/core/HLSLoader.d.ts +0 -19
  54. package/dist/core/HLSLoader.js +0 -196
  55. package/dist/core/HLSLoader.js.map +0 -1
  56. package/dist/core/NativeLoader.d.ts +0 -14
  57. package/dist/core/NativeLoader.js +0 -66
  58. package/dist/core/NativeLoader.js.map +0 -1
  59. /package/dist/core/{AudioTrack.js → Loaders/NativeAudioTrackList.js} +0 -0
  60. /package/dist/core/{AudioTrack.d.ts → types/AudioTrack.d.ts} +0 -0
  61. /package/dist/core/{QualityLevel.js → types/AudioTrack.js} +0 -0
  62. /package/dist/core/{AudioTrack.js.map → types/AudioTrack.js.map} +0 -0
  63. /package/dist/core/{QualityLevel.d.ts → types/QualityLevel.d.ts} +0 -0
  64. /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":"AAKA,OAAO,EAAE,YAAY,EAA6B,MAAM,gCAAgC,CAAC;AAEzF,MAAM,OAAO,qBAAqB;IAkBb;IAjBpB,MAAM,GAAG,IAAI,CAAC;IACd,QAAQ,GAAG,CAAC,CAAC;IACb,WAAW,GAAG,CAAC,CAAC;IAChB,YAAY,GAAG,CAAC,CAAC;IACjB,KAAK,GAAG,KAAK,CAAC;IACd,MAAM,GAAG,CAAC,CAAC;IACX,6BAA6B;IAC7B,QAAQ,GAAwB,EAAE,CAAC;IACnC,SAAS,GAAG,KAAK,CAAC;IAElB,aAAa,GAAG,IAAI,CAAC;IACrB,mBAAmB,GAAwB,IAAI,CAAC;IAChD,aAAa,GAAwB,EAAE,CAAC;IAExC,iBAAiB,GAAsB,IAAI,CAAC;IAC5C,WAAW,GAAiB,EAAE,CAAC;IAE/B,YAAoB,OAA2C;QAA3C,YAAO,GAAP,OAAO,CAAoC;IAAG,CAAC;IAEnE,UAAU,CAAC,EAAoB;QAC9B,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QAC7B,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;QACvC,IAAI,CAAC,4BAA4B,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;QAEzC,mBAAmB;QACnB,IAAI,EAAE,CAAC,UAAU,GAAG,CAAC,EAAE;YACtB,uBAAuB;YACvB,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,UAAU,KAAK,CAAC,IAAI,EAAE,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC;SACjE;IACF,CAAC;IAED,oBAAoB;QACnB,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAExB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAE7B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,YAAY,CAAC,SAAkB;QAC9B,IAAI,SAAS,KAAK,IAAI,CAAC,MAAM,EAAE;YAC9B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YAExB,IAAI,SAAS,EAAE;gBACd,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;aACtC;iBAAM;gBACN,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;aACrC;SACD;IACF,CAAC;IAED,YAAY,CAAC,MAAc,EAAE,QAAiB;QAC7C,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAEvC,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,IAAI,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE;YAC3B,SAAS,GAAG,IAAI,CAAC;YAEjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YAErB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;SACrD;QAED,IAAI,QAAQ,KAAK,IAAI,CAAC,KAAK,EAAE;YAC5B,SAAS,GAAG,IAAI,CAAC;YAEjB,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;YAEtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;SACrD;QAED,IAAI,SAAS,EAAE;YACd,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;SACpE;IACF,CAAC;IAED,iBAAiB,CAAC,OAAe;QAChC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAEzC,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,EAAE;YACjC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;YAE3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;SAC3D;IACF,CAAC;IAED,cAAc,CAAC,WAAmB;QACjC,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAEjD,IAAI,IAAI,CAAC,QAAQ,KAAK,WAAW,EAAE;YAClC,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;YAE5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,WAAW,CAAC,CAAC;SACpE;IACF,CAAC;IAED,4BAA4B,CAAC,WAAuB;QACnD,MAAM,KAAK,GAAmB,EAAE,CAAC;QAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAEtD,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;SAC3B;QAED,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,cAAc,CAAC,WAA2B;QACzC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,EAAE;YAChD,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;YAE5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,yBAAyB,EAAE,WAAW,CAAC,CAAC;YAEvE,OAAO;SACP;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC5C,IACC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK;gBAC/C,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAC1C;gBACD,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;gBAE5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,yBAAyB,EAAE,WAAW,CAAC,CAAC;gBAEvE,OAAO;aACP;SACD;IACF,CAAC;IAED,eAAe,CAAC,YAAqB;QACpC,IAAI,YAAY,KAAK,IAAI,CAAC,SAAS,EAAE;YACpC,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC;YAC9B,IAAI,YAAY,EAAE;gBACjB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;aACjD;iBAAM;gBACN,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;aAC/C;SACD;IACF,CAAC;IAED,kBAAkB,CAAC,OAAe;QACjC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAEzC,IAAI,IAAI,CAAC,YAAY,KAAK,OAAO,EAAE;YAClC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;YAE5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;SAC5D;IACF,CAAC;IAED,mBAAmB,CAAC,SAAyB;QAC5C,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAE/B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAC;IACjE,CAAC;IAED,kBAAkB,CAAC,KAAmB,EAAE,aAAsB;QAC7D,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,4CAA4C;QAE5C,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,8CAA8C;QAE9C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;IAC5E,CAAC;IAED,oBAAoB,CAAC,KAAa;QACjC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC;IACnE,CAAC;IAED,iBAAiB,CAAC,WAAyB;QAC1C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,0CAA0C;QAE1C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;IACjE,CAAC;IAED,gBAAgB,CAAC,UAAsB;QACtC,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC;QACpC,gDAAgD;QAEhD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;IAChE,CAAC;IAED,kBAAkB,CAAC,OAAe;QACjC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,IAAI,IAAI,CAAC;IACvE,CAAC;IAEO,gBAAgB,CAAC,GAAW;QACnC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACjC,OAAO,CAAC,CAAC;SACT;QAED,OAAO,GAAG,CAAC;IACZ,CAAC;CACD"}
@@ -0,0 +1,4 @@
1
+ export type BufferedPart = {
2
+ start: number;
3
+ end: number;
4
+ };
@@ -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/HLSLoader.js";
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/HLSLoader.js';
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, VideoPlayer } from "../core/VideoPlayer";
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 timeoutId = 0;
6
+ let buffering = false;
7
+ let loadingTimeoutId = 0;
8
+ let bufferingTimeoutId = 0;
7
9
  const setLoading = () => {
8
- if (timeoutId) {
10
+ if (loadingTimeoutId) {
9
11
  return;
10
12
  }
11
- timeoutId = window.setTimeout(() => {
13
+ loadingTimeoutId = window.setTimeout(() => {
12
14
  loading = true;
13
15
  }, loadThreshold);
14
16
  };
15
17
  const setLoaded = () => {
16
- if (timeoutId) {
17
- window.clearTimeout(timeoutId);
18
- timeoutId = 0;
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.LoadingStarted, setLoading);
24
- player.subscribe(PlayerEvents.BufferingStarted, setLoading);
25
- player.subscribe(PlayerEvents.LoadingEnded, setLoaded);
26
- player.subscribe(PlayerEvents.BufferingEnded, setLoaded);
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.LoadingStarted, setLoading);
29
- player.unsubscribe(PlayerEvents.BufferingStarted, setLoading);
30
- player.unsubscribe(PlayerEvents.LoadingEnded, setLoaded);
31
- player.unsubscribe(PlayerEvents.BufferingEnded, setLoaded);
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,5 +1,5 @@
1
1
  import { SvelteComponent } from "svelte";
2
- import { VideoPlayer } from '../core/VideoPlayer';
2
+ import type { VideoPlayer } from '../core/VideoPlayer.js';
3
3
  declare const __propDef: {
4
4
  props: {
5
5
  player: VideoPlayer;
@@ -1,13 +1,13 @@
1
- <script>import { PlayerEvents } from "../core/VideoPlayer";
2
- import { LoaderEvents } from "../core/LoaderInterface";
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.PlaybackTimeUpdate, (newCurrentTime) => {
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(LoaderEvents.Loading, () => {
50
+ player.subscribe(PlayerEvents.BeforeLoading, () => {
51
51
  currentTime = 0;
52
52
  duration = 0;
53
53
  currentTImeOffset = 0;
@@ -1,5 +1,5 @@
1
1
  import { SvelteComponent } from "svelte";
2
- import type { VideoPlayer } from '../core/VideoPlayer';
2
+ import type { VideoPlayer } from '../core/VideoPlayer.js';
3
3
  declare const __propDef: {
4
4
  props: {
5
5
  player: VideoPlayer;
@@ -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":"AAQA,MAAM,UAAU,mBAAmB,CAAC,CAA0B;IAC7D,IAAI,SAAS,IAAI,CAAC,EAAE;QACnB,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAE3B,OAAO;YACN,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO;SACtB,CAAC;KACF;IAED,IAAI,SAAS,IAAI,CAAC,EAAE;QACnB,OAAO;YACN,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,OAAO,EAAE,CAAC,CAAC,OAAO;SAClB,CAAC;KACF;IAED,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,KAAa,EAAE,MAAe;IAC1E,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;QAC/B,OAAO,CAAC,CAAC;KACT;IAED,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;QACnC,OAAO,CAAC,CAAC;KACT;IAED,IAAI,CAAC,MAAM,EAAE;QACZ,OAAO,CAAC,CAAC;KACT;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;IAC5C,MAAM,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC;IAE1B,OAAO,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,KAAa;IACzD,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;QACjE,OAAO,CAAC,CAAC;KACT;IAED,OAAO,GAAG,GAAG,KAAK,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAa,EAAE,GAAW,EAAE,MAAmB;IACjF,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;QAC/B,OAAO,CAAC,CAAC;KACT;IAED,IAAI,CAAC,MAAM,EAAE;QACZ,OAAO,CAAC,CAAC;KACT;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;IAC5C,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;IAC/C,MAAM,KAAK,GAAG,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC;IAE1C,OAAO,GAAG,GAAG,KAAK,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,oBAAoB,CACnC,MAAmB,EACnB,YAAsB,EACtB,GAAW,EACX,GAAW,EACX,IAAgB;IAEhB,IAAI,UAAU,GAAG,kBAAkB,CAAC,YAAY,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAE/D,IAAI,UAAU,GAAG,GAAG,EAAE;QACrB,UAAU,GAAG,GAAG,CAAC;KACjB;SAAM,IAAI,UAAU,GAAG,GAAG,EAAE;QAC5B,UAAU,GAAG,GAAG,CAAC;KACjB;IAED,IAAI,IAAI,EAAE;QACT,UAAU,GAAG,gBAAgB,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;KACrD;IAED,OAAO,UAAU,CAAC;AACnB,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,SAAiB,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;AAOpF,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAE,QAAgB,EAAE,IAAe,EAAU,EAAE;IACnF,sCAAsC;IACtC,wCAAwC;IACxC,8BAA8B;IAC9B,MAAM,SAAS,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;IAC/C,IAAI,OAAO,GAAG,GAAG,GAAG,SAAS,CAAC;IAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;QACzC,OAAO,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;KAClD;IAED,kDAAkD;IAClD,iCAAiC;IAEjC,+DAA+D;IAC/D,6DAA6D;IAC7D,gDAAgD;IAChD,OAAO,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AAC1C,CAAC,CAAC;AAOF,MAAM,CAAC,MAAM,eAAe,GASxB,CAAC,IAAiB,EAAE,EAAE;IACzB,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,MAAM,UAAU,GAAG,CAAC,CAAgB,EAAE,EAAE;QACvC,QAAQ,CAAC,CAAC,GAAG,EAAE;YACd,KAAK,KAAK,CAAC;YACX,KAAK,QAAQ;gBACZ,aAAa,EAAE,CAAC;gBAChB,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC;SACrD;IACF,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,CAA0B,EAAE,EAAE;QAChD,oCAAoC;QACpC,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YACxC,OAAO;SACP;QAED,MAAM,EAAE,GAAG,IAAI,WAAW,CAAC,aAAa,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3E,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAEvB,sCAAsC;QACtC,IAAI,EAAE,CAAC,gBAAgB,EAAE;YACxB,OAAO;SACP;QAED,UAAU,GAAG,IAAI,CAAC;QAClB,UAAU,CAAC,CAAC,CAAC,CAAC;QAEd,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACjD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACrE,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC7C,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAChD,CAAC,CAAC;IAEF,sDAAsD;IACtD,MAAM,UAAU,GAAG,CAAC,CAA0B,EAAE,EAAE;QACjD,IAAI,CAAC,UAAU,EAAE;YAChB,OAAO;SACP;QAED,MAAM,YAAY,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;QAE5C,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC7F,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,GAAG,EAAE;QACpB,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;QAEjD,aAAa,EAAE,CAAC;IACjB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,GAAG,EAAE;QAC1B,UAAU,GAAG,KAAK,CAAC;QAEnB,8EAA8E;QAC9E,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACnD,CAAC,CAAC;IAEF,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAE9C,OAAO;QACN,OAAO,EAAE,GAAG,EAAE;YACb,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAEjD,aAAa,EAAE,CAAC;QACjB,CAAC;KACD,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"slider.js","sourceRoot":"","sources":["slider.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codercms/web-player",
3
- "version": "0.0.36",
3
+ "version": "0.0.40",
4
4
  "scripts": {
5
5
  "dev": "vite dev --host=0.0.0.0 --port=5174",
6
6
  "build": "vite build && npm run package",
@@ -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;
@@ -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
- }