YouTube-Lesezeichen
So habe ich es mit JavaScript gemacht
Beginnen Sie mit dem ytplayer.config.args
Objekt. 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.com
da es sich um unterschiedliche Domänen handelt. Eine Umgehung dieses Problems ist
CORS . Mit CORS
s.ytimg.com
kö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.