LegbaVideoTrack
LegbaVideoTrack
Ce que ça fait
Affiche une MediaStreamTrack vidéo (<legba-video-track>) dans un <video> réel. Quatre états : vide (pas de piste → placeholder, jamais un <video> cassé), chargement (piste fournie, pas encore prête), en direct (lecture réelle), erreur (piste terminée ou échec d’attachement). Changer de piste détache proprement l’ancienne avant d’attacher la nouvelle ; réassigner la même instance est un no-op gratuit.
Signature
class LegbaVideoTrack extends LegbaElement {
track: MediaStreamTrack | null;
}
Tag : legba-video-track.
Paramètres
| Propriété | Type | Requis | Défaut | Description |
|---|---|---|---|---|
track | MediaStreamTrack | null | non | null | Piste vidéo à afficher ; null = état vide |
Retour
N/A — un élément DOM. Aucun événement émis : l’état se lit via le rendu (placeholder/<video>/overlays), pas via un événement dédié.
Erreurs
Aucune : une piste déjà ended, une piste qui se termine en cours d’usage, ou un échec de lecture basculent tous silencieusement vers l’état erreur (overlay role="alert"), jamais une exception qui remonte à l’appelant.
Exemple minimal
import type { LegbaVideoTrack } from "@legba-core/ui";
function attachCameraTrack(el: LegbaVideoTrack, track: MediaStreamTrack | null): void {
el.track = track;
}
Exemple complet
import type { LegbaVideoTrack } from "@legba-core/ui";
function wireCameraPreview(el: LegbaVideoTrack): void {
window.navigator.mediaDevices
.getUserMedia({ video: true })
.then((stream) => {
const [track] = stream.getVideoTracks();
el.track = track ?? null;
// Le composant réagit lui-même si le matériel se déconnecte : aucun
// écouteur supplémentaire n'est nécessaire ici.
})
.catch(() => {
el.track = null; // repli sur l'état vide, jamais un <video> cassé
});
}
Pièges
- Le
<video>interne reste toujours monté dans le Shadow DOM (masqué viahiddenen état vide), jamais ajouté/retiré selon l’état — un détail d’implémentation, mais qui garantit qu’aucun<video>visuellement cassé ne s’affiche jamais. - Une piste déjà
readyState === "ended"au moment de l’affectation bascule directement en erreur, jamais par un aller-retour trompeur par “chargement” ou “initial”. trackest comparé par référence (comportement standard de Lit) : réassigner la même instance ne redéclenche jamais un attachement.- Le composant ne coupe jamais la piste lui-même (
track.stop()reste la responsabilité de l’appelant) — il ne fait qu’arrêter de l’utiliser (video.srcObject = null) au détachement ou à la déconnexion du composant. - Consomme les jetons
--legba-*comme tout composant@legba-core/ui: ne redéclare jamais un jeton public directement, voirLegbaElement.