diff --git a/packages/agent/src/index.ts b/packages/agent/src/index.ts index b6ed88d..8c82b86 100644 --- a/packages/agent/src/index.ts +++ b/packages/agent/src/index.ts @@ -241,8 +241,10 @@ function requireUrl(params: Record): string { /** * Séquence complète : ouvrir la page, laisser le lecteur démarrer, passer en - * plein écran, lancer l'enregistrement. Chaque étape est journalisée séparément - * pour qu'un échec désigne son maillon. + * plein écran, régler la qualité, lancer l'enregistrement. Chaque étape est + * journalisée séparément pour qu'un échec désigne son maillon. L'ordre entre + * plein écran et qualité n'est pas arbitraire — voir le commentaire sur + * l'appel à {@link selectMaxStreamQuality}. */ async function startCapture(params: Record): Promise { if (!browserSettings.enabled) { @@ -256,8 +258,6 @@ async function startCapture(params: Record): Promise { 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) { @@ -278,6 +278,16 @@ async function startCapture(params: Record): Promise { }); } + // Après, et non avant, le plein écran : celui-ci envoie une touche au + // lecteur, et la plupart des lecteurs vidéo traitent n'importe quelle touche + // comme une activité qui réaffiche les contrôles — y compris une touche sans + // rapport avec la qualité. Dans l'ordre inverse, le curseur écarté en fin de + // sélection de qualité (pour laisser la surbrillance des contrôles + // s'estomper) se faisait donc aussitôt annuler par cette touche. Ici, + // l'éloignement du curseur reste la dernière chose à toucher la page avant + // l'enregistrement. + await selectMaxStreamQuality(); + // Dernière chance d'écrire un preset en attente : une fois l'enregistrement // commencé, OBS refuse toute modification jusqu'à l'arrêt. Sans cet appel // explicite, l'écriture dépendait du hasard d'un cycle de statut (toutes les