Chcę uzyskać adres URL za pomocą youtube-dl i opcji „symulacji” -g
, która nie powoduje pobrania filmu.
Dałem więc następujące polecenie:
youtube-dl -g https://www.youtube.com/watch?v=k4JGSAmu4lg
Dał następujący wynik po 7 do 8 sekundach
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
Problem polega jednak na tym, że zapytanie o adres URL zajmuje około 7 do 8 sekund.
Czy jest jakiś sposób, aby mógł być szybszy?
networking
performance
downloads
download-speed
youtube-dl
bharath kumar reddy bojja
źródło
źródło
Odpowiedzi:
Czas spędzasz na pracy
Polecenie nie zawiesza się ani nie czeka na coś marnującego czas, w
rzeczywistości działa, co wymaga czasu; Najprawdopodobniej zsumowanie wielu małych opóźnień sieci zajmuje trochę czasu. Ale może się również zdarzyć, że po stronie YouTube pojawią się opóźnienia, które się sumują.
Że jest to tylko czas potrzebny na pobranie potrzebnego kodu HTML;
Polecenie musi wykonać co najmniej dwa żądania HTTP, jeden po drugim i prawdopodobnie więcej.
Więc jeśli coś jest powolne, jest ono mnożone przez liczbę żądań już.
Dla mnie zajmuje to bardzo szybko 1,5 sekundy - to nie jest tak daleko od 8 sekund.
Jak się dowiedzieć
Pokażę polecenia, których się dowiedziałem:
Aby przykłady były bardziej uporządkowane, używamy zmiennej dla adresu URL:
Chcemy mierzyć czas trwania poleceń; Używając polecenia,
time
należy uważać, aby nie pomieszać polecenia i wbudowanej powłoki. Używamy małej funkcji, aby skrócić linie:Twoje polecenie zapisuje adres URL pliku wideo (obciętego do 80 kolumn):
Zmierzmy czas potrzebny do uruchomienia na moim komputerze:
Ok, półtorej sekundy. Szybciej niż w pytaniu, ale nie tak dużo szybciej. Ale jak spędza czas? Może pobiera wideo w jakiś ukryty sposób i odrzuca je? Wideo trwa 11 minut w 360p. Pobranie go bez opcji zajmuje około 13 sekund - dziesięć razy dłużej.
Musisz przyjrzeć się bliżej, z opcją pełnego
-v
:Och, jest trochę opóźnienia, zanim zostaną wydrukowane wiersze „[debugowanie]”. Wygląda na to, że
youtube-dl
poświęca trochę czasu na własną konfigurację konfiguracji. To jakieś kwadrans, a nie opóźnienie, którego szukamy. Ale możemy się z tego nauczyć, żeyoutube-dl
sama realizacja może być powolna.Po wiadomościach nic się nie dzieje, dopóki nie zostanie wydrukowany wynikowy adres URL. Dlatego nadal nie widzimy interesującej części.
Opcją
-g
jest „symulacja” pobierania wideo w tym sensie, że robi skomplikowaną część w celu znalezienia tego częściowo tajnego adresu URL, drukuje go, ale ostatecznie pomija faktyczne pobieranie. Istnieje podobna opcja-s
, która nie wyświetla adresu URL, a poza tym wydaje się podobna. Załóżmy, że jest wystarczająco podobny, jeśli zajmuje to mniej więcej tyle samo czasu; Musimy to sprawdzić.Ok,
-s
zajmuje tyle samo czasu co-g
, więc można je zastąpić do testowania.Bardziej interesujące jest to, że mamy teraz większą wydajność. I jest drukowany z ciekawym czasem: linie są drukowane z podobnym opóźnieniem względem siebie, więc wydaje się, że dotyczą działań, które w rzeczywistości zajmują czas, którego szukamy.
Z wiadomości pobierane są co najmniej dwie strony internetowe. Możemy jednak założyć, że słowo „strona” nie będzie oznaczać pojedynczego żądania HTTP i pojedynczego dokumentu HTML.
Czego się nauczyliśmy?
Chodzi przede wszystkim o to, że praca programu zajmuje dużo czasu, nie czeka na coś ani nie zawiesza się.
Widzimy też wiele kroków zajmujących podobny czas. Nie ma wiele do obliczenia, więc to w jakiś sposób obieg sieci, sumując.
Oznacza to, że opóźnienie naszego połączenia jest ważne tylko tutaj. Przepustowość połączenia jest po prostu nieistotna.
Jeśli chcesz, aby twoje połączenie internetowe było szybsze, aby mogło przesyłać dane z podwójną prędkością - to wcale nie pomogłoby. Ale jeśli uda ci się uzyskać lepsze
ping
czasy, to znacznie przyspieszy.Nie chodzi jednak o czasy „pingowania” dostawcy usług internetowych; Czas pingowania aż do YouTube ma znaczenie - i może nie być możliwy do zmiany.
Co ciekawe, do następnego kroku, pobierania filmu, wymagania dotyczące szybkiej linii są dokładnie odwrotne: opóźnienie nie jest w ogóle istotne, a przepustowość naprawdę ma znaczenie.
Nie jesteś jeszcze zmęczony?
Chcesz jeszcze więcej szczegółów, aby zrozumieć, na co tak naprawdę spędza czas?
Następnym krokiem byłoby prześledzenie połączenia HTTP; Podejrzewam, że może pokazywać o wiele więcej objazdów niż dwa, na przykład przekierowania. Możesz użyć
wireshark
serwera proxy HTTP z logowaniem, lubstrace
po prostu policzyć wywołania systemowe do łączenia się lub pisania.Na dzień dzisiejszy oboje spojrzeliśmy wystarczająco głęboko w króliczą dziurę sieci.
źródło
Po prostu wykonaj:
Źródło
źródło
Może być inny powód.
youtube-dl
jest rozpowszechniany jako skompresowana aplikacja Python. Za każdym razem, gdy go uruchamiasz, wyodrębnia go, a następnie uruchamia.Możesz go ręcznie wyodrębnić za pomocą
unzip
polecenia. Następnie biegnij__main__.py
tak jak tyyoutube-dl
. Na komputerze o niskiej mocy, takim jak Pi, zauważalnie zwiększysz wydajność.źródło