Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

kitasando.as_20081206_wowza_media_server

on

  • 3,018 views

 

Statistics

Views

Total Views
3,018
Views on SlideShare
1,010
Embed Views
2,008

Actions

Likes
2
Downloads
6
Comments
0

11 Embeds 2,008

http://blog.katsuma.tv 1925
http://webcache.googleusercontent.com 38
http://coderwall.com 34
http://72.14.235.132 4
http://translate.googleusercontent.com 1
http://74.125.153.132 1
http://74.125.159.132 1
http://209.85.175.132 1
http://74.125.45.132 1
http://192.168.1.132 1
https://www.linkedin.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

kitasando.as_20081206_wowza_media_server Presentation Transcript

  • 1. Wowza Media Server ことはじめ ∼meeting24.tvの裏側∼ Kitasando.as #002 ryo_katsuma
  • 2. 自己紹介
  • 3. 自己紹介• ryo_katsuma
  • 4. 自己紹介• ryo_katsuma• (流行りの)勝間和代さんの勝間です
  • 5. 自己紹介• ryo_katsuma• (流行りの)勝間和代さんの勝間です• blog.katsuma.tv
  • 6. Tokyo-Jogging• バランスWiiボード + Google Street View ‣ Gizmodo ‣ CrunchGear ‣ TechRadar http://www.tokyo-jogging.com/
  • 7. 普段• ウタゴエ株式会社• 恵比寿で働くWeb屋‣ JavaScript, ActionScipt, Java, PHP
  • 8. 今日の発表内容• meeting24.tv• Wowza Media Server ‣ 導入 ‣ 開発 ‣ チューニング ‣ 監視
  • 9. meeting24.tv
  • 10. meeting24.tv• お手軽Webミーティングシステム• インストール不要• 参加者はID登録不要• 利用は無料• URLクリックで即開始
  • 11. 裏側• LAMP ‣ Fedora9, MySQL5, CakePHP1.2• memcached• Flex3• Wowza Media Server• Zabbix
  • 12. Wowza Media Server - 導入 -
  • 13. Wowza Media Server• Wowza Media Systems• 開発者は元macromediaの人• Javaで書かれたFMSクローン ‣ Kamaitachi, RubyIZUMI, Red5• JREが動く環境であれば何のOSでもOK
  • 14. 機能(1)• Live Encoder ‣ RTP, RTSP, MPEG-TS• RTMP系全プロトコル ‣ RTMP, RTMPT, RTMPS, RTMPE, RTMPTE• メディアファイル ‣ FLV, H.264, mp3, HE-AAC
  • 15. 機能(2)• 本家FMSとも引けをとらない‣ 新機能がFMSに加わったら基本的に実装される• 本家に無い機能の実装も多い‣ MPEG-TS‣ 64-bit OS
  • 16. 価格5,0003,7502,5001,250 0 Wowza FMIS
  • 17. Wowza ++
  • 18. 新規アプリケーションの設置
  • 19. Applicationvar nc:NetConnection;nc = new NetConnection();nc.connect("rtmp://server/meeting/instance"); サーバアドレス アプリケーション インスタンス名
  • 20. meetingアプリ
  • 21. meetingアプリ1. {$wowza}/applications/meeting
  • 22. meetingアプリ1. {$wowza}/applications/meeting2. {$wowza}/conf/meeting
  • 23. meetingアプリ1. {$wowza}/applications/meeting2. {$wowza}/conf/meeting3. {$wowza}/conf/Application.xmlをコピー
  • 24. meetingアプリ1. {$wowza}/applications/meeting2. {$wowza}/conf/meeting3. {$wowza}/conf/Application.xmlをコピー4. StreamTypeを設定する
  • 25. meetingアプリ1. {$wowza}/applications/meeting2. {$wowza}/conf/meeting3. {$wowza}/conf/Application.xmlをコピー4. StreamTypeを設定する5. 再起動
  • 26. StreamType• Applicationがどのような性質のものか ‣ 適切なものを設定しないとうまく動かない - record, live, live-lowlatency, chat, live-record, live-record-lowlatency, file, liverepeater-origin, liverepeater-edge, ... - {$Wowza}/conf/Streams.xml
  • 27. License• ライセンスキーを取得 ‣ 初回起動時に入力 ‣ {$Wowza}/conf/Server.license• 無料版 ‣ 同時接続数が10まで ‣ とりあえず試してみる+開発用
  • 28. Wowza Media Server - 開発 -
  • 29. Why?• サーバロジックは無くてもよい• ロジックを書くことで細かな制御が可能‣ DBと連携‣ 動的にユーザの接続をaccept/reject‣ ログ
  • 30. Wowza IDE• Eclipse ベースのIDE ‣ Windows, MacOSX 版• ローカルのWMSと連携• ビルド、デプロイ、再起動まで1クリック ‣ かなり便利!! ><
  • 31. 開発の流れ
  • 32. 開発の流れ1. Application.xmlにMainのクラスを指定
  • 33. 開発の流れ1. Application.xmlにMainのクラスを指定2. コードを書く
  • 34. 開発の流れ1. Application.xmlにMainのクラスを指定2. コードを書く3. jarファイルを作成
  • 35. 開発の流れ1. Application.xmlにMainのクラスを指定2. コードを書く3. jarファイルを作成4. {$Wowza}/lib/ に設置
  • 36. 開発の流れ1. Application.xmlにMainのクラスを指定2. コードを書く3. jarファイルを作成4. {$Wowza}/lib/ に設置5. WMSを再起動
  • 37. 開発の流れ1. Application.xmlにMainのクラスを指定2. コードを書く3. jarファイルを作成4. {$Wowza}/lib/ に設置5. WMSを再起動 ‣ 3 ∼ 5はIDEで全部できる
  • 38. <Modules> <Module> <Name>base</Name> <Description>Base</Description> <Class>com.wowza.wms.module.ModuleCore</Class> </Module> <Module> <Name>properties</Name> <Description>Properties</Description> <Class>com.wowza.wms.module.ModuleProperties</Class> </Module> ......... <Module> <Name>Meeting24</Name> <Description>Meeting24 application</Description> <Class>com.utagoe.live.Meeting24</Class> </Module></Modules>
  • 39. <Modules> <Module> <Name>base</Name> <Description>Base</Description> <Class>com.wowza.wms.module.ModuleCore</Class> </Module> <Module> <Name>properties</Name> <Description>Properties</Description> <Class>com.wowza.wms.module.ModuleProperties</Class> </Module> ......... <Module> <Name>Meeting24</Name> <Description>Meeting24 application</Description> <Class>com.utagoe.live.Meeting24</Class> </Module></Modules> lib/meeting24.jar
  • 40. Code• イベントドリブン‣ onAppStart, onAppStop‣ onConnect, onDisconnect, onConnectAccept, onConnectReject‣ onStreamCreate, onStreamDestroy - 複雑な処理のフローは考えなくてよい• IDEがスケルトンクラスを作ってくれる
  • 41. package com.utagoe.meeting;import com.wowza.wms.module.*;import com.wowza.wms.client.*;import com.wowza.wms.amf.*;import com.wowza.wms.request.*;public class Meeting24 extends ModuleBase{ public void onAppStart(IApplicationInstance appInstance) { getLogger().info(“onAppStart”); } public void onConnect(IClient client, RequestFunction func, AMFDataList params) { getLogger().info(“onConnect”); } ....}
  • 42. DB接続 / 初期化• onAppStart ‣ DB接続 - ActiveObjectsは楽 - CakePHP, Rails との相性が良い ‣ 各パラメータ設定 - 接続制限数
  • 43. import java.net.ao.EntityManager;private static final int MAX_USER_NUM = 24;private EntityManager entityManager;....public void onAppStart(IApplicationInstance appInstance){ getLogger().info(“onAppStart”); EntityManager manager = new EntityManager( "jdbc:mysql://" + db_host + "/" + db_database, db_login, db_password); Meetings[] meetings = manager.find(Meetings.class, Query.select().where( "session = ?", appInstance.getName() ) );}
  • 44. Accept / Reject• onConnect• IClient#rejectConnection() ‣ 接続数制限時などにcall
  • 45. 接続時の引数• NetConnection#connect時の引数取得 ‣ nc.connect(server, param1, param2)• getParamType(params, PARAMn) ‣ getParamString(params, PARAM1) ‣ getParamInt(params, PARAM2)
  • 46. public void onConnect(IClient client, RequestFunction func, AMFDataList params){ getLogger().info(“onConnect”); // nc.connect(server, id, name) int id = getParamInt(params, PARAM1); String name = getParamString(params, PARAM2); int num = Server.getInstance().getConnectionCounter().getCurrent(); if(num >= MAX_USER_NUM){ client.rejectConnection(); return; }}
  • 47. Wowza Media Server - チューニング -
  • 48. Memory• メモリは(経験的に)多く積んだ方がいい‣ Heap size - {$wowza}/bin/setenv.sh - JAVA_OPTS="-server -Xmx768M"‣ 同時接続数が増えてくるとヒープエラーで落ちる
  • 49. Buffer• 送信バッファは多すぎない方がいい ‣ メモリを食いつぶす要因 ‣ 少なすぎるとストリーミングが途切れやすい(!)• {$wowza}/conf/VHost.xml ‣ <SendBufferSize>65000</SendBufferSize>
  • 50. 厄介(な疑い)なクライアント• 帯域が狭いユーザ(?) ‣ Emobile• 長時間何もせずに放置しているユーザ(?) ‣ サーバ側でメモリを必要以上に消費• このあたりのチューニングは難しい ‣ 情報求めています!><
  • 51. Wowza Media Server - 監視 -
  • 52. サーバマシン• Zabbix ‣ CPU idle time ‣ Free Memory• インストールされたAgentを定期的に監視• ある閾値を下回る状態 ‣ メール通知 + 強制リスタート
  • 53. 大雑把に監視• Zabbixのログを利用 ‣ memcacheに有効期限付きキャッシュ• 混雑度を3段階くらいに大雑把に判定• ページフッタに記述
  • 54. アプリケーション• JMX (Java Management Extentions)• アプリケーション/インスタンス毎 ‣ 接続数 ‣ 起動スレッド、クラス数 ‣ リモート操作• トリガを指定してアプリケーション起動?
  • 55. Server.xml<JMXRemoteConfiguration> <Enable>true</Enable> <IpAddress>192.168.1.10</IpAddress> <RMIConnectionPort>8084</RMIConnectionPort> <RMIRegistryPort>8085</RMIRegistryPort> <Authenticate>true</Authenticate> <PasswordFile>${com.wowza.wms.ConfigHome}/conf/ jmxremote.password</PasswordFile> <AccessFile>${com.wowza.wms.ConfigHome}/conf/ jmxremote.access</AccessFile> <SSLSecure>false</SSLSecure></JMXRemoteConfiguration>
  • 56. JConsole• JDK付属のJMXクライアント ‣ JDK/bin/jconsole ‣ Mac OSX版はWMSにも付属• service:jmx:rmi://<address>:8084/jndi/ rmi://<address>:8085/jmxrmi
  • 57. まとめ• Wowza Media Serverは導入が簡単• 機能はFMSとほぼ同等 ‣ コストパフォーマンスも良い• 開発もイベントドリブンなので簡単 ‣ Wowza IDE• 他のアプリケーションやJMXで監視
  • 58. ご清聴ありがとう ございました