player now supports quality settings

This commit is contained in:
2025-12-31 15:42:34 +01:00
parent 776079d5c6
commit 7b3c559d03
2 changed files with 226 additions and 109 deletions

View File

@@ -462,11 +462,14 @@ const AnimePlayer = (function() {
});
hlsInstance.on(Hls.Events.MANIFEST_PARSED, () => {
attachSubtitles(subtitles);
initPlyr();
plyrInstance.on('ready', () => {
createAudioSelector(hlsInstance);
createQualitySelector(hlsInstance);
});
els.video.play().catch(() => {});
els.loader.style.display = 'none';
});
} else {
@@ -493,6 +496,45 @@ const AnimePlayer = (function() {
});
}
function createQualitySelector(hls) {
const levels = hls.levels;
if (!levels || !levels.length) return;
const plyrEl = els.video.closest('.plyr');
const controls = plyrEl.querySelector('.plyr__controls');
if (!controls) return;
if (controls.querySelector('#quality-select')) return;
const wrapper = document.createElement('div');
wrapper.className = 'plyr__control';
const select = document.createElement('select');
select.id = 'quality-select';
// AUTO
const auto = document.createElement('option');
auto.value = -1;
auto.textContent = 'Auto';
select.appendChild(auto);
levels.forEach((l, i) => {
const opt = document.createElement('option');
opt.value = i;
opt.textContent = `${l.height}p`;
select.appendChild(opt);
});
select.value = hls.currentLevel;
select.onchange = () => {
hls.currentLevel = Number(select.value);
};
wrapper.appendChild(select);
controls.insertBefore(wrapper, controls.children[4]);
}
function createAudioSelector(hls) {
if (!hls.audioTracks || hls.audioTracks.length < 2) return;