技術情報 : Top / flash / red5 / チャット

RTMPチャット[red5]

RED5を使用したRTMPチャット
RED5で予め用意されてあるサンプル(oflaDemo?)ではなく独自で作成する
swfからRTMP通信を取得するプログラム(RED5なのでJAVA)を作成する

RED5側準備

# cd /opt/red5/dist/webapps
# cp -R /opt/red5/doc/templates/myapp .
# cd myapp
# mkdir stream
# cd WEB-INF 
# mkdir src classes
# mkdir -p org/red5/server/webapp/myapp
# cd src/org/red5/server/webapp/myapp 

vi Chat.java

  1. package org.red5.server.webapp.myapp;
  2.   import org.red5.server.adapter.ApplicationAdapter;
  3.   public class Chat extends ApplicationAdapter {
  4. }

とりあえずApplicationAdapter?を継承した中身が空のChatクラス作る

ビルド

# cd /opt/red5/dist/webapps/myapp/WEB-INF
# javac -classpath /opt/red5/dist/red5.jar -d classes ./src/org/red5/server/webapp/myapp/Chat.java 

クライアント側プログラム作成

vi Chat.mxml

  1. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()" >
  2.   <mx:Script>
  3.   <![CDATA[
  4.     import flash.net.NetConnection;
  5.     import flash.net.SharedObject;
  6.  
  7.     NetConnection.defaultObjectEncoding = flash.net.ObjectEncoding.AMF0;
  8.     SharedObject.defaultObjectEncoding  = flash.net.ObjectEncoding.AMF0;
  9.  
  10.     private var nc:NetConnection;
  11.     private var so:SharedObject;
  12.  
  13.  
  14.     private function init():void{
  15.       nc = new NetConnection();
  16.       nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);                                                                  nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR,netSecurityErrorHandler);
  17.       nc.connect("rtmp://tzono.com/myapp");
  18.     }
  19.  
  20.     private function netStatusHandler(evt:NetStatusEvent):void{
  21.       if(evt.info.code == "NetConnection.Connect.Success"){
  22.         netStatusMsg.text = "SUCCESS";
  23.         so = SharedObject.getRemote("chat",nc.uri,false);
  24.         if( so ) {
  25.           so.addEventListener(SyncEvent.SYNC,SyncEventHandler);
  26.           so.connect(nc);
  27.         }       
  28.       }else { 
  29.         netStatusMsg.text = evt.info.code;
  30.       }
  31.     }
  32.     private function SyncEventHandler(evt:SyncEvent):void {
  33.       if( so.data.msg != undefined ){
  34.         log.text += so.data.msg + "\n";
  35.       }
  36.     }
  37.  
  38.     private function netSecurityErrorHandler(evt:SecurityErrorEvent):void{
  39.       trace("securityErrorHandler: " + evt);
  40.     }
  41.  
  42.     private function sendMsg():void{
  43.       if( msg.text != "" ) {
  44.         so.setProperty( "msg" , msg.text );
  45.         msg.text="";
  46.       }
  47.     }
  48.   ]]>
  49.  
  50.   </mx:Script>
  51.   <mx:TextArea id="log" width="80%" height="70%" editable="false"/>
  52.   <mx:TextInput id="msg" width="80%" enter="sendMsg()" />
  53.   <mx:Label id="netStatusMsg" width="80%" />
  54. </mx:Application>

ビルド

# mxmlc Chat.mxml

ビルド後に出来上がるChat.swfをドキュメントルート上に設置し、ブラウザからアクセスする

完成品サンプル

http://tzono.com/flex/main.swf


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2010-05-23 (日) 02:06:01 (109d)