l-min-components 1.7.1323 → 1.7.1324
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/package.json
CHANGED
|
@@ -37,56 +37,16 @@ const useAudioPlayer = ({ src, streamSrc }) => {
|
|
|
37
37
|
|
|
38
38
|
useEffect(() => {
|
|
39
39
|
let hls;
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const duration = audio.duration;
|
|
49
|
-
setProgress({ currentTime, duration });
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
const attachAudioEvents = () => {
|
|
54
|
-
audio.addEventListener("ended", handleEnded);
|
|
55
|
-
audio.addEventListener("pause", handlePause);
|
|
56
|
-
audio.addEventListener("playing", handlePlay);
|
|
57
|
-
audio.addEventListener("timeupdate", handleProgress);
|
|
58
|
-
audio.addEventListener("loadedmetadata", handleProgress);
|
|
59
|
-
audio.addEventListener("waiting", () => setIsBuffering(true));
|
|
60
|
-
audio.addEventListener("canplay", () => setIsBuffering(false));
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
const cleanupAudioEvents = () => {
|
|
64
|
-
audio.removeEventListener("ended", handleEnded);
|
|
65
|
-
audio.removeEventListener("pause", handlePause);
|
|
66
|
-
audio.removeEventListener("playing", handlePlay);
|
|
67
|
-
audio.removeEventListener("timeupdate", handleProgress);
|
|
68
|
-
audio.removeEventListener("loadedmetadata", handleProgress);
|
|
69
|
-
audio.removeEventListener("waiting", () => setIsBuffering(true));
|
|
70
|
-
audio.removeEventListener("canplay", () => setIsBuffering(false));
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
if (audio && accountId) {
|
|
74
|
-
if (src) {
|
|
75
|
-
// Load src directly — faster, non-stream
|
|
76
|
-
audio.src = src;
|
|
77
|
-
const handleMetadata = () => {
|
|
78
|
-
setIsReady(true);
|
|
79
|
-
handleProgress();
|
|
80
|
-
audio.removeEventListener("loadedmetadata", handleMetadata);
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
audio.addEventListener("loadedmetadata", handleMetadata);
|
|
84
|
-
attachAudioEvents();
|
|
85
|
-
audio.load();
|
|
86
|
-
} else if (Hls.isSupported() && streamSrc) {
|
|
87
|
-
// HLS streaming setup
|
|
40
|
+
if (audio && src) {
|
|
41
|
+
audio.src = src;
|
|
42
|
+
audio.addEventListener("loadedmetadata", () => {
|
|
43
|
+
setIsReady(true);
|
|
44
|
+
});
|
|
45
|
+
audio.load();
|
|
46
|
+
} else if (audio && accountId) {
|
|
47
|
+
if (Hls?.isSupported() && streamSrc && !src) {
|
|
88
48
|
hls = new Hls({
|
|
89
|
-
xhrSetup: (xhr, url)
|
|
49
|
+
xhrSetup: function (xhr, url) {
|
|
90
50
|
const modifiedURL = `${url}?_account=${accountId}`;
|
|
91
51
|
xhr.open("GET", modifiedURL, true);
|
|
92
52
|
xhr.setRequestHeader("Authorization", `Bearer ${accessToken}`);
|
|
@@ -94,7 +54,7 @@ const useAudioPlayer = ({ src, streamSrc }) => {
|
|
|
94
54
|
lowLatencyMode: true,
|
|
95
55
|
});
|
|
96
56
|
|
|
97
|
-
hls
|
|
57
|
+
hls?.attachMedia(audio);
|
|
98
58
|
|
|
99
59
|
hls.on(Hls.Events.MEDIA_ATTACHED, () => {
|
|
100
60
|
hls.loadSource(url);
|
|
@@ -105,13 +65,17 @@ const useAudioPlayer = ({ src, streamSrc }) => {
|
|
|
105
65
|
setError(null);
|
|
106
66
|
});
|
|
107
67
|
|
|
108
|
-
hls.on(Hls
|
|
68
|
+
hls.on(Hls?.Events?.MANIFEST_PARSED, () => {
|
|
109
69
|
setIsReady(true);
|
|
110
70
|
setError(null);
|
|
111
71
|
});
|
|
72
|
+
hls.on(Hls?.Events?.BUFFER_STALLED, () => {
|
|
73
|
+
setIsBuffering(true);
|
|
74
|
+
});
|
|
112
75
|
|
|
113
|
-
hls.on(Hls
|
|
114
|
-
|
|
76
|
+
hls.on(Hls?.Events?.BUFFER_APPENDED, () => {
|
|
77
|
+
setIsBuffering(false);
|
|
78
|
+
});
|
|
115
79
|
|
|
116
80
|
hls.on(Hls.Events.ERROR, (event, data) => {
|
|
117
81
|
console.warn("HLS error", data);
|
|
@@ -127,26 +91,38 @@ const useAudioPlayer = ({ src, streamSrc }) => {
|
|
|
127
91
|
}
|
|
128
92
|
}
|
|
129
93
|
});
|
|
130
|
-
|
|
131
|
-
attachAudioEvents();
|
|
132
|
-
} else if (
|
|
133
|
-
streamSrc &&
|
|
134
|
-
audio.canPlayType("application/vnd.apple.mpegurl")
|
|
135
|
-
) {
|
|
136
|
-
// Safari native HLS
|
|
94
|
+
} else if (!src && audio.canPlayType("application/vnd.apple.mpegurl")) {
|
|
137
95
|
audio.src = url;
|
|
138
96
|
audio.addEventListener("loadedmetadata", () => {
|
|
139
97
|
setIsReady(true);
|
|
140
98
|
});
|
|
141
|
-
attachAudioEvents();
|
|
142
99
|
}
|
|
143
|
-
|
|
100
|
+
const handleEnded = () => setIsPlaying(false);
|
|
101
|
+
const handlePause = () => setIsPlaying(false);
|
|
102
|
+
const handlePlay = () => setIsPlaying(true);
|
|
103
|
+
|
|
104
|
+
const handleProgress = () => {
|
|
105
|
+
if (audio) {
|
|
106
|
+
const currentTime = audio.currentTime;
|
|
107
|
+
const duration = audio.duration;
|
|
144
108
|
|
|
109
|
+
setProgress({ currentTime, duration });
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
audio.addEventListener("ended", handleEnded);
|
|
114
|
+
audio.addEventListener("pause", handlePause);
|
|
115
|
+
audio.addEventListener("playing", handlePlay);
|
|
116
|
+
audio.addEventListener("timeupdate", handleProgress);
|
|
117
|
+
audio.addEventListener("loadedmetadata", handleProgress);
|
|
118
|
+
audio.addEventListener("waiting", () => setIsBuffering(true));
|
|
119
|
+
audio.addEventListener("canplay", () => setIsBuffering(false));
|
|
120
|
+
}
|
|
145
121
|
return () => {
|
|
146
122
|
if (hls) {
|
|
147
123
|
hls.destroy();
|
|
148
124
|
}
|
|
149
|
-
|
|
125
|
+
|
|
150
126
|
setIsReady(false);
|
|
151
127
|
};
|
|
152
128
|
}, [url, accessToken, accountId, audio, src, streamSrc]);
|