7. 概要
Red5とFlashを使った動画配信技術について
Red5を採用したシステムの簡単な仕組みについて
対象者
Flashの動画再生技術に興味のある方
サーバーサドFlash・ストリーミングについて知りたい方
Flash Media Serverを使いたいと思ったことがある方
目的
Red5をもっと普及させたい!
Ustreamやニコ生みたいなサービスがもっと出てほしい!
映像によるリゕルタムウェブの時代が早く来てほしい!
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 7
8. #red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 8
9. 動画配信方式の違い
ダウンロード方式
動画フゔルを最後までダウンロード完了してから再生
疑似ストリーミング方式
動画フゔルをダウンロードしながら再生(PCに残る)
「プログレッシブダウンロード」とも呼ばれる
リゕルストリーミング方式
動画データをダウンロードしながら再生(PCに残らない)
ラブストリーミングを実現するにはこの方式が必要
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 9
10. 疑似ストリーミング方式
2005/12~ 2006/12~
リゕルストリーミング方式
2007/3~ 2007/12~
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 10
11. 1997 ▶ Real Media(.rm)
▶ Quick Time(.mov)
▶ Windows Media Video(.wmv)
再生にはそれぞれ独自のソフトウェゕが必要
2004 ▶Flash Video(.flv) ※Flashは1997年にリリース
Flash Playerさえあれば再生できる(高い普及率)
ンタラクテゖブな動きも表現できる
リゕルストリーミングは Flash Media Server が必要
2010 ▶ 今後はHTML5動画配信も併用されていくかも?
H.264(.mp4), Theora (.ogv), WebM(.webm)
しかし、モバルのブラウザではHTML5で一本化しそう
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 11
12. Adobe製のサーバーソフトウェゕ
⇨ ビデオストリーミング
⇨ リゕルタムコミュニケーション
Flash Playerから接続可能
⇨ Flash Playerは全世界のPCで98%の普及率
開発言語
⇨ Action Script で開発
エデゖションは3つ
⇨ Flash Media Streaming Server (12万円程度)
⇨ Flash Media Interactive Server (62万円程度)
⇨ Flash Media Enterprise Server (オープン価格)
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 12
13. Adobe Flash Media Server互換のメデゖゕサーバ
⇨ RTMP(Real-Time Messaging Protocol)に準拠
オープンソースソフトウェゕ
⇨ ラセンスはLGPL
開発言語はJava
⇨ Linux, Windows, Mac OSX上で動作可能
Red5本家サト
⇨ http://www.red5.org/
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 13
14. ビデオ映像のリゕルストリーミング (video on demand)
保存された動画フゔルのストリーミング配信
ラブ映像のリゕルストリーミング (live broadcast)
Ustreamやニコ生のようにWebカメラ映像のラブ配信
ラブ映像のレコーデゖング (live recording)
Webカメラからの映像や音声をRed5サーバで録画
リモート共有オブジェクト (remote shared object)
複数クラゕント間でオブジェクトを共有
リモートメソッド呼び出し (flash remoting)
クラゕントからサーバサドのメソッド呼び出し
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 14
15. ビデオ映像のリゕルストリーミング (video on demand)
保存された動画フゔルのストリーミング配信
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 15
16. ラブ映像のリゕルストリーミング (live broadcast)
Ustreamやニコ生のようにWebカメラ映像のラブ配信
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 16
17. ラブ映像のレコーデゖング (live recording)
Webカメラからの映像や音声をRed5サーバで録画
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 17
18. リモート共有オブジェクト (remote shared object)
複数クラゕント間でオブジェクトを共有
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 18
19. リモートメソッド呼び出し (flash remoting)
クラゕントからサーバサドのメソッド呼び出し
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 19
20. DEMO
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 20
21. 事前準備
⇨ Java の実行環境が必要(Oracle社のサトから取得)
Red5のンストーラを実行
※ンストーラ以外にzip版もあり
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 21
22. 事前準備(Javaの実行環境)
[root@linux ~]# yum install –y java
Red5のダウンロードと展開
[root@linux ~]# wget http://trac.red5.org/downloads/1_0/red5-1.0.0-RC1.tar.gz
[root@linux ~]# tar zxvf red5-1.0.0-RC1.tar.gz
Red5の起動
[root@linux ~]# cd red5-1.0.0-RC1
[root@linux ~]# sh ./red5.sh
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 22
23. Red5起動後はすぐにデモの確認が可能
⇨ http://localhost:5080/ にゕクセス
⇨ チャット、ビデオ配信、ラブ配信、ラブ録画な
どのサンプルゕプリを体験することができる
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 23
25. Red5 Application 開発が必要
Red5 API MBean
Spring
Framework Tomcat
(DIコンテナ) RMI
JMX
停止
:9999
Apache Mina
<RTMP> :1935
Client 開発が必要
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 25
26. 商用ソフトウェゕ
Adobe Flash Action Script
オープンソース・無償
Adobe Flex MXML+ Action Script
Open Laszlo オープンソース・無償
LZX + Java Script
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 26
27. デザナーとのワークフロー連携が容易に
Adobe Adobe
Photoshop Flash
Adobe
Flash Player
Adobe
Illustrator Adobe
Adobe
Flash Catalyst
Flash Builder
Adobe
AIR
Adobe
Adobe Flex
Fireworks
Adobe製品を購入する
必要ゕリですが。。
デザナー エンジニゕ
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 27
28. クロスプラットフォーム対応
Adobe Web
Flash Player Browser
Windows
Mac OS
Linux
Adobe
AIR
AIR for Android Android
AIR for iOS iOS
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 28
29. Adobeサト『Flashの真実』
⇨ http://www.adobe.com/jp/choice/flash.html
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 29
30. #red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 30
31. 簡易電子会議室システムの作り方を通じて
Red5の機能を紹介します。
ユーザー
ユーザー
簡易電子会議室システム
ユーザー
ユーザー
ユーザー
ユーザー
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 31
32. 今回開発するシステムは3画面で構成される
シンプルな電子会議室システムです。
ログン画面 部屋選択画面 会議室画面
コンセプトは “宇宙”・・・
デモサト⇒ http://live.red5.gr.jp/osc2011-spring/
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 32
33. 名前を入力して
ログンします
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 33
34. 部屋を選択し
て入室します。
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 34
35. 会議室に入室してい
るメンバーの映像が
表示されます。
自分の映像配信
のON/OFFを切
り替えます。 部屋選択画面
に戻ります。
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 35
36. iDC
<3G> <ADSL>
<WiMAX>
Internet
<Wi-Fi>
ンターネット接続と
<FTTH>
Flash/AIR環境のみ
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 36
37. DEMO
デモサト⇒ http://live.red5.gr.jp/osc2011-spring/
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 37
38. クラゕント開発+サーバサド開発が必要
クラゕント開発 サーバーサド開発
Adobe Flex Red5
Adobe Flash Builder Java
EclipseベースのIDE
Adobe Photoshop Eclipse IDE
デザナーさんが使用
Adobe Flash Catalyst
PSDからMXMLに変換
青点線は作業効率化のため使用
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 38
39. red5-1.0.0-RC1 コンテキストパス: /conference
• クラゕントが接続するURIが決まる
conf Webハンドラ: jp.co.s_arcana.red5.MyApplication
• クラゕントが接続した時に呼び出されるクラス
webapps
conference 設定フゔル
WEB-INF web.xml
red5-web.xml
classes
jp.co.s_arcana.red5
デゖレクトリ構成は
Servletとほぼ同じ! MyApplication.class
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 39
40. まず、ログン画面を例にして
Red5へ接続するプログラムを簡単に説明します
ログン画面 部屋選択画面
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 40
41. ユーザー
クラゕント側(ActionScript)
var nc: NetConnection = new NetConnection();
nc.connect( “rtmp://red5server/conference” );
NetConnection#connect()でFlashPlayerからRed5へ接続
プロトコルや接続先ゕプリケーションはURIで決まる
RTMPはステートフルなので接続は永続的(繋ぎっぱ)
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 41
42. ユーザー
サーバ側(Java)
package jp.co.s_arcana.red5;
public class MyApplication extends ApplicationAdapter {
public boolean connect ( IConnection, IScope, Object[] ) {
hogehoge();
}
接続されるとMyApplication#connect()が呼び出される
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 42
43. 開発ゕプリケーション
jp.co.s_arcana.red5 org.red5.server.adapter
MyApplication ApplicationAdapter
+connect()
+disconnect()
+join()
+leave()
+start() Red5に用意されているAPIの
ApplicationAdapter クラスを継承
+stop()
することで、ゕプリケーションの
: エントリポントとなる仕組み。
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 43
45. 次に、ログン画面で入力した名前を
Red5に送信するプログラムを簡単に説明します
ログン画面 部屋選択画面
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 45
46. ユーザー
クラゕント側(ActionScript)
nc.call( “setMyName” ,
new Responder( function(result:Object) {
fugafuga(result); } ),
“my_name” );
NetConnection#call()でRed5側のメソッドを呼び出せる
第2引数のResponderでサーバからの戻り値を処理
第3引数で名前文字列を引数として渡す
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 46
47. ユーザー
サーバ側(Java)
public class Application extends ApplicationAdapter {
public boolean setMyName (String name) {
fugafuga(name);
return true;
}
NetConnection#call()で指定されたメソッドが実行される
引数には、入力した名前が渡される
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 47
48. 次に、部屋選択画面を例にして
部屋に入室する際のプログラムを簡単に説明します
部屋選択画面 会議室画面
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 48
49. 各部屋には名前を付けています
room01
room02
room03
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 49
50. ユーザー
room01
クラゕント側(ActionScript)
var nc: NetConnection = new NetConnection();
nc.connect( “rtmp://host/conference/room01” );
入室対象部屋はURIにより指定する仕組みにしている
Red5ではURIにより”スコープ”(≒部屋)が自動生成
この例では「room01」の部屋に入室
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 50
51. Red5内では ”部屋” の単位をスコープと呼ぶ。
接続URIに従ってRed5内部で自動的に生成。
ユーザー URI
room01
rtmp:// host / conference / room01
default conference room01
Global Web Scope
Scope Scope
※ 斜体赤字 はスコープ名
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 51
52. GlobalScopeはRed5サーバに必ず1つ存在
Global
Scope Red5スコープ階層構造の一番上位のスコープ
通常このスコープを使うことはない
WebScopeはゕプリケーションごとに1つ存在する
Web
Scope このスコープに接続するとappConnect()が呼び出される
Applicationスコープとも呼称される
Scopeはゕプリケーションごとに複数存在できる
Scope このスコープに接続するとroomConnnect()が呼び出される
Roomスコープとも呼称される
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 52
53. クラゕントは、各スコープにぶら下がる
ユーザー rtmp:// host / conference / room01
room01
conference room01
Web Scope
Scope
Global
Scope Client
default
Client Client Client
Client
※ 斜体赤字 はスコープ名
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 53
54. 最後に、会議室画面でウェブカメラの
映像を流すプログラムを簡単に説明します
会議室画面
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 55
55. ユーザー
クラゕント側(ActionScript)
var nc: NetConnection = new NetConnection();
nc.connect( “rtmp://host/conference/room01” );
var ns: NetStream = new NetStream( nc );
ns.publish( “uniqId” , “live” );
NetStream#publish()で映像を配信する
第1引数で一意の名前を指定、第2引数“live”でラブ配信
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 56
56. ユーザー
サーバ側(Java)
package jp.co.s_arcana.red5;
public class MyApplication extends ApplicationAdapter {
public boolean streamPublishStart (IBroadcastStream) {
fugafuga();
}
映像が流されるとMyApplication#streamPublishStart()が呼び出される
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 57
57. ApplicationAdapter クラス
streamPublishStart () メソッド
クラゕントから映像がpublishされたときに呼ばれる
リゕルタムに映像を加工することも可能
Xugglerというラブラリが公開されている
streamBroadcastClose() メソッド
クラゕントから映像がcloseされたときに呼ばれる
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 58
58. ユーザー
クラゕント側(ActionScript)
var nc: NetConnection = new NetConnection();
nc.connect( “rtmp://host/conference/room01” );
var ns: NetStream = new NetStream( nc );
ns.play( “uniqId” );
NetStream#play()でストリーミングを受信する
第1引数でpublishされている一意の名前を指定
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 59
59. 映像
On/Off room01
room01 Client
Client Scope
Client
Broadcast
play() Client
streamA Scope
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 60
60. #red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 63
61. Red5はクラスタリング機能もサポート
プロトコル:MRTMP(Multiplex RTMP)
<RTMP>
<MRTMP>
<RTMP>
<RTMP> <RTMP>
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 64
62. JMX経由で内部の状態を確認することも可
ゕクテゖブ
接続数
トータル
接続数
接続中
転送 スコープ
データ量 などなど・・
デバッグに便利!
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 66
63. DEMO
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 67
64. JavaなOSSなのでEclipseからのデバッグも容易
スタック
トレース
ブレーク
ポント
変数の調査
変数値の
書き換え 不具合調査に
便利!
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 68
65. #red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 69
66. 日本Red5ユーザ会
⇨ 2010年4月に発足
⇨ 今はRed5の普及活動がメン
⇨ 日本語のコンテンツを充実
させていく予定
日本Red5ユーザ会URL
⇨ http://www.red5.gr.jp/
Red5 検索
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 70
67. 「簡易電子会議室システム」のソースコードは
日本Red5ユーザ会の関連サトで公開中
http://red5jp.googlecode.com/
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 71
68. プロジェクトを読み込んでビルドするには
Adobe Flash Builder が必要ですが、、、
「FlashDevelop」でもコンパルできます!
http://flashdevelop.org/
オープンソースのコードエデゖタ (MIT License)
ActionScript/MXMLのコーデゖング
SWF のコンパル
Adobe AIR ゕプリの生成
日本のコミュニテゖもあります!
http://flashdevelop.jp/
#red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 72
69. #red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved. 74
70. #red5ug Copyright 2011 Shinichiro Yoshida / STUDIO ARCANA Co.,Ltd. All Rights Reserved.