# Stream Capture — banc d'essai Copie les segments média que **ton** Firefox, connecté à **ton** compte, télécharge déjà. L'extension ne redemande rien à la plateforme : elle lit le flux de réponse au passage et le réécrit aussitôt vers la page. Objectif : répondre à une question factuelle avant d'investir dans l'intégration — **les octets reçus sont-ils du média directement exploitable ?** ## Marche à suivre ### 1. Lancer le récepteur Sur la VM, depuis ce dossier : ```bash node receiver.mjs ``` Il écoute sur `127.0.0.1:8099` et crée un dossier de session sous `./captures/`. ### 2. Charger l'extension dans Firefox 1. `about:debugging#/runtime/this-firefox` 2. **Charger un module temporaire…** 3. Sélectionner le fichier `manifest.json` de ce dossier L'extension reste active jusqu'à la fermeture de Firefox. Un compteur apparaît sur son icône à mesure que les segments sont copiés (en rouge si le récepteur ne répond pas). ### 3. Lancer la lecture Ouvre le profil du streamer dans un onglet, connecté à ton compte, et laisse jouer 30 secondes. Le récepteur affiche les segments au fil de l'eau. ### 4. Obtenir le verdict `Ctrl-C` dans le terminal du récepteur. Il assemble ce qu'il a reçu et analyse : ``` Manifeste réel : oui ← le direct, pas la boucle publicitaire Leurre publicitaire détecté : non Tags MOUFLON : présents ✓ ffprobe lit le fichier — les segments sont du média exploitable : format_name=mov,mp4,m4a codec_type=video / codec_name=h264 / 1920x1080 ``` `ffprobe` est requis pour le verdict : `sudo apt install ffmpeg`. ## Interpréter le résultat | Sortie | Signification | | --- | --- | | ✓ ffprobe lit le fichier | Les segments sont du fMP4 standard. **La capture directe est viable**, l'intégration à l'application a du sens | | ✗ ffprobe ne reconnaît pas | Soit l'assemblage est incomplet (init manquant), soit les segments subissent une transformation côté lecteur | | Leurre publicitaire : oui | La session n'a pas servi le direct — vérifie que tu es bien connecté dans cet onglet | | Rien n'a été capturé | Extension non chargée, ou lecture jamais démarrée | Dans le second cas, **envoie-moi la sortie complète**. Si les segments sont transformés par le lecteur, écrire l'inverse de cette transformation reviendrait à contourner une mesure de protection, et je m'arrêterai là — mais la distinction se fait sur ce verdict, pas sur une supposition. ## Ce que fait exactement l'extension ``` requête initiée par la page │ ├──► filterResponseData : on lit les octets qui arrivent │ │ │ ├──► filter.write(...) → la page reçoit son flux, inchangé │ └──► POST 127.0.0.1:8099 → copie locale │ └──► lecture normale, aucune requête supplémentaire vers la plateforme ``` Elle n'observe que `*.doppiocdn.com` (le CDN média), n'envoie rien ailleurs qu'en `127.0.0.1`, et n'a aucune permission de lecture de page ni de cookies. ## Limites de ce banc d'essai - Aucune intégration à l'application : ni bouton, ni dossier de destination configurable, ni découpage par session d'enregistrement. C'est délibéré — on valide la faisabilité avant de construire la plomberie. - L'assemblage concatène `init` puis les segments dans l'ordre d'arrivée. Si plusieurs qualités sont téléchargées en parallèle, le fichier mélangera les pistes : force une seule qualité dans le lecteur pour le test. - L'extension étant chargée en temporaire, elle disparaît au redémarrage de Firefox.