Мы просто интегрируем новый MUX-видеоплеер, который действительно хорош, но страдает от «недостатка», заключающегося в том, что некоторые свойства в данный момент доступны только с помощью JavaScript. Один из моих коллег создал прототип кода, и я, преклоняясь перед богом инкапсуляции, подумал: этот фрагмент кода действительно принадлежит к отдельному классу:
Код: Выделить всё
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();
}
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... ass-contra
Мобильная версия