Feat : Change quality
All checks were successful
release / build (push) Successful in 25s
release / verify-windows (push) Successful in 1m14s

This commit is contained in:
jeanotx32
2026-08-12 04:55:56 +02:00
parent ea8eeec129
commit d14369a914
6 changed files with 225 additions and 2 deletions

View File

@@ -33,7 +33,7 @@ import { ObsController } from './obs.ts';
import { StreamWatcher } from './watcher.ts';
import { currentBuildId, runningBundlePath, selfUpdate } from './updater.ts';
import { blankPage, closeWindow, delay as sleep, openUrl } from './browser.ts';
import { FirefoxController } from './firefox.ts';
import { FirefoxController, type StreamQualityOutcome } from './firefox.ts';
import { describeFullscreen, type FullscreenOutcome } from './fullscreen.ts';
import { sendHotkey } from './hotkey.ts';
import { cpuUsagePercent, diskUsage, memoryUsage } from './system.ts';
@@ -256,6 +256,8 @@ async function startCapture(params: Record<string, unknown>): Promise<unknown> {
report('info', `Attente de ${Math.round(wait / 1000)} s avant le plein écran`);
await sleep(wait);
await selectMaxStreamQuality();
const fullscreen = watcher.snapshotSettings.fullscreen;
let fullscreenResult: unknown = 'ignoré';
if (fullscreen.enabled) {
@@ -412,6 +414,36 @@ async function restoreFullscreen(settings: FullscreenSettings): Promise<Fullscre
return sendHotkey({ key: settings.key, windowMatch: settings.windowMatch });
}
/**
* Sélectionne la meilleure qualité offerte par le lecteur Stripchat.
*
* Sans effet hors mode BiDi : il n'existe aucun moyen d'interagir avec le
* contenu de la page sans lui. Un échec ne bloque jamais l'enregistrement —
* mieux vaut capturer une qualité non maximale que ne rien capturer du tout.
*/
async function selectMaxStreamQuality(): Promise<void> {
const bidi = driver();
const settings = watcher.snapshotSettings.streamQuality;
if (!bidi || !settings.enabled) return;
await sleep(settings.delayMs);
const result: StreamQualityOutcome = await bidi
.selectMaxStreamQuality()
.catch((err: Error) => ({ ok: false, reason: err.message }));
if (!result.ok) {
report('warn', `Qualité du flux non réglée : ${result.reason}`, 'quality.failed');
return;
}
report(
'info',
result.already
? `Qualité du flux déjà au maximum (${result.label})`
: `Qualité du flux réglée sur ${result.label}`,
'quality.selected',
);
}
// --- Presets d'enregistrement ------------------------------------------------
/**