VLC Media Player の Lua Playlist Scripts

以前、こちら( )でも書きましたが、VLC Media Player は、動画のストリーム再生(動画をダウンロードしながら再生、プログレッシブダウンロード)ができるようになっています。通常は、メニューバーのメディア > ネットワークストリームを開く、から、動画の直リンクURLを入力して再生してやります。

YouTube などいくつかのサイトでは、動画への直リンクURLを求めなくても、上記手順で、動画のページURLを入力してやるだけで、その動画ページの動画を VLC Media Player 上でストリーム再生できます。これは、VLC Media Player に実装された Luaスクリプトが、動画のページURLから、動画への直リンクURLを求めることで実現されています。

以前の記事では、YouTube の Cookie値がいたずらして、VLC Media Player 上での YouTube動画の視聴ができなくなっている、ということを書きました。このところ、この「Cookie のいたずら」がなくなって、視聴できるようになっていたのですが、9月中旬ころの YouTube 側仕様変更により、再び、うまく視聴できなくなっています。(VLC Media Player version 2.0.3 および、その同梱のスクリプトに基づきます。以下同様。)

これを修正する、youtube.lua スクリプトの修正情報がありましたのでご紹介しておきます。

修正の手順
  1. 次の URL
    http://www.videolan.org/developers/vlc/share/lua/playlist/
    へ行って、youtube.lua を入手します。
    • この記事を書いた時点で youtube.lua は、
      19-Jan-2012  07:55  6.4K
      でした。
  2. youtube.lua をテキストエディタで開きます。次の2箇所を修正します。

    122行目(修正前)
    for url,itag in string.gmatch( url_map, "url=([^&,]+)[^,]*&itag=(%d+)" ) do
    
    を、(修正後)
    for itag,url,sig in string.gmatch( url_map, "itag=(%d+)&url=([^&,]+)[^,]*&sig=([^&,]+)" ) do
    
    へ書き換え。

    126行目(修正前)
    url = vlc.strings.decode_uri( url )
    
    を、(修正後)
    url = vlc.strings.decode_uri( url ).."&signature="..sig
    
    へ書き換え。

    正しく修正できていることを確認したら、上書き保存します。
  3. %AppData%\vlc\lua\playlist フォルダを開きます。
    • まず、%AppData%\vlc フォルダを開き、lua フォルダ、その下に playlist フォルダがあることを確認してください。ない場合は作成してください。
    • %AppData% の場所は、環境によって異なります。
  4. playlist フォルダ内に、2で修正した youtube.lua ファイルを放り込みます。
以上です。
参照元:

注意すること
  • VLC Media player 本体側で youtube.lua スクリプトのアップデートのあった場合は、%AppData%\vlc\lua\playlist フォルダ内の youtube.lua は削除してください。
    • %AppData%\vlc\lua\playlist フォルダは、ユーザーの用意した Luaスクリプトの置き場所、インストールフォルダ内 lua\playlist フォルダは、VLC Media Player 同梱の Luaスクリプトの置き場所、みたいに使うのだろうと思います。
    • VLC Media player は、まず、%AppData%\vlc\lua\playlist フォルダ内に、担当する Luaスクリプトを捜し、見つからなければ、インストールフォルダ内、lua\playlist フォルダ内に担当Luaスクリプトを捜すようです。
  • URL の末尾にクエリ文字列
    ?fmt=[数字] または、  &fmt=[数字]
    を指定してやると、数字の指定する画質の動画ファイルを採ろうとします。指定しない場合、ないし、数字の指定する画質の動画ファイルが見つからない場合には、スクリプト側で、画質をひとつ選んで採るようです。
    • 数字の指定する画質は、たとえば、
      http://en.wikipedia.org/wiki/YouTube#Quality_and_codecs
      などを参照してください。itag value というのが fmt の[数字]にあたります。
  • 私の環境では、スクリプトの採った動画が、WebM 形式の場合、エラーが出て再生できないようでした。(mkvエラーというのが出る。WebM形式の動画を、いったん、ローカルへ保存した後、開いてやると再生できるようで、プログレッシブダウンロードの場合に、なぜ、うまくいかないのか、原因はよくわかりません。私の環境だけの問題かもしれません)。この場合は、fmt で WebM でないものを指定してやってください。

youtube.lua 修正のお話はこれで終わりです。

VLC Media Player version 2.0.3 同梱の dailymotion.lua も、8月上旬の Dailymotion 動画の仕様変更に対応していませんので、修正情報を記しておきます。修正の手順は、youtube.lua の場合と同じですので、手順はそちらを参照してください。

dailymotion.lua
  • http://www.videolan.org/developers/vlc/share/lua/playlist/
    の 19-Sep-2011  07:55  3.0K に基づきます。

    56行目(修正前)
    if string.match( line, "\"sequence\",")
    
    を、(修正後)
    if string.match( line, "\"sequence\"")
    
以上です。
参照元:


おまけ
練習を兼ねて、VLC Media Player用 Lua Playlist Scripts をいくつか作ってみました。見よう見まねで作ったもので、かなりいいかげんなものです。動作の保証はしません。そんなのでもいいよ、という心の広い方のみお試しください。ご自分で勝手に書き換えて使ってもらってかまいません。使い方は、上記、youtube.lua の場合と同じで、%AppData%\vlc\lua\playlistフォルダ内へ、スクリプトを放り込んでください。
  • pandoratv.lua
    PandoraTV( http://www.pandora.tv/ )用の Lua Playlist スクリプトです。
    • 再生が始まって数秒~数分で、再生が途切れることがあるかもしれません。そういう場合は、あきらめてください。
    • シークバーは使えません。使うと、停止してしまいます。
    • VLC Media Player は、動画が途切れた場合や、シークバーを用いた場合でも、ちゃんと動作するようにできているのだろうと思いますが、なぜかうまくいきません。原因はわかりません。(追記:設定(すべて)>入力/コーデック>アクセスモジュール>HTTP(S) の「継続的なストリーム」にチェックが入っている場合、うまく動作しないようです。)
  • veoh.lua
    Veoh( http://www.veoh.com/ )用の Lua Playlist スクリプトです。
    • たぶん、preview動画を拾っています(30分以上の長さの動画は、最初の数分くらいしか再生されない)。
  • bliptv.lua
    Blip( http://blip.tv/ )用の Lua Playlist スクリプトです。


この記事の内容を実行するに際しては、すべて、ご自身の判断と責任において行うようにしてください。

IPC公式の Paralympic動画

国際パラリンピック委員会(International Paralympic Committee、略称IPC)の公式ページ( http://www.paralympic.org/ )において、現在開催中の London 2012 Paralympic Games のライブ映像、録画映像の視聴が可能になっています( http://smart.paralympic.org/player/Main.html )。

動画の再生には、SMART ( Sport Media Application in Real Time ) Player というFlashベースのアプリケーションが使われていて、その配信には、Octoshape社( http://www.octoshape.com/ )の Infinite HD-M という動画配信用プラットフォームが使われているのだそうです。(参照記事

これらの動画を VLC Media Player で再生してみよう、という試みです。

用意するもの
  • Octoshape Infinite HD app
    • IPC公式のページにて Paralympic動画を再生しようとしたときに、
      Infinite HD app Install MsgBox
      みたいなメッセージボックスが出て、"Agree and install" をクリックした方は、既に、Octoshape Infinite HD app がインストールされている可能性が高いです。スタートメニューに "Octoshape Streaming Services" というのがないか、確認してみてください。(なお、IPC公式のページにて Paralympic動画を視聴する目的のみならば、この Octoshape Infinite HD app のインストールは必須ではありません。インストールしなくても動画の視聴はできます。インストールしたくない場合は、"No thanks" をクリックしてやればよいです。)
    • あるいは、"%AppData%\Octoshape\Octoshape Streaming Services" を開いて、OctoshapeClient.exe があることを確認してください( OctoshapeClient.exe が Octoshape Infinite HD app の本体です)。
    • Octoshape Infinite HD app が見つからない場合は、
      http://octoshape.com/support/infinite-hd-octoshape-app/
      から、インストールすることができます。
    • インストールするにあたっては、
      End User License Agreement
      http://octoshape.com/support/eula/

      Frequently Asked Questions
      http://octoshape.com/support/frequently-asked-questions/
      をよく読んで、ご自身の責任と判断によってください。
  • VLC Media Player
    • VLC Media Player についてはここでは触れません。
    • 既にインストール済みであるとします。

準備1
Octoshape Infinite HD app の設定を確認
  1. Octoshape Infinite HD app を起動します。画面右下の通知領域に アイコンが表示されます。
    • スタートメニューに Octoshape Infinite HD app がある場合は、そちらから起動できます。この場合、同時にブラウザが起動するかもしれないので、ブラウザはいったん閉じてください。
    • あるいは、"%AppData%\Octoshape\Octoshape Streaming Services" の、OctoshapeClient.exe を直接起動してください。
    • この時、環境によっては、いろいろな警告メッセージが出るかもしれません。
  2. 通知領域の アイコン上で右クリック、Settings を選択してクリック、設定ウィンドウが開きます。
  3. External Player の設定を、System default player にしてください。
    • その他の設定項目は、ご自分の好みに合わせてください。
    • Startup は、Windows 起動時に同時に起動させるかどうかです。Nothing を推奨。
    • Browser は、Infinite HD app からブラウザを起動する際に使用されるブラウザです。
    • Idle は、おそらく、一定時間 Infinite HD app の動作がない時に、自動的に終了するかどうかです。
  4. 設定が終わったら、OK をクリックして設定ウィンドウを閉じます。
  5. 通知領域の アイコンを右クリック、Exit をクリックして、終了します。

準備2
VLC Media Player の設定の確認
  • VLC Media Player が、拡張子 flv に関連付けられ、かつ、標準アクションになっていることを確認してください。
    • 要するに、拡張子flv のファイルがあったとして、これをダブルクリックしたら、VLC Media Player が立ち上がって、このファイルを再生するようになっていれば、OK です。(2012.09.10 追記。HKCUで関連付けされている場合(既定のプログラム)は、そちらの設定が優先されるため、ダブルクリックで立ち上がるアプリケーション = 標準アクション、ではない場合があります)。
    • 関連付けされていない場合は、VLC Media Player のツール>設定>インターフェース設定、ファイル関連付け設定、などから設定できるかもしれません(私の環境では、何やらエラーが出で、設定できませんでした。原因はよくわかりません)。関連付けは、通常、VLC Media Player インストール時に、インストールと同時に、設定するようになっています。あるいは、Windows 標準の関連付け設定からも設定できると思います。(2012.09.10 追記。フォルダオプション>ファイルの種類、などから設定する必要があります。Vista以降、この設定方法は使えなくなりました)。
  • 今回例に挙げているIPC公式の Paralympic動画では、拡張子 flv が使われている(後述)ので、flv の関連付けを確認しています。他の拡張子が使われている場合は、その拡張子が VLC Media Player に関連付けられていることが必要だろうと思います。

手順1
octoshape URL の取得
  1. XML を表示できるブラウザで、
    http://smart.paralympic.org/data/schedule.xml
    を開きます。
    • あるいは、XML をいったん保存した後、XML Viewer などで開きます。
    • テキストファイルですので、テキストエディタなどで開くこともできますが、たぶん、わかりづらいと思います。
    • Smart Player で表示されるスケジュール一覧の元になるデータを収めた XMLファイルです。
    • root に ScheduleBody があって、その子に、ScheduleUnit がずらりと並んでいるのがわかると思います。
  2. ScheduleUnit の Description や Date などを元に自分の視聴したい ScheduleUnit を特定して、その ScheduleUnit の Location のところにある octoshape:// から始まる URL を取得します。
    • RTMP のものと HLS のものがありますが、octoshape:// 以下の文字列は、たぶん、どちらも同じです。

手順2
Octoshape Infinite HD app から VLC を起動

方法1
  1. ブラウザの URL 欄に、手順1で取得した、octoshape URL を入力して、開きます。
    • 環境によってはここで、いろいろな警告のウィンドウなどが出るかもしれません。
  2. VLC Media Player が立ち上がって、動画の再生が始まれば成功です。
あるいは、次の手順に従ってもかまいません。
方法2
  1. OctoshapeClient.exe のあるフォルダ(通常は、"%AppData%\Octoshape\Octoshape Streaming Services"フォルダ)をカレントにしてコマンドプロンプトウィンドウを開きます。
  2. ウィンドウ内に
    OctoshapeClient -url:octoshapeURL
    
    と入力してエンターキーを押します。
    • 緑字部分octoshapeURLには、手順1で取得した octoshape URL を記します。
  3. VLC Media Player が立ち上がって、動画の再生が始まれば成功です。

動画の再生が始まったら、VLC Media Player の ツール>メディア情報、を開いて、メディア情報ウィンドウを表示させます。ウィンドウの下のほう、ロケーションに表示されている文字列をコピーしして、メモ帳などに貼り付けてみてください。おそらく、
http://127.0.0.1:6498/
から始まる URL になっているのではないかと思います。

Octoshape Infinite HD app のやっていること
Octoshape Infinite HD app はおそらく、ローカルのサーバ(127.0.0.1:6498)として働き、VLC からの HTTPリクエストを受け、これを、octoshape 独自のプロトコルにして外部へと接続しているのだと思います(Gateway)。
OctoshapeClient -url:octoshapeURL
として起動すると、OctoshapeClient は、octoshapeURL を、ローカルサーバに接続するための HTTP の URL に翻訳して、VLC Media Player へと渡すのでしょう。(正確には、拡張子(今回の場合は拡張子 flv)に関連付けられた標準のアプリケーションを起動し、起動の際に引数として、ローカルHTTP URL 文字列を渡すのだと思います。アプリケーションが、渡された URL に対応していなければ、あるいは、引数そのものを受け付けなければ、"You have no mediaplayer supporting the protocol of this stream." というエラーメッセージを出します)。

動画を保存したい場合は、Octoshape Infinite HD app を起動した状態(通知領域に アイコンが表示された状態)で、先に取得した http://127.0.0.1:6498/ で始まるローカルURL を、ダウンロードマネージャなどに放り込んでやれば、保存可能だろうと思います。あるいは、そのダウンロードマネージャが、コマンドラインからの起動時に引数としてURLを取ることができるならば、VLC Media Player を介さずに、関連付けから直接起動・ダウンロードすることもできると思います。

この記事の内容を実行するに際しては、すべて、ご自身の判断と責任において行うようにしてください。

Channel 4 の Paralympic 動画

ひとつ前の記事の応用編です。

Channel 4( http://www.channel4.com/ )は、英国の公共放送局。Channel 4 は、現在英国で開催されている London 2012 Paralympic Games の実況映像を、英国国内向けに Web上で配信しています。これを Adobe HDS Downloader を用いて視聴してみよう、という試みです。

なお、 London 2012 Paralympic Games の実況映像は、
IPC 公式
http://www.paralympic.org/
http://smart.paralympic.org/player/Main.html
においても視聴できます。こちらは、地域による視聴制限はないようです。

用意するもの
  • PHP
  • adobeHDS.php
  • ch4_para_f4m.js
    • Channel 4 のパラリンピック実況映像のマニフェストファイルURLを取得するスクリプトです。こちらに置いてあります。
    • Windows の WSH上で動作します。URLの入力ボックスの表示に Script Control を使っています。Script Control は 32bit環境のWSHでしか動作しないので、64bit環境でお使いになる場合は、32bit用の WScript から起動してください。あるいは、ご自分で使いやすいように書き換えてください。

手順1
Channel4.php の作成。

Adobe HDS Downloader の作者 KSVさんのお書きになった、Channel4.php を作成します。
Channel4.php は、
http://stream-recorder.com/forum/showpost.php?p=53681&postcount=310
にて、PHPスクリプトコードとして公開されています。
以下、引用
<?php
  $data  = "st=" . time() . "~exp=" . (time() + 25) . "~acl=/*";
  $key   = pack("H*", "A65A28D4A2F97F470624F15E637C205D");
  $token = "?hdnea=" . $data . "~hmac=" . hash_hmac("sha256", $data, $key);
  $url   = $argv[1] . $token . "&hdcore=2.9.5";
  passthru('php AdobeHDS.php --manifest "' . $url . '"');
?>
引用、おわり。
このコードをコピーして、テキストエディタに貼り付け、Channel4.php というファイル名で、どこか適当な場所に保存してください。
  • 以下の手順では、Channel4.php のあるフォルダをカレントにして操作していきます。ダウンロードしたファイルなども、このフォルダ内に保存されることになります。
  • Channel4.php は、マニフェストファイルURLに、発行時刻や、時刻などを元にしたハッシュ値などを、クエリ文字列として付加して、これを adobeHDS.php に渡してくれるPHPスクリプトです。このクエリ文字列がないと、マニフェストファイルの取得ができません。また、おそらく、寿命を設定しています。

手順2
adobeHDS.php の書き換え。
  1. 手順1で作成した Channel4.php のあるフォルダ内に、adobeHDS.php をコピーしてください。
  2. adobeHDS.php をテキストエディタで開いて、
    126行目あたり、
    $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: 83.98.28.10';
    
    を挿入してください。
  3. 修正を確認して、間違いなければ、上書き保存します。

手順3
マニフェストファイルURLを取得。

Channel 4 のパラリンピック実況映像のマニフェストファイルURLを取得します。
実況映像のURLは、
http://paralympics.channel4.com/video/index.html
http://paralympics.channel4.com/video/stream1.html
http://paralympics.channel4.com/video/stream2.html
http://paralympics.channel4.com/video/stream3.html
です。(4つのチャンネルがあります。ご自分の見たいチャンネルを選んでください。)
  1. ch4_para_f4m.js を起動します。
    • Windows の WSH上で動作します。
    • ファイル上でダブルクリック、あるいは、
    • ファイル上で右クリック、開く、あるいは、
    • コマンドプロンプト(Dos窓)から、wscript の引数に ch4_para_f4m.js を指定して開く、など。
    • 64bit環境の場合は、32bit用の wscript を使ってください。
  2. インプットボックスが開くので、入力ボックスに、ご自分の見たいチャンネルページのURLを入力します。OKをクリック。
  3. メッセージウィンドウが表示され、f4murl というのが表示されれば成功です。
    • 失敗の場合は、エラーメッセージなどが表示されるかもしれません。
    • kind: が Live か、Live以外のものか、確認してください。
  4. f4murl を後で使いますので、メモしておいてください。
    • メッセージウィンドウがアクティブの状態で、Ctrl + C で、メッセージ内容がクリップボードへコピーされます。(XP以降)
    • あるいは、メッセージウィンドウ内の文字列を取得できるアプリケーションなどご利用ください。

Adobe HDS downloader ( =adobeHDS.php ) は、保存対象が Live か、そうでないかで、その保存の動作が異なります。Live ではない場合は、ひとつ前の記事で見たように、まずすべてのフラグメントファイルをダウンロードした後、フラグメントファイルの処理・結合したファイルの作成、が行われます。Live の場合は、各フラグメントファイルがダウンロードされたら、すぐに処理され、結合ファイルへと付加されていきます。(Live でない場合でも、--play オプションでその挙動を変更できるのではないかと思いますが、よくわかりません。) 保存対象が Live か、Liveでないか、は、Adobe HDS downloader がマニフェストファイルから自動的に判断してくれます。

手順4
Channel4.php ( adobeHDS.php ) を使って保存。
  1. Channel4.php のあるフォルダをカレントにしてコマンドプロンプトウィンドウ(Dos窓)を開きます。
  2. 次のように入力します。
    php Channel4.php "f4murl"
    
    • 緑字部分、f4murlには、手順3で取得した f4murl を記します。
    • PHP の binフォルダにパスが通っているものとして記しています。環境に応じて適宜読み替えてください。
  3. コマンドラインウィンドウ内に、downloading なんとか、とか、ダウンロード開始のメッセージが出れば成功です。
    • Live の場合は、カレントフォルダ内にファイルが作成され、処理されたフラグメントファイルのデータがどんどん付加されていきます(ファイルサイズが大きくなっていきます)。
    • Live でない場合は、フラグメントファイルが次から次へと保存されていきます。すべてのフラグメントファイルのダウンロードが終了したら、各フラグメントの処理・結合がおこなわれます。

Live の場合、カレントフォルダ内に作成された動画ファイル(ダウンロードファイル)のサイズがある程度たまってきたら、これを、例えば、VLC などで開くと、保存しながら動画の再生ができるかもしれません。

Live の保存動画ファイルは、どんどん大きくなってしまいます。たとえば、次のようなパラメータを活用してください。
--duration  Live の録画時間(長さ、秒)を指定できます。
--filesize  指定したファイルサイズ(MB)ごとにファイルを分割して保存していきます。

上記の例では、Channel4.php を介して adobeHDS.php を呼び出していますので、パラメータを操作したい場合は、Channel4.php の
  passthru('php AdobeHDS.php --manifest "' . $url . '"');
のところを書き換えてください。

Live でない場合、 trimIn と trimOut に時刻が指定されていることがあります。比較的大きなサイズの元ファイルがあって、そのファイルの、trimIn から trimOut までのデータを要求して、それを表示する、ということを行っているのだと思います。Adobe HDS Downloader には、--start オプションが用意されていますが、フラグメントの番号で指定するもので、時刻で切り出して保存できるようなパラメータは用意されていません(各フラグメントの長さから、--start を計算することは可能だろうと思います)。特に指定しなければ、Adobe HDS Downloader は、元の大きなファイルを丸ごと保存しようとします。

Channel4 のページで Live でないもの( kind が Rewind と表示されることが多い)は、異なる動画としてページに紹介されているものであっても、元の動画は同じで、同じ動画から、異なる部分を切り出して表示している、という場合が多いので、注意してください。

この記事の内容を実行するに際しては、すべて、ご自身の判断と責任において行うようにしてください。

livedoor プロフィール
カテゴリ別アーカイブ
QRコード
QRコード
  • ライブドアブログ