feat: add Plex-style adaptive transcoding with bitrate limits and hardware fallback

This commit is contained in:
blomios
2026-09-29 23:31:05 +02:00
parent 2912384257
commit d018ac078c
7 changed files with 258 additions and 66 deletions

View File

@ -107,6 +107,8 @@ class SettingsPage {
const forceVideoTranscodeToggle = document.getElementById('setting-force-video-transcode-tc');
const forceRemuxToggle = document.getElementById('setting-force-remux-tc');
const streamFormatSelect = document.getElementById('setting-stream-format-tc');
const maxDirectBitrateSelect = document.getElementById('setting-max-direct-bitrate');
const allowHardwareFallbackToggle = document.getElementById('setting-allow-hardware-fallback');
// User-Agent (Transcoding tab versions)
const userAgentSelect = document.getElementById('setting-user-agent-tc');
@ -131,6 +133,8 @@ class SettingsPage {
if (forceVideoTranscodeToggle) forceVideoTranscodeToggle.checked = s.forceVideoTranscode === true;
if (forceRemuxToggle) forceRemuxToggle.checked = s.forceRemux || false;
if (streamFormatSelect) streamFormatSelect.value = s.streamFormat || 'm3u8';
if (maxDirectBitrateSelect) maxDirectBitrateSelect.value = String(s.maxDirectBitrateKbps || 0);
if (allowHardwareFallbackToggle) allowHardwareFallbackToggle.checked = s.allowHardwareFallback !== false;
if (userAgentSelect) userAgentSelect.value = s.userAgentPreset || 'chrome';
if (userAgentCustomInput) userAgentCustomInput.value = s.userAgentCustom || '';
if (customUaContainer) {
@ -232,6 +236,16 @@ class SettingsPage {
this.app.player.saveSettings();
});
maxDirectBitrateSelect?.addEventListener('change', () => {
this.app.player.settings.maxDirectBitrateKbps = parseInt(maxDirectBitrateSelect.value, 10) || 0;
this.app.player.saveSettings();
});
allowHardwareFallbackToggle?.addEventListener('change', () => {
this.app.player.settings.allowHardwareFallback = allowHardwareFallbackToggle.checked;
this.app.player.saveSettings();
});
// User-Agent handlers
const toggleCustomInput = () => {
if (customUaContainer) {