つまり、一般的にはどのように動作するのでしょうか?ビデオストリーム自体へのリンクをどのように受け取るのか(Flashプレーヤーが入っているページだけではなく)
ウェブ上で検索してみたが、役に立つものが見つからなかった(すべてのリンクはそのようなサービスを指しているが、実際にどのように実装されているのかはどれも教えてくれない)
62 PaulD 2014-06-26
youtube-dl
と呼ばれる非常に人気のあるオープンソースのコマンドライン・ダウンローダーがあります。これは、与えられたYouTubeのリンクから実際のビデオとオーディオファイルのリンクを取得します – またはVimeo、Yahoo! Video、uStreamなどのような他の人気のあるWebビデオサイト
その様子を見るには、YouTube extractorを覗いてみてください。ここでは紹介しきれないほどです。他にもよりシンプルなサイト用の抽出器が存在しますSteven Penny氏は、YouTube用のa simple JavaScript downloaderも持っています
しかし、基本的にはFlashの動画プレーヤの場合は、何らかのJavaScriptで初期化して設定する必要があります。簡単に言えば、Flash オブジェクトのプレーヤーは、ロードする動画ストリームの URL を受け取ります
ビデオ ストリームを見つけるためには、関連する初期化コードを見つけるためにビデオ ページの HTML と JS コードを解析し、そこから実際の MP4 ファイルへのリンクを見つけようとする必要があります。それはプレーンテキストであるかもしれないが、それはまたいくつかの特定のダウンロード トークンとその場で生成することができます。多くの場合、JavaScript は、それを再エンジニアリングすることが困難になるように難読化されます。または、ビデオ情報は、JS によって非同期的にロードされた XML ファイルに含まれている可能性があります
HTML5のプログレッシブダウンロード動画の場合、実際のソースファイルはvideo
タグのsource
子に直接記載されているのが普通なので、mp4
などと検索すると出てきます。例えば、ドイツのニュース番組 Tagesschau 100 で検索してみるとわかります
<source src="http://media.tagesschau.de/video/2014/0626/TV-20140626-1649-5801.webl.h264.mp4" type="video/mp4">
MPEG DASH や Apple の HTTP Live Streaming (HLS) のような 先進的な再生技術 では、実際のビデオストリームを取得するために、メタ情報ファイルを解析しなければなりません。メタファイル (例えば DASH の場合は .mpd
、HLS の場合は .m3u8
) には、ビデオとオーディオのセグメントへのリンクが含まれており、後で再生可能なファイルを取得するために組み合わせる必要があります
一般的な解決策はありません。対象となるサイトの入念な点検とデバッグが必要です
51 slhck 2014-06-26
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
これは、同一ドメインポリシーの問題を導入しています。本質的には、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 ファイルをプロキシし、署名をスクランブルする関数を使用したので、querystring でそれを使用して動画をダウンロードすることができます
35 Steven Penny 2014-06-27
私の答え:2019年1月22日から、これらの方法を使用すると、同様にユーザー情報をリンクせずに迂回しようとすると捕まる可能性があります
私はこのプラットフォームへの新しいユーザーなので、@Daniel-Bで指定されたルールのためにコメントすることはできません。新しいToS(私はドイツにいるのでドイツ語で、翻訳してください)$6.1 G$以下のYouTubeによると
あなたは、任意の自動化されたシステム(を含むが、これらに限定されない – 任意のロボット、スパイダーまたはオフラインリーダー)を使用することに同意するものとしますウェブサイト上でそのような方法でアクセスし、指定された時間内にサーバーへのより多くの要求は、YouTubeが合理的に一般に公開されている、変更されていない標準的なWebブラウザを使用して、同じ期間内に人間として生成することができることを指示した;
今、彼らは各要求のための時間の期間を見つけることができ、あなたが違反しているかどうかを追跡することができます。どのようにそれは今、このシナリオを与えられ、あなたの外部IPアドレスは、任意のサービスにユーザーの詳細をリンクせずに自分自身を保護するためにVPNを使用する場合でも知られている可能性があります
1 user103720 2018-12-27