it-swarm.com.de

Wie funktionieren all diese Dienste zum Speichern von Videos von YouTube?

Ich meine, wie arbeiten sie im Allgemeinen? Wie erhalten sie den Link zu einem Videostream selbst (nicht nur die Seite mit einem Flash-Player)?

Ich habe eine Suche im Internet durchgeführt, konnte aber nichts Nützliches finden (alle Links verweisen auf solche Dienste, aber keiner sagt, wie sie tatsächlich implementiert sind).

60
PaulD

Es gibt einen sehr beliebten Open Source-Befehlszeilen-Downloader namens youtube-dl , der genau das tut. Es ermittelt die tatsächlichen Video- und Audiodateilinks von einem bestimmten YouTube-Link - oder einer anderen beliebten Webvideo-Site wie Vimeo, Yahoo! Video, uStream usw.

Um zu sehen, wie das gemacht wird, schauen Sie in den YouTube-Extraktor . Das ist einfach zu viel, um es hier zu zeigen. Für einfachere Sites existieren andere Extraktoren . Steven Penny hat auch einen einfachen JavaScript-Downloader für YouTube, der etwas unkomplizierter ist.

Grundsätzlich muss ein Flash-Videoplayer jedoch über JavaScript initialisiert und konfiguriert werden. Einfach ausgedrückt, der Player des Flash-Objekts erhält eine URL eines zu ladenden Videostreams.

Um den Videostream zu finden, müssen Sie den HTML- und JS-Code der Videoseite analysieren, um den entsprechenden Initialisierungscode zu finden, und von dort aus versuchen, den Link zur eigentlichen MP4-Datei zu finden. Es könnte im Klartext vorliegen, aber es könnte auch im laufenden Betrieb mit bestimmten Download-Tokens generiert werden. Häufig wird das JavaScript verschleiert, um das Neuentwickeln zu erschweren. Die Videoinformationen können auch in einer XML-Datei enthalten sein, die von JS asynchron geladen wird.

Bei progressiven HTML5-Downloadvideos wird die eigentliche Quelldatei normalerweise direkt in der source-untergeordneten Datei des video-Tags angegeben. Wenn Sie also die Seite nach mp4 oder ähnlichem durchsuchen möchten, Zum Beispiel in der deutschen Nachrichtensendung Tagesschau 100 finden Sie:

<source src="http://media.tagesschau.de/video/2014/0626/TV-20140626-1649-5801.webl.h264.mp4" type="video/mp4">

Für weitere fortschrittliche Wiedergabetechnologien wie MPEG DASH oder das HTTP Live Streaming (HLS) von Apple müssen Sie eine Metainformationsdatei analysieren, um den tatsächlichen Videostream zu erhalten . Die Metadatei (.mpd zum Beispiel in DASH und .m3u8 für HLS) enthält Links zu Video- und Audiosegmenten, die Sie später kombinieren müssen, um eine abspielbare Datei zu erhalten.

Dafür gibt es keine generelle Lösung. Dies erfordert eine sorgfältige Überprüfung und Fehlerbehebung des Zielstandorts.

50
slhck

YouTube-Lesezeichen

So habe ich es mit JavaScript gemacht

Beginnen Sie mit dem Objekt ytplayer.config.args. Dieser enthält alle URLs für das Video. Es ist aufgebrochen in

url_encoded_fmt_stream_map // traditional: contains video and audio stream
adaptive_fmts              // DASH: contains video or audio stream

Jedes von diesen ist ein durch Kommas getrenntes Array dessen, was ich als "Stream-Objekte" bezeichnen würde. Jedes "Stream-Objekt" enthält Werte wie diesen

url  // direct HTTP link to a video
itag // code specifying the quality
s    // signature, security measure to counter downloading

Jede URL wird verschlüsselt , sodass Sie sie entschlüsseln müssen. Nun der knifflige Teil.

YouTube hat mindestens 3 Sicherheitsstufen für ihre Videos

unsecured // as expected, you can download these with just the unencoded URL
s         // see below
RTMPE     // uses "rtmpe://" protocol, no known method for these

Die RTMPE-Videos werden in der Regel für offizielle Filme in voller Länge verwendet und sind mit der SWF-Überprüfung Typ 2 geschützt. Diese Funktion gibt es bereits seit 2011 und muss noch implementiert werden dekompiliert.

Die Videos des Typs "s" sind die schwierigsten, die tatsächlich heruntergeladen werden können. Sie werden diese normalerweise auf VEVO-Videos und Ähnlichem sehen. Sie beginnen mit einer Unterschrift wie

AA5D05FA7771AD4868BA4C977C3DEAAC620DE020E.0F421820F42978A1F8EAFCDAC4EF507DB5

Dann wird die Signatur mit einer solchen Funktion verschlüsselt

function mo(a) {
  a = a.split("");
  a = lo.rw(a, 1);
  a = lo.rw(a, 32);
  a = lo.IC(a, 1);
  a = lo.wS(a, 77);
  a = lo.IC(a, 3);
  a = lo.wS(a, 77);
  a = lo.IC(a, 3);
  a = lo.wS(a, 44);
  return a.join("")
}

Diese Funktion ist dynamisch und ändert sich normalerweise täglich. Um es schwieriger zu machen, wird die Funktion unter einer URL wie gehostet

http://s.ytimg.com/yts/jsbin/html5player-en_US-vflycBCEX.js

dies führt das Problem der Richtlinie mit gleichem Ursprung ein. Grundsätzlich können Sie diese Datei nicht von www.youtube.com herunterladen, da es sich um unterschiedliche Domänen handelt. Eine Umgehung dieses Problems ist CORS . Mit CORS könnte s.ytimg.com diesen Header hinzufügen

Access-Control-Allow-Origin: http://www.youtube.com

und es würde dem JavaScript erlauben, von www.youtube.com herunterzuladen. Natürlich machen sie das nicht. Eine Problemumgehung für diese Problemumgehung besteht darin, einen CORS-Proxy zu verwenden. Dies ist ein Proxy, der auf alle Anfragen mit dem folgenden Header antwortet

Access-Control-Allow-Origin: *

Nun, da Sie Ihre JS-Datei als Proxy gespeichert und die Funktion zum Verschlüsseln der Signatur verwendet haben, können Sie diese Funktion im Querystring zum Herunterladen eines Videos verwenden.

33
Steven Penny

Meine Antwort: Ab dem 22. Januar 2019 kann die Verwendung dieser Methoden abgefangen werden, wenn Sie versuchen, zu umgehen, ohne auch Ihre Benutzerinformationen zu verknüpfen.

Warum? Da ich ein neuer Benutzer auf dieser Plattform bin, kann ich keine Kommentare zu Regeln abgeben, die von @ Daniel-B angegeben wurden. Laut neuem ToS für YouTube unter $ 6,1 G $:

Sie erklären sich damit einverstanden, dass jedes automatisierte System (einschließlich - aber nicht beschränkt auf - eines Roboters, eines Spiders oder eines Offline-Readers), das auf der Website zugreift, in einer Weise mehr Anfragen an den Server innerhalb einer festgelegten Zeit von YouTube gerichtet werden, um angemessen produzieren zu können ein Mensch innerhalb des gleichen Zeitraums, der einen öffentlich zugänglichen, nicht modifizierten Standard-Webbrowser verwendet;

Jetzt können sie die Zeitdauer für jede Anfrage herausfinden und nachverfolgen, ob Sie gegen diese Regeln verstoßen. Wie ist es jetzt möglich, wenn dieses Szenario gegeben ist und Ihre externe IP-Adresse bekannt ist, auch wenn Sie ein VPN verwenden, um sich zu schützen, ohne Benutzerdetails mit einem Dienst zu verknüpfen.

0
user103720