# Étape 17.12 - Relais local piloté par le downloader natif yt-dlp ## Ce que le log 17.11 a prouvé La résolution n'est plus le problème : ```text [HD-WINDOWS] vidéo relayée confirmée: 1920x1080 ``` Les deux URLs sont bien `MWEB` et portent bien un PO Token : ```text videoClient=MWEB videoPOT=true audioClient=MWEB audioPOT=true ``` Mais le `HttpClient` Dart reçoit encore des 403 : - audio : dès l'offset 0, même avec un Range réduit à ~1,18 Mo ; - vidéo : après environ 31 Mo, puis systématiquement au même offset. Cela invalide l'hypothèse "chunk trop gros" comme cause principale. ## Différence importante avec yt-dlp Le downloader HTTP officiel de yt-dlp ne se limite pas à ajouter les mêmes headers. Il utilise son propre stack réseau et sa propre logique de reprise Range. L'étape 17.12 arrête donc d'essayer de reproduire ce transport en Dart. ## Nouvelle architecture ```text libmpv | | HTTP Range v 127.0.0.1 | | lance yt-dlp --load-info-json -o - v yt-dlp HttpFD | | URL MWEB + PO Token + headers + Range v googlevideo ``` Pour chaque connexion `/video` ou `/audio`, le relais crée temporairement un info-json local contenant : - l'URL signée déjà extraite ; - les headers exacts ; - le Range demandé par mpv ; - le `http_chunk_size` yt-dlp ; - la taille totale. Puis il demande au `yt-dlp.exe` déjà installé de télécharger cette plage vers stdout. Le relais retransmet stdout directement à libmpv. Ainsi Google n'est plus contacté par le `HttpClient` Dart. Le transport googlevideo est effectué par le même moteur yt-dlp qui a réussi le test manuel. ## Seek Lors d'un seek, mpv ferme/ouvre une nouvelle requête Range. Le relais lance un nouveau process yt-dlp à l'offset demandé. Le process précédent est stoppé lorsque sa connexion n'est plus utile. ## Installation Aucune dépendance ou script supplémentaire. Extraire ce ZIP à la racine puis : ```powershell cd "D:\07-Logiciels\23-youtube_personal" flutter clean flutter run -d windows ``` Tester 1080p + son. ## Logs attendus ```text [HD-WINDOWS][17.12] yt-dlp -> relais yt-dlp natif -> libmpv [HD-RELAY][17.12] actif sur 127.0.0.1:... [HD-RELAY][17.12] video: yt-dlp démarre Range=... [HD-RELAY][17.12] audio: yt-dlp démarre Range=... ``` Succès : ```text [HD-RELAY][17.12] video: yt-dlp OK ... [HD-RELAY][17.12] audio: yt-dlp OK ... [HD-WINDOWS] lecture confirmée: 1920x1080 ```