質問: これらの「youtubeからビデオを保存」サービスはどのように機能しますか? つまり、それらは一般的にどのように機能するのでしょうか。どのようにしてビデオストリーム自体へのリンクを受け取るのですか(flashプレーヤーを含むページだけではありません)。私はウェブで検索しましたが、何も便利なものを見つけることができませんでした(すべてのリンクはそのようなサービスを指していますが、それらのどれもそれらが実際にどのように実装されるかを教えません)。
回答: youtubeブックマークレット これが私がjavascriptでやった方法ですytplayer.config.argsオブジェクトから始めます。これには動画のすべてのurlが含まれています。それはに分割されていますurl_encoded_fmt_stream_map // traditional: contains video and audio stream adaptive_fmts // dash: contains video or audio stream これらはそれぞれ、「ストリームオブジェクト」と呼ぶものをカンマで区切った配列です。各「ストリームオブジェクト」は、このような値を含みます。url // direct http link to a video itag // code specifying the quality s // signature, security measure to counter downloading それぞれのurl エンコードされます だからあなたはそれらをデコードする必要があるでしょう。今トリッキーな部分。youtubeでは、動画に対して少なくとも3つのセキュリティレベルがあります。unsecured // as expected, you can download these with just the unencoded url s // see below rtmpe // uses "rtmpe://" protocol, no known method for these rtmpeビデオは通常、正式なフルレングスの映画で使用され、swf検証タイプ2で保護されています。これは約{ 2011以降 }であり、まだリバースエンジニアリングされていません。タイプ "s"のビデオは、実際にダウンロードできる最も難しいものです。あなたは通常vevoビデオなどでこれらを見るでしょう。彼らはのような署名で始まりますaa5d05fa7771ad4868ba4c977c3deaac620de020e.0f421820f42978a1f8eafcdac4ef507db5 それから署名はこのような機能でスクランブルされます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("") } この機能は動的で、通常は毎日変わります。より困難にするために、この機能は次のようなurlでホストされています。http://s.ytimg.com/yts/jsbin/html5player-en_us-vflycbcex.js これは same-origin policy の問題を引き起こします。基本的に、www.youtube.comからこのファイルをダウンロードすることはできません。これらは異なるドメインです。この問題の回避策は cors です。 corsでは、s.ytimg.comはこのヘッダを追加できますaccess-control-allow-origin: http://www.youtube.com そしてそれはjavascriptがwww.youtube.comからダウンロードすることを可能にするでしょう。もちろん彼らはこれをしません。この回避策のための回避策はcorsプロキシを使用することです。これはすべてのリクエストに対して以下のヘッダで応答するプロキシです。access-control-allow-origin: * jsファイルをプロキシし、署名をスクランブルする関数を使用したので、動画をダウンロードするためにクエリ文字列でそれを使用できます。