第一步:设置环境
下载red5 http://osflash.org/red5
安装版本 当前最新版本为:Red5 v0.6.3 Final released 。
另外一中方法是下载源码编译运行。我这里就不介绍了。
注意安装的时候,有个选项为 “注册为服务” 这个不要选,否则运行时候会报错。
下载eclipse 3.2以上版本,最好装一个flex3插件,(as3的编辑器)
下载jdk 或者jre (red5安装的时候要选择jre路径)
ant 这东西,如果不熟悉的话可以不用。直接用eclipse编译就可以。
第二步:搭建目录结构
red5的那些例子多放在webapps/root目录下,我们做的事情跟它一样。搭建一个和root差不多的应用。
有很多中方法 这里用red5提供的模板Red5/doc/templates/myapp (把此目录拷过去改名就行)
一般如下
工程名为 :red5_server
webapps/red5_server/WEB-INF/
src
lib
classes
web.xml
red5-web.xml
red5-web.properties
log4j.properties
这个跟我们一般java 的应用有点不一样,src在WEB-INF里面,当然你也可以放到外面。只要在eclpse中
把它当做资源文件夹就可以。为什么要放到里面,这个我也没有深入的研究。别忘了把classes设置为输路径。
第三步:编写服务端java代码
注意:
要加red5.jar和commons-logging-1.1.jar到编译路径里,因为用到了LogFactory和ApplicationAdapter
。这两jar在路径:Red5/red5.jar 和red5/lib/commons-logging-1.1.jar
package test;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.red5.server.adapter.ApplicationAdapter;
import org.red5.server.api.IConnection;
public class TestCon extends ApplicationAdapter{
private static final Log log = LogFactory.getLog(TestCon.class );
public TestCon(){
}
public boolean appStart(){
log.info( "Red5First.appStart" );
return true;
}
public void appStop(){
log.info( "Red5First.appStop" );
}
public boolean appConnect(IConnection conn , Object[] params){
log.info( "Red5First.appConnect " + conn.getClient().getId() );
return true;
}
public void appDisconnect( IConnection conn , Object[] params ){
log.info( "Red5First.appDisconnect " + conn.getClient().getId() );
}
}
第四步:修改配置文件
red5-web.properties :
webapp.contextPath=/red5_server
webapp.virtualHosts=localhost, 127.0.0.1
red5-web.xml:
<bean id="web.handler"
class="test.TestCon"
singleton="true"/>
web.xml:
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>/red5_server</param-value>
</context-param>
删除:
<bean id="myhandler.service"
class="the.path.to.my.ServiceHandler"
singleton="true"/>
其中log4j.properties可以不改,默认为空
第五步:编写客户端as代码
最好客户端与服务端分开
建一个flex工程新建src等文件目录。 跟一版的 web应用没有什么区别。
package test
{
import flash.net.NetConnection;
import flash.net.ObjectEncoding;
import flash.events.NetStatusEvent;
import flash.display.Sprite;
public class TestCon extends Sprite{
private var nc:NetConnection;
public function TestCon():void{
nc = new NetConnection( );
nc.objectEncoding = ObjectEncoding.AMF0;
nc.addEventListener( NetStatusEvent.NET_STATUS , netStatus );
nc.connect( "rtmp://localhost/red5_server" , true);
}
private function netStatus (event:NetStatusEvent):void{
trace( "连接情况......../n"+event.info.code);
if (event.info.code == "NetConnection.Connect.Rejected" ){
trace( event.info.application );
}
}
}
}
第六步:测试运行
新建一个fla在第一帧上写上代码
import test.* ;
var a:TestCon = new TestCon();
在客户端flash 能打印出
连接情况........
NetConnection.Connect.Success
服务端java 打印
[INFO] 2008-01-29 18:14:52,031 pool-3-thread-3:( test.TestCon.appConnect ) Red5First.appConnect 0
[INFO] 2008-01-29 18:14:52,031 pool-3-thread-3:( test.TestCon.appConnect ) Red5First.appConnect 1
....
第七步:处理参数。。还在研究当中