Wir integrieren gerade einen neuen MUX-Videoplayer, der wirklich großartig ist, aber den „Nachteil“ hat, dass auf einige Eigenschaften derzeit nur mit Javascript zugegriffen werden kann. Einer meiner Kollegen hat einen Code-Prototyp erstellt, und ich habe mich vor dem Gott der Kapselung verbeugt und dachte, das gehört wirklich in eine eigene Klasse, nämlich dieser Code:
Code: Select all
class KCM_MUX {
lang;
player;
constructor(lang, player){
this.lang = lang;
this.player = player;
this.setLanguage();
}
// the actual code returned will depend on how the file has been uploaded.
norm = s => (s || '').toLowerCase().split('-')[0]; // "de-DE" -> "de"
// player = document.getElementById('muxPlayer');
#setAudio() {
const list = this.player.audioTracks; // Mux-provided AudioTrackList
if (!list || list.length === 0) return;
let matched = false;
for (let i = 0; i < list.length; i++) {
const t = list[i];
// check the language and label - this will be defined on upload
const code = this.norm(t.language) || this.norm(t.label);
const on = code && code.startsWith(this.lang);
t.enabled = on;
if (on) matched = true;
}
// If nothing matched, ensure at least the first track is enabled.
if (!matched) {
list[0] && (list[0].enabled = true);
}
}
#setSubs () {
const tt = this.#getTextTracks();
if (!tt) return;
for (let i = 0; i < tt.length; i++) {
const t = tt[i];
const isCaption = t.kind === 'captions' || t.kind === 'subtitles';
if (!isCaption) continue;
const code = this.norm(t.language) || this.norm(t.label);
t.mode = code && code.startsWith(this.lang) ? 'showing' : 'disabled';
}
}
#getTextTracks() {
return this.player.textTracks || this.player.media?.nativeEl?.textTracks || null;
}
setLanguage(event) {
this.#setAudio();
this.#setSubs();
}
}
Mobile version