debian lennyを動画再生サーバにする

■最後のおまけにもありますが、
 基本的に、動画再生用のスクリプトはWebサーバに依存しません。
 必要なのはおおまかに以下の手順です。

 ・サーバ側に「JW Player」や「flaver3」のようなswf形式のプレイヤーをWebサーバに設置
 ・動画や画像ファイルの配置、指定ファイルの修正
 ・オプションのjs形式のswf形式ファイルの埋め込み
 ・クライアント側の「flashplayer」やプラグインの導入

■動画再生サーバについて

 参考:DTV - FLV動画再生の道
 http://ex.b-area.org/Misc/MM/play_flv_movie.html

■FLAVER 3.0

 参考:FLAVER 3.0ダウンロード
 http://rexef.com/webtool/flaver3/download.html

 参考:FLAVER 3.0設定方法
 http://rexef.com/webtool/flaver3/installation.html

■debian lennyにapache2の導入
 ※本来はユーザ用のディレクトリを作成、作業しますが、
  説明を省略する為、デフォルト設定のまま進めます。

$ sudo apt-get install apache2 zip
$ unzip flaver3.zip
$ sudo mv flaver3 /var/www

■w3mによるブラウザアクセスチェック

$ find /var/www | \
   for list in `xargs`;do \
     FILE=$(echo "$list" | sed s%/var/www%%); \
     echo -en "${FILE}\t:"; \
     w3m -no-proxy -dump_head http://`hostname -f`${FILE} | head -1; \
   done
        :HTTP/1.1 200 OK
/index.html     :HTTP/1.1 200 OK
/flaver3        :HTTP/1.1 200 OK
/flaver3/readme.txt     :HTTP/1.1 200 OK
/flaver3/flaver.xml     :HTTP/1.1 200 OK
/flaver3/flaver.swf     :HTTP/1.1 200 OK

■「playlistA」の作成とplaylistの生成

$ sudo mkdir /var/www/playlistA
$ sudo cp -p /var/www/flaver3/flaver.xml /var/www/playlistA/

$ w3m -no-proxy -dump_head http://`hostname -f`/playlistA/flaver.xml
HTTP/1.1 200 OK
Date: Sat, 07 Jan 2012 15:25:13 GMT
Server: Apache/2.2.9 (Debian)
Last-Modified: Sat, 07 Jan 2012 15:15:33 GMT
ETag: "f0594-f1f-4b5f1a2fbcf40"
Accept-Ranges: bytes
Content-Length: 3871
Connection: close
Content-Type: application/xml

■以下のようになります。

$ sudo diff /var/www/flaver3/flaver.xml /var/www/playlistA/flaver.xml
6c6
<     <title></title>               <!-- タイトル -->
---
>     <title>playlistA</title>               <!-- タイトル -->
67,68c67,68
<     <file></file>       <!-- 動画・音楽ファイルパス (必須) -->
<     <image></image>     <!-- 画像・サムネイルパス -->
---
>     <file>/movie/video.flv</file>       <!-- 動画・音楽ファイルパス (必須) -->
>     <image>/movie/video.jpg</image>     <!-- 画像・サムネイルパス -->
78c78
< </flaver>
\ ファイル末尾に改行がありません
---
> </flaver>

■video.jpgとvideo.flvのチェック

$ w3m -no-proxy -dump_head http://`hostname -f`/movie/video.jpg | head -1
HTTP/1.1 200 OK

$ w3m -no-proxy -dump_head http://`hostname -f`/movie/video.flv | head -1
HTTP/1.1 200 OK

■webページの読み込みの設定
# echo '
<html><head>
<title>playlistA</title>

<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8">
</head>
<body>
<div align="center">
<table border="0">
<tr><td>

' > /var/www/playlist_a.html
# echo '
<object data="/flaver3/flaver.swf"
  type="application/x-shockwave-flash" width="640" height="480">
<param name="movie" value="/flaver3/flaver.swf" />
<param name="FlashVars" value="xml=/playlistA/flaver.xml" />
<param name="allowFullScreen" value="true" />
<param name="allowScriptAccess" value="always" />
</object>
' >> /var/www/playlist_a.html
# echo '
</td></tr>
</table>
</div>
</body>
</html>
' >> /var/www/playlist_a.html
■配置したプレイリストの確認

$ wget --no-proxy http://`hostname -f`/playlist_a.html
$ cat playlist_a.html

<html><head>
<title>playlistA</title>
<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8">
</head>
<body>
<div align="center">
<table border="0">
<tr><td>

<object data="/flaver3/flaver.swf"
  type="application/x-shockwave-flash" width="640" height="480">
<param name="movie" value="/flaver3/flaver.swf" />
<param name="FlashVars" value="xml=/playlistA/flaver.xml" />
<param name="allowFullScreen" value="true" />
<param name="allowScriptAccess" value="always" />
</object>

</td></tr>
</table>
</div>
</body>
</html>

■ffmpegの導入
 ※荒っぽいが、outputが無いエラーと共にフォーマットを出力してくれるのを利用する。
  ひとまず、動画本体よりもプレイヤーの指定サイズの方が大きい事が分かれば良しとします。

$ sudo apt-get install ffmpeg ffmpeg-doc
$ sudo ffmpeg -i /var/www/movie/video.flv 2>&1 | \
   grep "Duration\|Stream" | sed s/","/"\n"/g
  Duration: 00:00:06.2
 start: 0.000000
 bitrate: 64 kb/s
    Stream #0.0: Video: vp6f
 yuv420p
 200x110 [PAR 0:1 DAR 0:1]
 24.00 tb(r)
    Stream #0.1: Audio: mp3
 44100 Hz
 mono
 64 kb/s

$ sudo ffmpeg -i /var/www/movie/video.jpg 2>&1 | \
   grep "Duration\|Stream" | sed s/","/"\n"/g
  Duration: 00:00:00.0
 start: 0.000000
 bitrate: N/A
    Stream #0.0: Video: mjpeg
 yuvj420p
 352x256 [PAR 1:1 DAR 11:8]
 25.00 tb(r)

 参考:Multimedia
 http://www.labunix.net/multimedia/flv.html

■swfobject版
 ※最新版はVer1.5だがリンク切れ

 参考:SWFObject: Javascript Flash Player detection and embed script
 http://blog.deconcept.com/swfobject/

■私のページから取得する

$ wget http://www.labunix.net/multimedia/swfobject.js

■シングルクォーテーションがあるので、ソースだけ示します。
 ※テストなので、「playlist_a.html」に追加します。

<script type="text/javascript" src="swfobject.js"></script>
<div id="playlistA">Display from flaver 3.0 with swfobject 1.5</div>
<script type='text/javascript'>
var list1 = new SWFObject('/flaver3/flaver.swf','flaver','640','480','9');
list1.addParam('flashvars','xml=/playlistA/flaver.xml&file=/movie/video.flv');
list1.addParam('allowfullscreen','true');
list1.addParam('allowScriptAccess','always');
list1.write('playlistA');
</script>

■一応整える。
 改行で区切る、「&nbsp;」を使う、
 ※ダミーで空の「main.css」を作成するなどすると、
 以下のようになります。

$ wget --no-proxy http://`hostname -f`/playlist_a.html
$ cat playlist_a.html.1

<html><head>
<meta http-equiv="content-style-type" content="text/css">
<link href="./main.css" rel="stylesheet" type="text/css">
<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8">
</head>
<body>
<div align="center">
<table border="0">
<tr><td>

<br/>&nbsp;<br/>&nbsp;<br/>

<object data="/flaver3/flaver.swf"
  type="application/x-shockwave-flash" width="640" height="480">
<param name="movie" value="/flaver3/flaver.swf" />
<param name="FlashVars" value="xml=/playlistA/flaver.xml" />
<param name="allowFullScreen" value="true" />
<param name="allowScriptAccess" value="always" />
</object>

</td><td>

<br/>&nbsp;<br/>&nbsp;<br/>
<script type="text/javascript" src="swfobject.js"></script>
<div id="playlistA">Display from flaver 3.0 with swfobject 1.5</div>
<script type='text/javascript'>
var list1 = new SWFObject('/flaver3/flaver.swf','flaver','640','480','9');
list1.addParam('flashvars','xml=/playlistA/flaver.xml&file=/movie/video.flv');
list1.addParam('allowfullscreen','true');
list1.addParam('allowScriptAccess','always');
list1.write('playlistA');
</script>



</td></tr>
</table>
</div>
</body>
</html>

■おまけ

コメントを入れなかったので、不明なWebサーバと、バージョン不明の「JW Player」が私のページにはあります。
CERNのwebcastは「IIS」と「JW Player」でたまたま構成がほぼ同じでした。
以下その事を知った経緯について。

■神の粒子(ヒッグス)についてのCERNの発表

 簡単に言うと、ある程度実験条件に制約はあるものの、
 CERNによる複数の実験結果から、
 ヒッグスの存在する可能性がある領域がほぼ特定された事により、
 発見に至る可能性が高まったということでした。

 「発見」ではなく、「発見に至る可能性」というところが
 文章を複雑に書く必要がある理由です。
 詳しくは以下を参照して下さい。
 
 参考:Bosonul Higgs, descoperit la CERN? (Video)
 http://www.ziare.com/magazin/cercetare/bosonul-higgs-descoperit-la-cern-video-1138012

 参考:ヒッグス粒子、発見の可能性高まる 国際2グループ、来年に結論
 http://sankei.jp.msn.com/science/news/111213/scn11121323300001-n1.htm

 参考:「ヒッグス粒子探索に大きな進展」CERN統一見解(全文、邦訳)
 http://sankei.jp.msn.com/science/news/111214/scn11121400270000-n1.htm

■CERNのwebcastサーバ

 当日はイケてないWebサーバでカクカクの映像を見せられるか、
 そもそも繋がらなかった人も多かったのではないでしょうか。
 見れても訛りのある英語のリスニングが大変だったり。。。

 私もその一人で、同サイトの別IP探したりしていましたが、
 結局IIS7.5とJWPLAYER5.8の組み合わせで、
 冗長性も見つからなかった為、諦めて寝ました。。。

 参考:Download JW Player
 http://www.longtailvideo.com/players/jw-flv-player/

 ※通常は自身のサーバのみ行うべきですが、
  当日は接続すらままならなかった為、telnetで以下のようにしていました。

  ・ヘッダを見たいだけなので「index.html」は存在しなくてもかまいません。
  ・上記から「HEAD」では無く「GET」です。
  ・「User-Agent:」や「Host:」を省略して空Enterで生HTMLを得ます。
  ・「400 Bad Request」エラーページが返りますので、トラブルシュート時のみ。

$ telnet ${IPADDRESS} 80
GET index.html HTTP/1.0
[Enter]

 参考:telnetでブラウズ(HTTP)
 http://ash.jp/net/telnet_http.htm

■普通に繋がるときには、w3mの「-dump_head」オプションがあります。

$ w3m -dump_head http://webcast.web.cern.ch/webcast
HTTP/1.0 200 OK
Content-Type: text/html
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Sat, 07 Jan 2012 10:00:00 GMT
Content-Length: 7648
X-Cache: MISS from debian-lenny
X-Cache-Lookup: MISS from debian-lenny:3128
Via: 1.1 debian-lenny:3128 (squid/2.7.STABLE3)
Connection: close

■CERNの構成がIIS7.5とJWPLAYER5.8

 前置きが長くなりましたが、普通にアクセスし、
 HTMLソースを見ればすぐ分かります。

 参考:Webcast
 http://webcast.web.cern.ch/webcast/

■JW PlayerとFlashプラグインがあれば動きます。
 ※ページの名前がもう何と言うか。。。w
 
$ iceweasel http://webcast.web.cern.ch/webcast/test_channel.py &

■debianにflashplayerを導入するのは以下を参考。
 2つ目は「関連記事」に色々あります。

 参考:Debian Lenny に最新の Adobe Flash Player プラグインを入れる方法
 http://d.hatena.ne.jp/sakurako_s/20101010/1286676729

 参考:DebianのEpiphanyでFlashをインストールする方法・コマンド
 http://www.miuxmiu.com/archives/2011/06/06/debian_epiphany_flash_install_command.html

■JW Playerは私の過去ページでも使っていました。
 swfobject1.5、JWPlayerは4(のはず。。。w)

 参考:Multimedia
 http://www.labunix.net/multimedia/index.html

 参考:SWFObjectのドキュメントを日本語に翻訳してみたよ
 http://www.trick7.com/blog/2006/06/15-135235.php

■私のページにアクセスし、ブラウザがFlashに対応していない場合は
 Adobeのページにジャンプします。(ポップアップブロックされます)
 ※IE5以前にも対応(要る?)Mozilla=Linux、IE=Windowsという甘い判定をしています。

■私のページでは、サーバ情報は出ません。

$ w3m -dump_head http://www.labunix.net
HTTP/1.0 200 OK
Date: Sat, 07 Jan 2012 13:29:18 GMT
Last-Modified: Sat, 07 Jan 2012 13:29:18 GMT
Accept-Ranges: bytes
Expires: Fri, 06 Jan 2012 13:29:18 GMT
Pragma: no-cache
Vary: Accept-Encoding
Content-Type: text/html
Content-Encoding: gzip
Cache-Control: private
Content-Length: 26
X-Cache: MISS from debian-lenny
X-Cache-Lookup: MISS from debian-lenny:3128
Via: 1.1 debian-lenny:3128 (squid/2.7.STABLE3)
Connection: close