Files
youtube_personal/ETAPE17_10_LOCAL_CHUNK_RELAY.md

95 lines
2.2 KiB
Markdown

# Étape 17.10 - Relais HTTP local chunké pour Windows
## Ce que le test yt-dlp vient de prouver
Le test direct `yt-dlp -f 299 --test` réussit réellement :
```text
[info] ... Downloading 1 format(s): 299
[download] Destination: ...
[download] 100% of 10.00KiB
```
Donc :
- le client `mweb` fonctionne ;
- le PO Token est généré ;
- le serveur `googlevideo.com` accepte le flux ;
- l'IP et les headers sont valides ;
- le problème restant est le transport direct libmpv -> googlevideo.
yt-dlp fournit aussi `downloader_options.http_chunk_size` pour YouTube
(typiquement 10 MiB). La documentation yt-dlp signale que YouTube peut
throttler les requêtes HTTP dont les chunks dépassent 10 MiB.
## Nouvelle architecture Windows
```text
yt-dlp
|
| URL vidéo/audio + PO Token + headers + http_chunk_size
v
Relais HTTP local Dart (127.0.0.1 uniquement)
|
| requêtes Range vers googlevideo <= 10 MiB
v
Googlevideo
libmpv/media_kit
|
+----> http://127.0.0.1:<port>/video
+----> http://127.0.0.1:<port>/audio
```
libmpv ne contacte donc plus directement Google.
Le relais :
- écoute uniquement sur `127.0.0.1` ;
- transmet les headers exacts yt-dlp ;
- force `Accept-Encoding: identity` ;
- respecte les requêtes `Range` de mpv ;
- découpe l'upstream en blocs au maximum égaux au chunk yt-dlp ;
- permet le seek ;
- relaie séparément vidéo et audio.
Android n'est pas modifié.
## Installation
Extraire ce ZIP à la racine du projet.
Aucune nouvelle dépendance.
Aucun nouveau script PowerShell.
```powershell
cd "D:\07-Logiciels\23-youtube_personal"
flutter clean
flutter run -d windows
```
Tester 1080p d'abord.
## Logs attendus
```text
[HD-WINDOWS][17.10] yt-dlp -> relais local -> libmpv
[HD-WINDOWS][17.9] extraction mweb + PO Token provider local
[HD-WINDOWS][17.10] transport yt-dlp: ... chunk=10485760o ...
[HD-RELAY][17.10] actif sur 127.0.0.1:...
[HD-RELAY] /video GET bytes=...
```
Succès :
```text
[HD-WINDOWS] vidéo relayée confirmée: 1920x1080
[HD-WINDOWS] lecture confirmée: 1920x1080 (relais local)
```
Si le relais reçoit un refus upstream, le log affichera directement :
```text
[HD-RELAY] /video échec: googlevideo HTTP 403 ...
```