42 lines
1.6 KiB
JavaScript
42 lines
1.6 KiB
JavaScript
/* Lecture MJPEG activée manuellement : libère la caméra si désactivée. */
|
|
(() => {
|
|
'use strict';
|
|
const button = document.getElementById('cameraToggle');
|
|
const image = document.getElementById('cameraFeed');
|
|
const placeholder = document.getElementById('cameraPlaceholder');
|
|
const message = document.getElementById('cameraMessage');
|
|
const panel = document.querySelector('.camera-panel');
|
|
let active = false;
|
|
|
|
function stop() {
|
|
active = false;
|
|
image.removeAttribute('src');
|
|
image.hidden = true;
|
|
placeholder.hidden = false;
|
|
message.textContent = 'Caméra désactivée';
|
|
button.textContent = 'Activer';
|
|
button.setAttribute('aria-pressed', 'false');
|
|
panel.dataset.active = 'false';
|
|
}
|
|
function start() {
|
|
active = true;
|
|
placeholder.hidden = false;
|
|
message.textContent = 'Connexion à la caméra…';
|
|
image.hidden = false;
|
|
image.src = `/api/camera/stream?t=${Date.now()}`;
|
|
button.textContent = 'Arrêter';
|
|
button.setAttribute('aria-pressed', 'true');
|
|
}
|
|
button.addEventListener('click', () => active ? stop() : start());
|
|
image.addEventListener('load', () => { if (active) { placeholder.hidden = true; panel.dataset.active = 'true'; } });
|
|
image.addEventListener('error', () => {
|
|
if (!active) return;
|
|
stop();
|
|
message.textContent = 'Caméra indisponible ou déjà utilisée';
|
|
});
|
|
// Si l'onglet n'est pas visible, relâcher le périphérique USB.
|
|
document.addEventListener('visibilitychange', () => { if (document.hidden && active) stop(); });
|
|
window.addEventListener('pagehide', stop);
|
|
stop();
|
|
})();
|