Adobe HDS ( Http Dynamic Streaming ) は、Adobe社の提唱するストリーム配信用プロトコルです。配信に用いるコンテンツを複数の断片(フラグメント)に分割して、これをHTTPプロトコルに乗せて次から次へと配信していくものです。配信の仕組みは、ひとつ前の記事で紹介した Apple HLS ( Http Live Steaming )とよく似ていますが、プロトコルとしては全く別のものになります。
Adobe HDS Downloader は、その名の通り、Adobe HDS で配信されているコンテンツをローカル環境にダウンロード保存するアプリケーションです。作者は、KSV さんという方です。PHPスクリプトで書かれています。
フォーラム
Adobe HDS Downloader - Audio/video stream recording forums
http://stream-recorder.com/forum/adobe-hds-downloader-t12074.html
github
K-S-V/Scripts ・ GitHub
https://github.com/K-S-V/Scripts
以下、Adobe HDS Downloader を使えるようにするまで、の手順の覚え書きです。 (なお、上記フォーラムの一番最初に、作者さんご自身による Adobe HDS Downloader の導入方法・使い方の記述があります。簡潔にして十分な記述すので、そちらを読んでわかる方は、たぶん、以下の記事をお読みになる必要はないだろうと思います)。
Adobe HDS Downloader は、PHPスクリプトで書かれていますので、まず、ご自身の環境で PHP が使えるように環境を整えてやる必要があります。すでに、PHP を使える環境をお持ちの方は、この手順は、読み飛ばしてもらってかまいません。
PHP の導入
上記フォーラムより引用(一部リンクを修正)
(引用、ここから)
Installing PHP for dummies(引用、ここまで)
- Download PHP 5.4 and extract it to C:\PHP folder.
- Download PHP.ini and copy it to the same folder.
- Right click on "My Computer" and go to Properties->Advanced->Environment Variables and add following string to the end of Path Variable.
Code:;C:\PHP- Open cmd prompt and type php -v. if you have done above steps correctly then you will see something like following.
Code:PHP 5.4.6 (cli) (built: Aug 15 2012 21:16:03) Copyright (c) 1997-2012 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
要約すると、
- PHP 5.4 をダウンロードして、C:\PHPフォルダに配し、
- PHP.ini をダウンロードして、C:\PHPフォルダへ放り込み、
- C:\PHPフォルダへパスを通し、
- コマンドプロンプトウィンドウから、
php -v
として、パスが通っていることを確認せよ。
Windows向けPHP のダウンロードは、
PHP For Windows ( http://windows.php.net/ ) 内の
ダウンロードページ
http://windows.php.net/download/
から、
PHP 5.4(5.4.6)
VC9 x86 Thread Safe (2012-Aug-15 22:48:37)
Zip [14.74MB]
sha1: 2b528f073df5029132adc62d83d62dccd5c89b99
などでよいと思います。
PHP.ini は、KSVさんの示していらっしゃるリンク、
http://www.mediafire.com/file/yu86i2l12eae9m9/PHP.ini
から入手できます。
PHP の配置先、C:\PHPフォルダは、C:\PHP でなくてもよく、ご自分の好みの場所でかまいません。ただし、階層をあまり深くしたり、パス内に日本語名のフォルダがあったり、フォルダ名に空白が含まれる、ような場合、あとあと何かとトラブルの種になりますので、避けた方が良いと思います。
パスを通す手順は、お使いの OS によって異なります。検索などして調べてみてください。あるいは、あまり環境変数をいじりたくない、というような場合は、たとえば、こちらの記事の「パスを通す」に記したような方法もあります。
パスを通さない場合、PHP を呼び出すには、
C:\PHP\php -v
のようにします(C:\PHP に配した場合の絶対パス指定)。パスを通すと、赤字部分C:\PHP\の入力が省略できる、ということです。たとえば、
PHPスクリプトファイル hoge.php を動作させる場合、hoge.php のあるフォルダをカレントにした後、PHPフォルダにパスが通っているならば、
php hoge.phpのようにします。
PHPフォルダにパスが通っていないと、
C:\PHP\php hoge.phpのように指定することになります。
AdobeHDS.php の入手
上記、KSV さんの github
https://github.com/K-S-V/Scripts
から入手できます。
- 上記、github ページを開き、ZIP と表示されているボタンをクリックすると、このリポジトリ全体のクローンの zip file がダウンロードできます。
- zip を解凍してどこか適当な場所に置いてください。
- 中に、AdobeHDS.php というのがあると思います。今回はこれを使います。
- AdobeHDS.php のあるフォルダをカレントにしてコマンドプロンプトウィンドウ(Dos窓)を開き、
php AdobeHDS.php --help
と入力して、Enterキーを押します。
Adobe HDS Downloader のパラメータの使い方が表示されれば成功です。- PHPフォルダにパスを通していない場合は、
C:\PHP\php AdobeHDS.php --help
みたいな指定になります。 - AdobeHDS.php のあるフォルダがカレントではない場合は、
C:\PHP\php AdobeHDS.phpへの相対ないし絶対パス
になります。
- PHPフォルダにパスを通していない場合は、
では早速試してみましょう。
Veevr というサイト( http://veevr.com/ 、以前書いた記事はこちら→ )は、今年の3月頃より、その大部分の動画が Adobe HDS による配信になっています。このサイトの HDS配信の動画を保存してみます。
- veevr_f4m.js
こちらに置いてあります。右クリックから保存してください。
(Windows の WSH上で動作します。URLの入力ボックスの表示に Script Control を使っています。Script Control は 32bit環境のWSHでしか動作しないので、64bit環境でお使いになる場合は、32bit用の WScript から起動してください。あるいは、ご自分で使いやすいように書き換えてください。)
手順3
HDS manifest file の URL を取得
- Veevr( http://veevr.com/ ) へ行って、適当な動画のページURLを採ってきてください。
- Veevr の一般の動画は、おそらく、HDSによる配信だと思います。Channel に属する動画は、RTMPプロトコルによる配信だと思います。RTMP配信の動画を採ってきてしまった場合は、別のサンプルを採ってきてください。HDS か RTMP かは、veevr_f4m.js が教えてくれます。
- サンプルですので、比較的再生時間の短いものを選んでください。
- これから動画の保存を行いますので、保存しても法に抵触することのない動画を選んでください。
- veevr_f4m.js を起動します。
- Windows の WSH上で動作します。
- ファイル上でダブルクリック、あるいは、
- ファイル上で右クリック、開く、あるいは、
- コマンドプロンプト(Dos窓)から、wscript の引数に veevr_f4m.js を指定して開く、など。
- 64bit環境の場合は、32bit用の wscript を使ってください。
- インプットボックスが開くので、入力ボックスに 1 で取得したページのURLを入力します。OKをクリック。
- メッセージウィンドウが表示され、f4murl というのが表示されれば成功です。
- 失敗の場合は、エラーメッセージなどが表示されるかもしれません。
- あるいは、その動画が HDSによる配信ではない場合は、いろいろ別 の表示が出るかもしれません。これは無視してください。f4murl と間違わないようにしてください。
- f4murl を後で使いますので、メモしておいてください。
- メッセージウィンドウがアクティブの状態で、Ctrl + C で、メッセージ内容がクリップボードへコピーされます。(XP以降)
- あるいは、メッセージウィンドウ内の文字列を取得できるアプリケーションなどご利用ください。
取得した URL は、HDS のマニフェストファイルURLです(拡張子 .f4m)。興味のある方は、ファイルを保存して中を覗いてみてください。テキストファイルですので、メモ帳などのテキストエディタで開くことができます。
Adobe HDS Downloader を使って保存
- AdobeHDS.php のあるフォルダをカレントにして、コマンドプロンプトウィンドウ(Dos窓)を開きます。
- 次のように入力します。
php AdobeHDS.php --manifest "f4murl"
緑字部分、f4murlには、手順3で取得した f4murl を記します。 - よければ、コマンドライン文字列末尾で Enterキーを押下。
- フラグメントされたファイルが次から次へとダウンロードされれば成功です。
- フラグメントされたファイルのダウンロードがすべて終了すると、各フラグメントファイルを処理・繋ぎ合わせて、一つのファイルにしたものが作成されます。
hoge_fuga_seg1_flag[連番]
だとしたら、
php AdobeHDS.php --fragments hoge_fug_seg1_flagのように、連番部分を外して --fragments パラメータに渡してやれば、フラグメントの処理・連結作業を、別途行ってくれます(手順4では、この作業が既に終了しています)。
フラグメントファイルのURLがわかっていれば、連番展開機能のあるダウンロードマネージャなどを用いて、別途、フラグメントファイルのダウンロードを行っておき、これを AdobeHDS.php で処理する、というような使い方ができます。
手順4では、ダウンロー終了後に、自動的に、フラグメント処理・連結作業へと移行しているわけです。
以下の記述は、技術的な興味から記すもので、ファイルの保存等を目的としたものではありません。
以下の記述は、予告なく削除することがあります。
BBC ( http://www.bbc.co.uk/ ) は、英国の公共放送局。BBC は、先のロンドンオリンピックの中継を、インターネットを通して配信していました。今でも録画を、おそらくほぼノーカットで視聴可能です。ただし、視聴は、英国国内からのみに限定されていて、国外からの視聴はできなくなってます。
米国などでは、今回のオリンピックがリアルタイムで中継されなかったために、VPN などを用いて、なんとか、BBC の中継を視聴しようとした方々もおられたそうですね。
Adobe HDS Downloader を用いて、BBC のオリンピック動画を「なんとかしてみよう」という「試み」です。
- bbcOlym_f4m.js
BBC Olympic動画の HDS マニフェストファイルURLを取得するためのスクリプトです。 こちらに置いてあります。 95-96行目あたり、_BBCOlym.useProxy を true にし、_BBCOlym.Proxy に UK proxy を記してください。いわゆる、漏れ串でも大丈夫だと思います。proxy の安全性など、ここでは触れません。proxy についてよくわからない方は、使わないでください。
- BBC Sport - London 2012 Olympics - Full Schedule : Grid View
http://www.bbc.co.uk/sport/olympics/2012/schedule-results
からたどって、動画ページのリンクURLを取得してください。おそらく、英国国外からのアクセスだと、リンクそのものが表示されないと思います。このあたり、詳しく説明しません。 - bbcOlym_f4m.js を起動します。インプットボックスに、1で取得した URL を入力します。OKをクリック。
- メッセージボックスが表示されて、f4murl が表示されれば成功です。
これまでと同じように、 マニフェストファイルの取得、フラグメントファイルの取得、ともに、英国国外からのアクセスは規制されています。Adobe HDS Downloader は、Proxy の設定も可能ですが、ここでは、漏れ串は使えません。今まで使えた漏れ串が、なぜここでは使えないのか。おそらく、この部分に限って「漏れ」をチェックしている、ということなのだろうと思います。
$this->headers[] = 'Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg'; $this->headers[] = 'Connection: Keep-Alive'; $this->headers[] = 'Content-type: application/x-www-form-urlencoded;charset=UTF-8';このあたりに、
$this->headers[] = 'X-Forwarded-For: 212.58.244.68';を挿入してやります。こうしてやると、Proxy を使わなくても、アクセス可能になるようでした。