Ich möchte die URL mit youtube-dl und die Option "simulieren" abrufen -g
, mit der das Video nicht heruntergeladen wird.
Also gab ich folgenden Befehl:
youtube-dl -g https://www.youtube.com/watch?v=k4JGSAmu4lg
Es gab die folgende Ausgabe nach 7 bis 8 Sekunden
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
Das Problem ist jedoch, dass das Abfragen der URL etwa 7 bis 8 Sekunden dauert.
Gibt es eine Möglichkeit, dass es schneller gehen kann?
networking
performance
downloads
download-speed
youtube-dl
Bharath Kumar Reddy Bojja
quelle
quelle
Antworten:
Die Zeit wird für die Arbeit aufgewendet
Der Befehl bleibt nicht hängen oder wartet auf etwas, das Zeit verschwendet.
Er funktioniert tatsächlich, was Zeit braucht. Es dauert höchstwahrscheinlich einige Zeit, bis mehrere kleine Netzwerkverzögerungen addiert sind. Es kann aber auch sein, dass es auf der Youtube-Seite Verzögerungen gibt, die sich summieren.
Dass es nur die Zeit ist, die benötigt wird, um den benötigten HTML-Code herunterzuladen;
Der Befehl muss mindestens zwei HTTP-Anforderungen nacheinander und wahrscheinlich mehr stellen.
Wenn also etwas langsam ist, wird es mit der Anzahl der bereits vorhandenen Anforderungen multipliziert.
Für mich dauert es 1,5 Sekunden auf einer sehr schnellen Linie - das ist nicht weit von 8 Sekunden.
Wie man es herausfindet
Ich werde die Befehle zeigen, mit denen ich es herausgefunden habe:
Um die Beispiele übersichtlicher zu gestalten, verwenden wir eine Variable für die URL:
Wir wollen die Dauer von Befehlen messen; Bei der Verwendung des Befehls
time
muss darauf geachtet werden, dass der Befehl und die integrierte Shell nicht verwechselt werden. Wir verwenden eine kleine Funktion, um die Zeilen kürzer zu machen:Ihr Befehl schreibt die URL der Videodatei aus (auf 80 Spalten gekürzt):
Messen wir die Zeit, die für die Ausführung auf meinem Computer benötigt wird:
Ok, eineinhalb Sekunden. Schneller als in der Frage, aber nicht viel schneller. Aber wie verbringt es die Zeit? Vielleicht lädt es das Video auf versteckte Weise herunter und verwirft es? Das Video ist 11 Minuten in 360p. Das Herunterladen ohne Optionen dauert ungefähr 13 Sekunden - zehnmal länger.
Müssen Sie genauer hinsehen, mit der ausführlichen Option
-v
:Oh, es gibt eine gewisse Verzögerung, bevor die '[Debug]' - Zeilen gedruckt werden. Sieht so aus, als würde er
youtube-dl
einige Zeit für die Einrichtung seiner eigenen Konfiguration aufwenden. Es ist ungefähr eine Viertelsekunde, nicht die Verzögerung, nach der wir suchen. Wir können jedoch daraus lernen, dass dieyoutube-dl
Implementierung selbst langsam sein kann.Nach den Nachrichten passiert nichts, bis die Ergebnis-URL gedruckt wird. Wir sehen den interessanten Teil also immer noch nicht.
Die Option
-g
besteht darin, den Video-Download in dem Sinne zu "simulieren", dass er den komplizierten Teil des Herausfindens dieser halbgeheimen URL erledigt, sie druckt und am Ende den eigentlichen Download überspringt. Es gibt eine ähnliche Option-s
, die die URL nicht ausgibt und ansonsten ähnlich erscheint. Nehmen wir an, es ist ähnlich genug, wenn es ungefähr zur gleichen Zeit dauert. Wir müssen das überprüfen.Ok,
-s
dauert genauso lange wie-g
, also ist es in Ordnung, sie zum Testen zu ersetzen.Interessanter ist, dass wir jetzt mehr Output haben. Und es wird mit einem interessanten Timing gedruckt: Die Zeilen werden mit einer ähnlichen Verzögerung gedruckt, so dass es anscheinend um die Aktionen geht, die tatsächlich die Zeit in Anspruch nehmen, nach der wir suchen.
Aus den Nachrichten werden mindestens zwei Webseiten heruntergeladen. Wir können jedoch davon ausgehen, dass das Wort "Seite" keine einzelne HTTP-Anforderung und kein einzelnes HTML-Dokument bedeutet.
Was haben wir gelernt?
Der Hauptpunkt ist, dass die Arbeit des Programms tatsächlich Zeit braucht, nicht auf etwas wartet oder hängt.
Außerdem sehen wir mehrere Schritte, die ähnlich viel Zeit in Anspruch nehmen. Es gibt nicht viel zu berechnen, das sind also in gewisser Weise Netzwerk-Roundtrips, die sich summieren.
Das heißt, die Latenz unserer Verbindung ist nur hier wichtig. Der Durchsatz der Verbindung ist nur irrelevant.
Wenn Sie Ihre Internetverbindung beschleunigen würden, damit Daten mit doppelter Geschwindigkeit übertragen werden können, würde dies überhaupt nicht helfen. Aber wenn Sie bessere
ping
Zeiten bekommen können, wird es viel schneller.Es geht jedoch nicht darum, Ping-Zeiten an Ihren Internetdienstanbieter zu senden. Die Ping-Zeit bis hin zu YouTube ist wichtig - und kann möglicherweise nicht geändert werden.
Interessanterweise sind für den nächsten Schritt, das Herunterladen eines Videos, die Anforderungen für eine schnelle Leitung genau umgekehrt: Die Latenz ist überhaupt nicht relevant, und der Durchsatz ist wirklich wichtig.
Noch nicht müde?
Möchten Sie noch mehr Details erfahren, wofür die Zeit wirklich aufgewendet wird?
Der nächste Schritt wäre, die HTTP-Verbindung zu verfolgen. Ich würde vermuten, dass es viel mehr Hin- und Rückfahrten als zwei zeigt, zum Beispiel für Weiterleitungen. Sie können
wireshark
einen HTTP-Proxystrace
für die Protokollierung verwenden oder nur die Systemaufrufe zum Verbinden oder Schreiben zählen.Für heute haben wir beide tief genug in das Kaninchenloch der Vernetzung geschaut.
quelle
Mach einfach ein:
Quelle
quelle
Es könnte einen anderen Grund geben.
youtube-dl
wird als komprimierte Python-Anwendung verteilt. Jedes Mal, wenn Sie es ausführen, wird es extrahiert und dann ausgeführt.Sie können es manuell mit dem
unzip
Befehl extrahieren . Dann renne so,__main__.py
wie du rennen würdestyoutube-dl
. Auf einem Computer mit geringem Stromverbrauch wie dem Pi wird dies Ihre Leistung spürbar steigern.quelle