@geekapps/silo-elements-nextjs 0.3.22 → 0.3.24
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/VideoPlayer.js +28 -42
- package/dist/VideoPlayer.js.map +1 -1
- package/dist/index.js +28 -42
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/VideoPlayer.js
CHANGED
|
@@ -872,12 +872,22 @@ function Video({
|
|
|
872
872
|
const Hls = HlsModule.default;
|
|
873
873
|
console.debug("[Silo/hls] Hls.isSupported()=", Hls.isSupported());
|
|
874
874
|
if (Hls.isSupported()) {
|
|
875
|
-
let
|
|
876
|
-
const
|
|
877
|
-
|
|
878
|
-
|
|
875
|
+
let tryNextAudioTrack2 = function() {
|
|
876
|
+
const next = mappedAudioTracks.find((t) => t.supported && !failedAudioTracks.has(t.id));
|
|
877
|
+
if (next) {
|
|
878
|
+
console.debug("[Silo/hls] trying audio track", next.id, next.codec || "(unknown codec)");
|
|
879
|
+
hls.audioTrack = next.id;
|
|
880
|
+
if (pinnedAudio === -1) setSelectedAudio(next.id);
|
|
881
|
+
} else {
|
|
882
|
+
console.warn("[Silo/hls] all audio tracks failed \u2014 disabling demuxed audio");
|
|
883
|
+
setAudioTracks([]);
|
|
884
|
+
try {
|
|
885
|
+
hls.audioTrack = -1;
|
|
886
|
+
} catch {
|
|
887
|
+
}
|
|
888
|
+
}
|
|
879
889
|
};
|
|
880
|
-
var
|
|
890
|
+
var tryNextAudioTrack = tryNextAudioTrack2;
|
|
881
891
|
const hls = new Hls({
|
|
882
892
|
enableWorker: true,
|
|
883
893
|
// Buffer ~20s ahead (≈1/6 of a 2min video). maxMaxBufferLength caps the
|
|
@@ -939,9 +949,8 @@ function Video({
|
|
|
939
949
|
if (pinnedAudio >= 0) hls.audioTrack = pinnedAudio;
|
|
940
950
|
setIsLoading(false);
|
|
941
951
|
});
|
|
942
|
-
const AUDIO_CODEC_PRIORITY = ["opus", "mp4a", "aac", "ac-3", "ac3", "dts", "ec-3", "eac3", "dts-hd", "dtshd", "truehd"];
|
|
943
|
-
let audioUpgradeDone = false;
|
|
944
952
|
let mappedAudioTracks = [];
|
|
953
|
+
const failedAudioTracks = /* @__PURE__ */ new Set();
|
|
945
954
|
hls.on(Hls.Events.AUDIO_TRACKS_UPDATED, (_, data) => {
|
|
946
955
|
const tracks = data.audioTracks ?? [];
|
|
947
956
|
console.debug("[Silo/hls] AUDIO_TRACKS_UPDATED", tracks.length);
|
|
@@ -953,19 +962,11 @@ function Video({
|
|
|
953
962
|
return { id: i, label, supported, codec };
|
|
954
963
|
});
|
|
955
964
|
if (pinnedAudio === -1) {
|
|
956
|
-
const
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
hls
|
|
961
|
-
setSelectedAudio(startTrack.id);
|
|
962
|
-
console.debug("[Silo/hls] starting with audio track", startTrack.id, startTrack.codec);
|
|
963
|
-
} else {
|
|
964
|
-
console.warn("[Silo/hls] no supported audio track found \u2014 disabling");
|
|
965
|
-
try {
|
|
966
|
-
hls.audioTrack = -1;
|
|
967
|
-
} catch {
|
|
968
|
-
}
|
|
965
|
+
const first = mappedAudioTracks.find((t) => t.supported) ?? mappedAudioTracks[0];
|
|
966
|
+
if (first) {
|
|
967
|
+
hls.audioTrack = first.id;
|
|
968
|
+
setSelectedAudio(first.id);
|
|
969
|
+
console.debug("[Silo/hls] starting with audio track", first.id, first.codec || "(unknown codec)");
|
|
969
970
|
}
|
|
970
971
|
}
|
|
971
972
|
if (mappedAudioTracks.length > 1) setAudioTracks(mappedAudioTracks.map(({ id, label, supported }) => ({ id, label, supported })));
|
|
@@ -1000,19 +1001,8 @@ function Video({
|
|
|
1000
1001
|
});
|
|
1001
1002
|
hls.on(Hls.Events.FRAG_LOADED, (_, data) => {
|
|
1002
1003
|
console.debug("[Silo/hls] FRAG_LOADED", data.frag?.type, data.frag?.sn);
|
|
1003
|
-
if (!audioUpgradeDone && data.frag?.type === "audio" && data.frag?.sn === 0 && pinnedAudio === -1 && mappedAudioTracks.length > 1) {
|
|
1004
|
-
audioUpgradeDone = true;
|
|
1005
|
-
const supported = mappedAudioTracks.filter((t) => t.supported);
|
|
1006
|
-
const best = supported.reduce((a, b) => audioCodecPriority2(b.codec) > audioCodecPriority2(a.codec) ? b : a, supported[0]);
|
|
1007
|
-
if (best && best.id !== hls.audioTrack) {
|
|
1008
|
-
console.debug("[Silo/hls] upgrading audio track", hls.audioTrack, "\u2192", best.id, best.codec);
|
|
1009
|
-
hls.audioTrack = best.id;
|
|
1010
|
-
setSelectedAudio(best.id);
|
|
1011
|
-
}
|
|
1012
|
-
}
|
|
1013
1004
|
});
|
|
1014
1005
|
let mediaErrorAttempts = 0;
|
|
1015
|
-
let audioAppendErrors = 0;
|
|
1016
1006
|
let stalledOnPinnedLevel = 0;
|
|
1017
1007
|
hls.on(Hls.Events.ERROR, (_, data) => {
|
|
1018
1008
|
const fragUrl = (data.frag?.url ?? data.url ?? "").slice(-80);
|
|
@@ -1021,18 +1011,14 @@ function Video({
|
|
|
1021
1011
|
if (!data.fatal) {
|
|
1022
1012
|
const isAudioBufError = fragType === "audio" && (data.details === Hls.ErrorDetails.BUFFER_APPEND_ERROR || data.details === Hls.ErrorDetails.BUFFER_APPENDING_ERROR);
|
|
1023
1013
|
if (isAudioBufError) {
|
|
1024
|
-
|
|
1025
|
-
if (
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
} catch {
|
|
1031
|
-
}
|
|
1032
|
-
audioAppendErrors = 0;
|
|
1014
|
+
const failedTrack = hls.audioTrack;
|
|
1015
|
+
if (failedTrack >= 0 && pinnedAudio === -1) {
|
|
1016
|
+
failedAudioTracks.add(failedTrack);
|
|
1017
|
+
console.warn("[Silo/hls] audio track", failedTrack, "failed \u2014 recovering MSE and trying next");
|
|
1018
|
+
hls.recoverMediaError();
|
|
1019
|
+
tryNextAudioTrack2();
|
|
1033
1020
|
}
|
|
1034
|
-
|
|
1035
|
-
audioAppendErrors = 0;
|
|
1021
|
+
return;
|
|
1036
1022
|
}
|
|
1037
1023
|
if (data.details === Hls.ErrorDetails.BUFFER_STALLED_ERROR && pinnedLevel >= 0) {
|
|
1038
1024
|
stalledOnPinnedLevel += 1;
|