ストリーミング

インストール: 久しぶりにRED5ストリーミングサーバ 構築

以前のサイトでは、RED5で作るストリーミングサーバの記事が大変人気だったため、このサイトに変えて無くなってしまったため、困っている人が多いようだ。

ということで少し記事を復活させよう。

# 適当なフォルダーつくってRED5ダウンロード
# wget http://red5.org/downloads/red5/1_0/red5-1.0.0-RC2.tar.gz

# tar xvfz red5-1.0.0-RC2.tar.gz

# ls
red5-1.0.0 red5-1.0.0-RC2.tar.gz

# cd red5-1.0.0

ファイルは以下のようになっている
# ls -l
合計 2036
-rw-r–r– 1 root games 409 5月 17 01:36 2012 Makefile
-rw-r–r– 1 root root 36864 7月 25 01:16 2013 admin.h2.db
-rw-r–r– 1 root games 16493 5月 17 01:36 2012 boot.jar
-rw-r–r– 1 root games 1850 5月 17 01:36 2012 build.properties
-rw-r–r– 1 root games 45769 5月 17 01:36 2012 build.xml
drwxr-xr-x 3 root games 4096 7月 14 09:16 2013 conf
drwxr-xr-x 8 root games 4096 5月 17 01:36 2012 doc
drwxr-xr-x 2 root games 4096 5月 17 01:36 2012 lib
-rw-r–r– 1 root games 1284 5月 17 01:36 2012 license.txt
drwxr-xr-x 2 root games 4096 7月 25 01:06 2013 log
drwxr-xr-x 2 root games 4096 5月 17 01:36 2012 plugins
-rw-r–r– 1 root games 168 5月 17 01:37 2012 red5-debug.bat
-rwxr-xr-x 1 root games 220 5月 17 01:37 2012 red5-debug.sh
-rw-r–r– 1 root games 1181 5月 17 01:37 2012 red5-highperf.bat
-rwxr-xr-x 1 root games 417 5月 17 01:37 2012 red5-highperf.sh
-rw-r–r– 1 root games 308 5月 17 01:37 2012 red5-shutdown.bat
-rwxr-xr-x 1 root games 344 5月 17 01:37 2012 red5-shutdown.sh
-rw-r–r– 1 root games 1110 5月 17 01:37 2012 red5.bat
-rw-r–r– 1 root games 963323 5月 17 01:37 2012 red5.jar
-rwxr-xr-x 1 root games 1297 5月 17 01:37 2012 red5.sh
-rw-r–r– 1 root games 930294 5月 17 01:37 2012 src.zip
drwxr-xr-x 8 root games 4096 7月 14 09:20 2013 webapps
drwxr-xr-x 3 root root 4096 7月 14 09:09 2013 work

起動はすごい簡単次のファイルを起動するだけ。
# ./red5.sh &

もし、Javaを導入していなければダウウロードしていれましょう。
http://docs.oracle.com/javase/7/docs/webnotes/install/linux/linux-jdk.html
JDK 7導入方法は省略。

今回は擬似ストリーミングではなくて本物のRTMPプロトコルのストリーミングです。

ストリーミング実現には大きく3種類あり、以下のような感じです。

  • ダウンロード型 (世間一般のWEBサーバに配置するタイプ)
  • 擬似ストリーミング型 (Youtube, GYAO)
  • ストリーミング型 (USTREAM)

違いがわからないと思いますが、ダウンロード型は設備もソフトも特にいらないコンテンツ記述だけでいける方式ですが
閲覧者のブラウザにファイルすべてダウンロードしてから再生するので時間がかかります。またスライダーを動かしても
タイムゲージ(早送り)うごきません。最初から再生して行かないとダメなんです。あと同時にVIDEOダウンロードする人が多いと
サーバがダウンします。精々同時アクセス10人くらいかな。再生はオンデマンドになります。

擬似ストリーミングは、従来のダウンロード型を改善したもので、ダウンロードをちょろちょろ行いながら再生します。スライダー
も動画に予めポジショニングのタグを埋め込むと早送りが可能です。サーバはApache,Lighthttpdなどで行います。これも再生は
オンデマンドになります。同時アクセス20人から50人くらいまでならOK。後はサーバ構築の腕次第でもっといきます。

ストリーミングはリアルタイム録画&再生、オンデマンドをこなす方式です。パケットを逐次ちょろちょろ転送するので沢山の
同時閲覧者をさばく事ができます。100人から500人は余裕かな。

では、次に設定ファイルをいじります。

# vi conf/red5.properties
# RTMP
rtmp.host=192.168.1.150 rtmp.port=1935 <—運用ポートなんでも結構
rtmp.io_threads=16
rtmp.send_buffer_size=271360
rtmp.receive_buffer_size=65536
rtmp.ping_interval=1000
rtmp.max_inactivity=60000
rtmp.max_handshake_time=5000
rtmp.tcp_nodelay=true
rtmp.default_server_bandwidth=10000000
rtmp.default_client_bandwidth=10000000
rtmp.client_bandwidth_limit_type=2
rtmp.bandwidth_detection=true
rtmp.encoder_base_tolerance=5000
rtmp.encoder_drop_live_future=false

VIDEOコンテンツを配置します. flv形式、mp4形式が使えます。
HandBrakeというオープンソースで変換や調整を行ってください。
変換がおわったら、FTP等でアップロードを下記パスへ行います。
# pwd
/opt/red5/red5-1.0.0/webapps/vod/streams
[root@site-wild streams]# ls -la
astro.mp4 street_of_fire.flv street_of_fire.flv.meta

これで準備は整いました。
red5のTOPへ戻り起動します。
# ./red5.sh &

すごい簡単でしょう!

ただね。コンテンツはデリバリー状態に成っているけども、コンテンツの書き方がわからないと提供していないも同然です。
適当なWEBサーバのドキュメントフォルダに再生用のコンテンツを配置して、VIDEOデリバリーできるようにします。

RTMPの再生パスは
このじょうたいでは “rtmp://xxxxxxx.com/vod”と成っています。

JW Playerという有名な無料の埋め込み式Flash Video Playerがあります。これを使います。
このPlayerは擬似ストリーミングとストリーミングの両方に対応しています。
http://www.longtailvideo.com/

以下埋め込みのサンプルコードです。

JW PLAYER (JW Player OLD Player)

<div id="preview" style="float:left;">
Street Of Fire Movie Trailer 1984
</div>

<script type='text/javascript'>
var s1 = new SWFObject('../player-viral.swf','ply','470','320','9','#ffffff');
s1.addParam('allowfullscreen','true');
s1.addParam('allowscriptaccess','always');
s1.addParam('wmode','opaque');
s1.addVariable('id','ply');
s1.addVariable('backcolor','3333FF');
s1.addVariable('lightcolor','00CC00');
s1.addVariable('screencolor','99FFFF');
s1.addVariable('icons','false');
s1.addVariable('dock','true');
s1.addVariable('displayclick','fullscreen');
s1.addVariable('file', 'street_of_fire.flv');
s1.addVariable('streamer', 'rtmp://xxxxxxxx.com/vod');
s1.addVariable('type', 'rtmp');
s1.write('preview');
</script>

JW PLAYER HTML5 fallback flash(JW Player New Player)

<div id='my-video'></div>
<script type='text/javascript'>
    jwplayer('my-video').setup({
        file: 'rtmp://yourserver/vod/spygame.mp4',
        width: '470',
        height: '320'
    });
</script>

fladance player

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="470" height="320" id="ASTRO BOY">
	<param name="flashvars" value="fms_app=rtmp://xxxxxxxx.com/vod/&video_file=michael_say.flv&image_file=&link_url=&autoplay=false&mute=false&vol=&controllbar=true&buffertime=10" />
	<param name="allowfullscreen" value="true" />
	<param name="movie" value="./fladance.swf" />
	<embed src="./fladance.swf" width="470" height="320" name="ASTRO BOY" allowfullscreen="true" flashvars="fms_app=rtmp://html5.spazo.jp/vod/&video_file=michael_say.flv&image_file=&link_url=&autoplay=false&mute=false&vol=&controllbar=true&buffertime=10" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>