102 lines
2.4 KiB
Markdown
102 lines
2.4 KiB
Markdown
# É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
|
|
```
|