Fix : overlay showing some times
This commit is contained in:
59
README.md
59
README.md
@@ -30,6 +30,8 @@ IP publique nécessaire, et obs-websocket reste sur `127.0.0.1`.
|
||||
- Reconnexion automatique de bout en bout (agent → serveur, agent → OBS, dashboard → serveur).
|
||||
- [Pause automatique pendant les shows privés](#pause-automatique-pendant-les-shows-privés)
|
||||
(Stripchat), avec reprise et rappel du plein écran au retour du flux public.
|
||||
- Le curseur est [écarté du lecteur](#écarter-le-curseur-du-lecteur) à la fin de chaque
|
||||
interaction, pour que la barre de contrôles ne finisse pas dans le fichier enregistré.
|
||||
- Le plein écran est [mesuré, pas supposé](#mesurer-plutôt-que-demander), relu pendant la
|
||||
capture et rétabli s'il se perd ; un
|
||||
[lecteur figé](#lecteur-figé--rechargement-automatique) est détecté et la page rechargée.
|
||||
@@ -448,16 +450,53 @@ la fenêtre semblait rétrécir juste après le réglage de qualité, comme un s
|
||||
plein écran qui aurait annulé le premier — alors qu'il ne s'agissait que d'un Échap qui
|
||||
sortait du plein écran natif que la touche du lecteur venait d'activer.
|
||||
|
||||
**Le curseur est écarté du lecteur une fois la qualité réglée**, sans quoi la barre de
|
||||
contrôles du lecteur — qui se garde affichée tant qu'une souris réelle la survole — resterait
|
||||
visible en permanence, faute de mouvement ultérieur. Le point de sortie est **calculé, pas
|
||||
deviné** : une marge est cherchée autour de la position réelle de l'élément vidéo (en
|
||||
dessous en priorité, sinon au-dessus, à droite ou à gauche), confirmée par
|
||||
`elementFromPoint` plutôt que supposée à un endroit fixe de la page. Si le lecteur couvre
|
||||
tout le viewport sans la moindre marge, un évènement `mouseleave` non fiable est émis en
|
||||
dernier recours sur l'élément vidéo et ses parents proches — sans garantie si le site vérifie
|
||||
`isTrusted` dessus comme il le fait sur le clic du bouton de qualité, mais sans risque non
|
||||
plus à tenter.
|
||||
Voir aussi [Écarter le curseur du lecteur](#écarter-le-curseur-du-lecteur), qui referme la
|
||||
séquence.
|
||||
|
||||
#### Écarter le curseur du lecteur
|
||||
|
||||
**Le curseur est écarté à la fin de chaque interaction avec la page** : rappel de plein écran,
|
||||
réglage de qualité, et jusqu'aux abandons de ce réglage. Un lecteur vidéo garde sa barre de
|
||||
contrôles affichée tant qu'une souris réelle la survole — comportement voulu pour un vrai
|
||||
spectateur, mais qui la fige à l'écran ici, puisque plus rien ne bouge ensuite. Et cette barre
|
||||
est enregistrée avec le flux : c'est l'incrustation que l'on voit en travers de certains
|
||||
replays.
|
||||
|
||||
Le cas qui échappait : une capture qui **démarre** passe par le réglage de qualité, qui se
|
||||
terminait déjà par cet écart — mais une **reprise** (retour du flux public après un show privé
|
||||
ou un passage hors-ligne) ne fait qu'envoyer la touche du lecteur, sans repasser par la
|
||||
qualité. Le curseur restait donc exactement là où la dernière interaction l'avait laissé,
|
||||
c'est-à-dire sur un bouton du lecteur. D'où une incrustation présente sur certains replays et
|
||||
pas sur d'autres, sans qu'aucun réglage ne les distingue.
|
||||
|
||||
Trois recours, du plus fiable au moins :
|
||||
|
||||
1. **Hors du lecteur.** Le point est **calculé, pas deviné** : une marge est cherchée autour de
|
||||
la position réelle de l'élément vidéo (en dessous en priorité, sinon au-dessus, à droite ou
|
||||
à gauche), confirmée par `elementFromPoint` plutôt que supposée à un endroit fixe de la
|
||||
page. Une version antérieure visait un coin fixe, en pariant qu'une barre du site y restait
|
||||
affichée — un coin qui s'avère faire *partie* du lecteur produit exactement l'inverse de
|
||||
l'effet recherché.
|
||||
2. **Dans le lecteur, à l'écart de ses commandes.** Le cas du plein écran, justement : le
|
||||
lecteur couvre tout, il n'existe aucun « dehors ». Le balayage part du haut de l'image (la
|
||||
barre de contrôles occupe le bas chez tous les lecteurs) et **préfère la surface vidéo nue**,
|
||||
seul endroit dont on sache qu'il n'épingle rien ; un habillage sans nom parlant (voile
|
||||
cliquable, dégradé) fait un repli acceptable, mais n'est jamais préféré à la vidéo quand
|
||||
celle-ci est atteignable. Tout ce qui ressemble à une commande — `button`, `[role=button]`,
|
||||
lien, champ, ou une classe contenant `control`/`menu`/`btn`/`bar` — est écarté. Un point
|
||||
posé sur l'image relance la minuterie d'auto-masquage du lecteur, qui fait alors disparaître
|
||||
la barre tout seul : ce qui n'arrive jamais tant que le curseur reste sur un bouton.
|
||||
3. **Évènements de sortie simulés**, en dernier recours, sur l'élément vidéo et ses parents
|
||||
proches — sans garantie si le site vérifie `isTrusted` dessus comme il le fait sur le clic du
|
||||
bouton de qualité, mais sans risque non plus à tenter.
|
||||
|
||||
Le résultat part au journal (`curseur écarté hors du lecteur`, `lecteur plein cadre : curseur
|
||||
posé à l'écart des commandes`…) : c'est ce qui permet, devant un replay incrusté, de savoir si
|
||||
le curseur avait été déplacé et où il avait atterri.
|
||||
|
||||
L'écart a lieu **après** la mesure du plein écran, jamais avant : déplacer le curseur réaffiche
|
||||
les contrôles le temps de la minuterie, et le relevé porterait alors sur une page en train de
|
||||
changer.
|
||||
|
||||
#### Lancement simple
|
||||
|
||||
|
||||
Reference in New Issue
Block a user