@geekapps/silo-elements-nextjs 0.3.19 → 0.3.21
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 +87 -9
- package/dist/VideoPlayer.js.map +1 -1
- package/dist/index.js +87 -9
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/VideoPlayer.js
CHANGED
|
@@ -55,6 +55,68 @@ function deviceSupportsAudioCodec(codec) {
|
|
|
55
55
|
return true;
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
|
+
var LANG_NAMES = {
|
|
59
|
+
pt: "Portugu\xEAs",
|
|
60
|
+
"pt-br": "Portugu\xEAs (Brasil)",
|
|
61
|
+
"pt-pt": "Portugu\xEAs (Portugal)",
|
|
62
|
+
en: "English",
|
|
63
|
+
"en-us": "English (US)",
|
|
64
|
+
"en-gb": "English (UK)",
|
|
65
|
+
es: "Espa\xF1ol",
|
|
66
|
+
"es-419": "Espa\xF1ol (Latino)",
|
|
67
|
+
fr: "Fran\xE7ais",
|
|
68
|
+
de: "Deutsch",
|
|
69
|
+
it: "Italiano",
|
|
70
|
+
ja: "\u65E5\u672C\u8A9E",
|
|
71
|
+
ko: "\uD55C\uAD6D\uC5B4",
|
|
72
|
+
zh: "\u4E2D\u6587",
|
|
73
|
+
"zh-cn": "\u666E\u901A\u8BDD",
|
|
74
|
+
"zh-tw": "\u7E41\u9AD4\u4E2D\u6587",
|
|
75
|
+
ru: "\u0420\u0443\u0441\u0441\u043A\u0438\u0439",
|
|
76
|
+
ar: "\u0627\u0644\u0639\u0631\u0628\u064A\u0629",
|
|
77
|
+
hi: "\u0939\u093F\u0928\u094D\u0926\u0940",
|
|
78
|
+
nl: "Nederlands",
|
|
79
|
+
pl: "Polski",
|
|
80
|
+
sv: "Svenska",
|
|
81
|
+
tr: "T\xFCrk\xE7e",
|
|
82
|
+
und: "Original"
|
|
83
|
+
};
|
|
84
|
+
var CODEC_LABELS = {
|
|
85
|
+
"truehd": "Dolby TrueHD",
|
|
86
|
+
"atmos": "Dolby Atmos",
|
|
87
|
+
"eac3": "Dolby Digital Plus",
|
|
88
|
+
"ec-3": "Dolby Digital Plus",
|
|
89
|
+
"e-ac-3": "Dolby Digital Plus",
|
|
90
|
+
"ac3": "Dolby Digital",
|
|
91
|
+
"ac-3": "Dolby Digital",
|
|
92
|
+
"dts-hd": "DTS-HD",
|
|
93
|
+
"dts-hd ma": "DTS-HD MA",
|
|
94
|
+
"dtshd": "DTS-HD MA",
|
|
95
|
+
"dts": "DTS",
|
|
96
|
+
"aac": "AAC",
|
|
97
|
+
"opus": "Opus",
|
|
98
|
+
"mp3": "MP3",
|
|
99
|
+
"flac": "FLAC",
|
|
100
|
+
"alac": "ALAC"
|
|
101
|
+
};
|
|
102
|
+
var CHANNEL_LABELS = {
|
|
103
|
+
1: "Mono",
|
|
104
|
+
2: "Est\xE9reo",
|
|
105
|
+
6: "5.1",
|
|
106
|
+
7: "6.1",
|
|
107
|
+
8: "7.1"
|
|
108
|
+
};
|
|
109
|
+
function friendlyAudioLabel(rawName, lang, codec, channels) {
|
|
110
|
+
const langKey = (lang ?? "").toLowerCase();
|
|
111
|
+
const langLabel = LANG_NAMES[langKey] ?? (lang ? lang.toUpperCase() : null);
|
|
112
|
+
const codecKey = Object.keys(CODEC_LABELS).find((k) => codec.toLowerCase().includes(k));
|
|
113
|
+
const codecLabel = codecKey ? CODEC_LABELS[codecKey] : null;
|
|
114
|
+
const chLabel = channels ? CHANNEL_LABELS[channels] ?? `${channels}ch` : null;
|
|
115
|
+
const looksHuman = rawName && !/^(und|dts|ac3|eac3|aac|opus|truehd|atmos|\w{2,3}-\d+ch|\w{2})/i.test(rawName) && rawName.length > 1;
|
|
116
|
+
const baseName = looksHuman ? rawName : langLabel ?? "\xC1udio";
|
|
117
|
+
const suffix = [codecLabel, chLabel].filter(Boolean).join(" ");
|
|
118
|
+
return suffix ? `${baseName} \u2014 ${suffix}` : baseName;
|
|
119
|
+
}
|
|
58
120
|
function isHdrLevel(level) {
|
|
59
121
|
const range = level?.videoRange ?? level?.video_range ?? "";
|
|
60
122
|
return range === "PQ" || range === "HLG" || range === "HDR10" || typeof level?.name === "string" && /hdr/i.test(level.name);
|
|
@@ -862,7 +924,8 @@ function Video({
|
|
|
862
924
|
tracks.map((t, i) => {
|
|
863
925
|
const codec = (t.attrs?.CODECS ?? t.codecSet ?? "").split(",")[0]?.trim() ?? "";
|
|
864
926
|
const supported = deviceSupportsAudioCodec(codec);
|
|
865
|
-
|
|
927
|
+
const label = friendlyAudioLabel(t.name, t.lang, codec, t.channels ?? t.attrs?.CHANNELS);
|
|
928
|
+
return { id: i, label, supported };
|
|
866
929
|
})
|
|
867
930
|
);
|
|
868
931
|
if (pinnedAudio === -1) setSelectedAudio(hls.audioTrack ?? 0);
|
|
@@ -874,14 +937,29 @@ function Video({
|
|
|
874
937
|
hls.on(Hls.Events.AUDIO_TRACKS_UPDATED, (_, data) => {
|
|
875
938
|
const tracks = data.audioTracks ?? [];
|
|
876
939
|
console.debug("[Silo/hls] AUDIO_TRACKS_UPDATED", tracks.length);
|
|
877
|
-
if (tracks.length >
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
940
|
+
if (tracks.length > 0) {
|
|
941
|
+
const mapped = tracks.map((t, i) => {
|
|
942
|
+
const codec = (t.attrs?.CODECS ?? t.codecSet ?? "").split(",")[0]?.trim() ?? "";
|
|
943
|
+
const supported = deviceSupportsAudioCodec(codec);
|
|
944
|
+
const label = friendlyAudioLabel(t.name, t.lang, codec, t.channels ?? t.attrs?.CHANNELS);
|
|
945
|
+
return { id: i, label, supported };
|
|
946
|
+
});
|
|
947
|
+
const currentTrackIdx = hls.audioTrack ?? 0;
|
|
948
|
+
if (mapped[currentTrackIdx] && !mapped[currentTrackIdx].supported) {
|
|
949
|
+
const firstSupported = mapped.findIndex((t) => t.supported);
|
|
950
|
+
if (firstSupported >= 0) {
|
|
951
|
+
console.debug("[Silo/hls] current audio track unsupported \u2014 switching to track", firstSupported);
|
|
952
|
+
hls.audioTrack = firstSupported;
|
|
953
|
+
if (pinnedAudio === -1) setSelectedAudio(firstSupported);
|
|
954
|
+
} else {
|
|
955
|
+
console.warn("[Silo/hls] no supported audio track found \u2014 disabling separate audio");
|
|
956
|
+
try {
|
|
957
|
+
hls.audioTrack = -1;
|
|
958
|
+
} catch {
|
|
959
|
+
}
|
|
960
|
+
}
|
|
961
|
+
}
|
|
962
|
+
if (mapped.length > 1) setAudioTracks(mapped);
|
|
885
963
|
}
|
|
886
964
|
if (pinnedAudio >= 0 && hls.audioTrack !== pinnedAudio) {
|
|
887
965
|
hls.audioTrack = pinnedAudio;
|