test : stream cap
This commit is contained in:
92
tools/stream-capture/README.md
Normal file
92
tools/stream-capture/README.md
Normal file
@@ -0,0 +1,92 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user