これらの「YouTubeから動画を保存する」サービスは、どのように機能するのでしょうか?

youtube

つまり、一般的にはどのように動作するのでしょうか?ビデオストリーム自体へのリンクをどのように受け取るのか(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


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

これは、同一ドメインポリシーの問題を導入しています。本質的には、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


タイトルとURLをコピーしました