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

62

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 Web durchgeführt, konnte aber nichts Nützliches finden (alle Links verweisen auf solche Dienste, aber keiner sagt, wie sie tatsächlich implementiert sind).

PaulD
quelle

Antworten:

51

Es gibt einen sehr beliebten Open-Source-Befehlszeilen-Downloader 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.

Sehen Sie sich den YouTube-Extraktor an , um zu sehen, wie das gemacht wird . Das ist einfach zu viel, um es hier zu zeigen. Für einfachere Sites gibt es 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 im untergeordneten sourceElement des videoTags angegeben. Wenn Sie also auf der Seite nach mp4oder ähnlichem suchen möchten, müssen Sie dies tun . In der deutschen Nachrichtensendung Tagesschau 100 finden Sie beispielsweise:

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

Für fortgeschrittenere 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 ( .mpdz. B. in DASH und .m3u8fü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.

slhck
quelle
3
Eine Frage, wie lauten die Richtlinien von Youtube / Google dazu? Sind sie damit einverstanden oder nicht so sehr?
JMK
31
Die Nutzungsbedingungen von YouTube in §5.1.L verbieten die Nutzung ihrer Inhalte auf andere Weise als durch Streaming. Theoretisch ist dies nicht zulässig. In der Praxis werden sie dies jedoch nicht durchsetzen können. Jeder Downloader kann mehr oder weniger simulieren, dass es sich nur um Streaming handelt.
Slhck
2
@StevenPenny hast du eine nicht minimierte Version davon?
TankorSmash
5
@slhck Flash kann auch selbst HTTP-Anfragen stellen. Stattdessen wird die HTTP-Engine des Browsers verwendet. Wenn Flash selbst die Anforderungen gestellt hätte, wären sie für den Browser nicht „sichtbar“. Klar wäre das toll für Werbetreibende. ;)
Daniel B
3
@slhck sie können es nicht programmatisch durchsetzen , aber wenn sie ihr Anwaltsteam herausholen würden , könnten sie es legal durchsetzen ?
Cruncher
35

YouTube-Lesezeichen

So habe ich es mit JavaScript gemacht

Beginnen Sie mit dem ytplayer.config.argsObjekt. 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. Dies gibt es seit 2011 und muss erst noch rückentwickelt werden .

Die Videos des Typs "s" sind die schwierigsten, die tatsächlich heruntergeladen werden können. Sie werden diese typischerweise auf VEVO-Videos und dergleichen 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 zu dem Problem der Politik des gleichen Ursprungs . Grundsätzlich können Sie diese Datei nicht herunterladen, www.youtube.comda es sich um unterschiedliche Domänen handelt. Eine Umgehung dieses Problems ist CORS . Mit CORS s.ytimg.comkönnte dieser Header hinzugefügt werden

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

und es würde das JavaScript erlauben, von herunterzuladen www.youtube.com. 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: *

Nachdem Sie also 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.

Steven Penny
quelle
1
Weißt du zufällig (für DASH-Wiedergabe), wie der YouTube-Player die anzufordernden Bytebereiche aus der Mediendarstellung ermittelt? In der MPD-Datei werden nur Segmente aufgelistet.
Slhck
2
Nicht genau. Es gibt eine einzige Datei für Video und Audio, aber YouTube fordert sie nach Bytebereichen in mehreren Blöcken an. Wenn Sie zu einer anderen Qualität wechseln, ändert sich auch der Byte-Bereich. Ich frage mich nur, woher der Spieler weiß, welche Sekunde welchem ​​Byte-Offset entspricht.
Slhck
1
Können Sie ein Beispiel für einen sTyp Video und RTMPETyp Video geben?
Chloe
@SurajJain hier ist eine neue Seite - ich werde diese Antwort umschreiben, da ich jetzt eine andere Methode verwende github.com/svnpenn/umber/blob/master/bmklet/youtube/download.js
Steven Penny
Der Link gibt mir eine 404. Hast du das Repo entfernt?
darksoulsong
1

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

Warum? Da ich ein neuer Benutzer dieser Plattform bin, kann ich für die von @ Daniel-B angegebene Regel keine Kommentare abgeben . Laut neuem ToS für YouTube unter $ 6.1 G $:

Sie erklären sich damit einverstanden, dass jedes automatisierte System (einschließlich - aber nicht ausschließlich - 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, die angemessen produziert werden 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.

user103720
quelle
1
Willkommen Reisender aus der Zukunft ... Es ist nicht klar, wie dies die Frage des Autors beantwortet
Ramhound
Wenn Sie den Autor in Bezug auf eine bestimmte Antwort warnen möchten, sollten Sie einen Kommentar abgegeben und jede Antwort abgelehnt haben, die Sie aufgrund möglicher rechtlicher Probleme für nicht hilfreich hielten. Diese Antwort entspricht eher dem, was Sie in einem Diskussionsforumbeitrag finden würden, und Super User ist kein Diskussionsforum
Ramhound