# GAB-383 · MediaLearningVideoPlayer — « Lecteur vidéo »

**Archétype / renderer_key :** `media_viewer` (cartographie) · **module :** EdTechMediaLearning
**Note :** `renderer_key` **à concevoir (pas de moteur kit)** — ce renderer est dérivé directement du bloc source `data-tpl="383"` de `INDEX-300-medialearning-GAB-381-385-PLAYABLE.html`.

## Pack (structure officielle par-GAB)
```
GAB-383/
  renderer.html            ← moteur lecteur vidéo (ne pas modifier par instance)
  instance.example.json    ← SOURCE DE VÉRITÉ (contenu réel, à plat)
  schema.contract.json     ← contrat de validation
  README-contract.md       ← ce fichier
```

## Champs requis (instance, à plat)
`gab_id` · `video_player_id` · `title` · `video_ref{src,kind,poster?,alt_summary?}` · `no_autoplay:true` · `transcript{label,text,accessible_note?}` · `chapters[]{label,target_time,description}` · `controls{play_label,pause_label,replay_label,transcript_label}`

Optionnels : `source_rights`, `fallback`, `_note_dev`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre, libellés des boutons (play/pause/relire/transcript), chapitres (label + target_time + description), texte du transcript, source/droits.
- **HTML** : scène vidéo (barre de progression simulée), moteur play/pause/progression, chips chapitres, panneau feedback, slot-list — rien de pédagogique en dur.

## Garde-fous (child_safety / accessibilité)
- **no_autoplay OBLIGATOIRE à true** : le lecteur ne se déclenche jamais automatiquement — garde-fou d'accessibilité et de sécurité mineur.
- **Transcript requis** : toute vidéo doit avoir un fallback texte lisible sans le son (accessibilité WCAG).
- **BLOCKED** si `video_ref` absent, `transcript` absent, ou `no_autoplay` manquant/false.
- Anti-autoplay : aucun appel `play()` automatique dans le moteur.

## _TODO / contenus manquants
Le HTML source (hardcodé) ne contient pas les données suivantes, signalées par `_TODO` dans l'instance :
- `video_ref.src` — URL effective de la vidéo (absente du source demo)
- `video_ref.poster` — URL du poster/vignette (absent du source demo)
- `video_ref.alt_summary` — description textuelle complète de la vidéo (absent du source demo)
- `source_rights` — source et droits effectifs de la vidéo (absent du source demo)
- `fallback` — texte affiché si la vidéo est indisponible (absent du source demo)

Ces champs doivent être complétés lors de l'instanciation réelle sur un contenu pédagogique.

## QA à vérifier
1. Modifier un `chapter.label`/`target_time` → rendu change sans toucher au HTML (critère d'or).
2. `transcript` absent → BLOCKED propre.
3. `no_autoplay:false` ou champ absent → BLOCKED.
4. Clic chapitre → chip sélectionnée + panneau indique `target_time` + `description`.
5. Bouton Transcript → affiche `transcript.text` + `accessible_note`.
6. Instance externe injectée via `init(ext)` → rendu change sans modifier le HTML.
7. Responsive 375/768/1024.

## external_refs / dependencies
Aucune dépendance externe hors-lot. Le renderer est autonome (pas de moteur kit partagé).
Lot parent : `LOT-medialearning-GAB-381-385` (GAB-381 à GAB-385).

## Source
`INDEX-300-medialearning-GAB-381-385-PLAYABLE.html` (stage `data-tpl="383"`, handlers `d383Play`, `d383Transcript`, `d383Chapter`).
