Je veux obtenir l'URL en utilisant youtube-dl et l'option "simuler" -g
qui ne télécharge pas la vidéo.
J'ai donc donné la commande suivante:
youtube-dl -g https://www.youtube.com/watch?v=k4JGSAmu4lg
Il a donné la sortie suivante après 7 à 8 secondes
https://r20---sn-cvh7zn7d.googlevideo.com/videoplayback?initcwndbps=1113000&mt=1408702970&requiressl=yes&ipbits=0&sver=3&fexp=901454%2C902408%2C919145%2C924626%2C927622%2C927904%2C931330%2C931983%2C934024%2C934030%2C934804%2C945118%2C945308%2C946023%2C951914&ratebypass=yes&signature=38F111D46D72FFC50B47D50B3C9A631099BF5F83.FA134C91F407989B95ACADC1F1F6946B8F18C158&upn=tU0u5t7A2Uw&sparams=id%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Cmm%2Cms%2Cmv%2Cratebypass%2Crequiressl%2Csource%2Cupn%2Cexpire&mm=31&expire=1408724634&id=o-AJNPuDp9TKMKiwzUwvSk76W7JdA0cx0bRSum9mPJJ7Vo&mv=u&source=youtube&ms=au&key=yt5&ip=115.113.1.50&itag=18
Mais le problème est qu'il faut environ 7 à 8 secondes pour interroger l'URL.
Existe-t-il un moyen pour que ce soit plus rapide?
networking
performance
downloads
download-speed
youtube-dl
bharath kumar reddy bojja
la source
la source
Réponses:
Le temps est consacré au travail
La commande ne se bloque pas ou n'attend pas que quelque chose perde du temps,
elle fait un travail qui prend du temps; Cela prend très probablement du temps en additionnant plusieurs petits retards réseau. Mais il se pourrait aussi qu'il y ait des retards du côté youtube, qui s'additionnent.
Qu'il suffit du temps nécessaire pour télécharger le code HTML nécessaire;
La commande doit effectuer au moins deux requêtes HTTP, l'une après l'autre, et probablement plus.
Donc, si quelque chose est lent, il est déjà multiplié par le nombre de demandes.
Pour moi, cela prend 1,5 seconde sur une ligne très rapide - ce n'est pas si loin de 8 secondes.
Comment le découvrir
Je vais montrer les commandes que j'ai utilisées pour découvrir:
Pour rendre les exemples plus ordonnés, nous utilisons une variable pour l'URL:
Nous voulons mesurer la durée des commandes; L'utilisation de la commande
time
doit prendre soin de ne pas mélanger la commande et le shell intégré. Nous utilisons une petite fonction pour raccourcir les lignes:Votre commande écrit l'URL du fichier vidéo (tronquée à 80 colonnes):
Mesurons le temps nécessaire à l'exécution sur mon ordinateur:
D'accord, une seconde et demie. Plus rapide que dans la question, mais pas beaucoup plus vite. Mais comment passe-t-il le temps? Peut-être qu'il télécharge la vidéo d'une manière cachée et la rejette? La vidéo est de 11min en 360p. Le télécharger sans aucune option prend environ 13 secondes, soit dix fois plus.
Besoin de regarder de plus près, avec l'option détaillée
-v
:Oh, il y a un certain délai avant que les lignes «[debug]» soient imprimées. On dirait qu'il
youtube-dl
passe du temps pour sa propre configuration. C'est un quart de seconde environ, pas le délai que nous recherchons. Mais ce que nous pouvons en tirer, c'est que layoutube-dl
mise en œuvre elle-même peut être lente.Après les messages, rien ne se passe jusqu'à ce que l'URL du résultat soit imprimée. Nous ne voyons donc toujours pas la partie intéressante.
L'option
-g
consiste à «simuler» le téléchargement de la vidéo dans le sens où elle fait la partie compliquée de la découverte de cette URL semi-secrète, l'imprime, puis ignore le téléchargement réel à la fin. Il existe une option similaire-s
qui ne génère pas l'URL et semble similaire dans le cas contraire. Supposons qu'il soit suffisamment similaire s'il prend environ le même temps; Nous devons vérifier cela.Ok,
-s
prend le même temps que-g
, donc c'est ok de les remplacer pour les tests.Plus intéressant, c'est que nous avons obtenu plus de sortie maintenant. Et il est imprimé avec un timing intéressant: les lignes sont imprimées avec un délai similaire les unes aux autres, il semble donc qu'elles concernent les actions qui prennent réellement le temps que nous recherchons.
À partir des messages, au moins deux pages Web sont téléchargées. Mais nous pouvons supposer que le mot "page" ne signifiera pas une seule requête HTTP et un seul document HTML.
Qu'avons-nous appris?
Le point principal est que le travail du programme prend en fait du temps, il n'attend pas quelque chose ou ne pend pas.
En outre, nous voyons plusieurs étapes nécessitant des délais similaires. Il n'y a pas grand-chose à calculer, c'est donc en quelque sorte des allers-retours sur le réseau.
Cela signifie que la latence de notre connexion n'est importante qu'ici. Le débit de la connexion est tout simplement hors de propos.
Si vous accélérez votre connexion Internet afin de pouvoir transférer des données à double vitesse - cela n'aiderait pas du tout. Mais si vous pouvez obtenir de meilleurs
ping
temps, cela le rendra beaucoup plus rapide.Il ne s'agit pas de «cingler» les temps à votre fournisseur de services Internet, cependant; Le temps de ping jusqu'à YouTube, c'est ce qui compte - et peut-être pas possible de changer.
Fait intéressant, pour l'étape suivante, le téléchargement d'une vidéo, les exigences pour une ligne rapide sont exactement le contraire: la latence n'est pas du tout pertinente et le débit est vraiment important.
Pas encore fatigué?
Vous voulez encore plus de détails pour comprendre à quoi vous consacrez vraiment le temps?
La prochaine étape serait de tracer la connexion HTTP; Je soupçonne qu'il peut afficher beaucoup plus d'aller-retour que deux, pour les redirections par exemple. Vous pouvez utiliser
wireshark
, ou un proxy HTTP de journalisation, oustrace
simplement compter les appels système pour la connexion ou l'écriture.Pour aujourd'hui, nous avons tous deux regardé assez profondément dans le trou du lapin du réseautage.
la source
Faites juste un:
La source
la source
Il pourrait y avoir une autre raison.
youtube-dl
est distribué comme une application Python zippée. Chaque fois que vous l'exécutez, il l'extrait puis l'exécute.Vous pouvez l'extraire manuellement avec la
unzip
commande. Ensuite, exécutez__main__.py
comme vous le feriezyoutube-dl
. Sur un ordinateur de faible puissance, comme le Pi, cela augmentera sensiblement vos performances.la source