red5应用程序分为服务端和客户端两部分,使用eclipse作为开发环境,客户端Flex使用Flash Builder4.6开发。注意,red5只支持jdk1.6。下面开发一个简单的red5应用程序,实现客户端与服务端的通信。
1.服务端
直接将eclipse的工作空间设置为D:Program FilesRed5webapps,新建一个名为"helloRed5"的java project。
在Properties->Java Build Path->Libraries->Add External JARS...中,?添加依赖库red5..jar,该文件在red5的安装目录下。
设置编译输出目录为helloRed5/WEB-INF/classes。
将doc/template/myapp/WEB-INF目录复制到project目录下。
完成以上步骤后,project目录结构如下

添加一个名为HelloRed5的java类,这个类很简单,继承自ApplicationAdapter。
HelloRed5.java
package sample;
import org.red5.server.adapter.ApplicationAdapter;
public class HelloRed5 extends ApplicationAdapter {
public String sayHello() {
return "Hello,red5!";
}
}
下面修改几个配置文件
red5-web.properties
webapp.contextPath=/helloRed5
webapp.virtualHosts=localhost,127.0.0.1
web.xml
...
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>/helloRed5</param-value>
</context-param>
...
red5-web.xml,
<bean id="web.handler"
class="sample.HelloRed5"
singleton="true" />
现在服务端的工作就全部完成了
2.客户端
使用Flash Builer4.6建立一个Flex project,名为"helloRed5client",使用NetConnection与服务端进行通信。客户端的功能很简单,界面上放置一个button和一个lable控件,点击button后显示从服务端获取到的字符串"Hello,Red5!"。
helloRed5Client.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
creationComplete="init();" >
<fx:Declarations>
<!-- Place non-visual elements (e.g.,services,value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import flash.net.NetConnection;
import mx.controls.Alert;
private var nc:NetConnection;
private function init():void{
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS,connectHandler);
nc.client = this;
nc.connect("rtmp://localhost/helloRed5");
}
private function sayHello():void{
nc.call("sayHello",new Responder(okHandle,failureHandle));
}
public function okHandle(result:String):void{
message.text = result;
}
public function failureHandle(result:String):void{
Alert.show(result,"Error");
}
private function connectHandler(evt:NetStatusEvent):void{
if(evt.info.code != "NetConnection.Connect.Success"){
Alert.show("code:"+evt.info.code,"Error");
nc.removeEventListener(NetStatusEvent.NET_STATUS,connectHandler);
}
}
public function onBWDone():void{} //注意 ,这个函数不能少
protected function button1_clickHandler(event:MouseEvent):void
{
// TODO Auto-generated method stub
sayHello();
}
]]>
</fx:Script>
<s:Button x="55" y="43" label="Say Hello" click="button1_clickHandler(event)"/>
<s:Label id="message" x="159" y="44"/>
</s:Application>
注意,代码中的:
nc.client = this;
public function onBWDone():void{}
不能少,否则会提示以下错误
Error #2044: 未处理的 AsyncErrorEvent:。 text=Error #2095: flash.net.NetConnection 无法调用回调 onBWDone。 error=ReferenceError: Error #1069: 在 helloRed5Client 上找不到属性 onBWDone,且没有默认值
3.运行
启动red5,浏览器打开编译出来的helloRed5Client.html文件,点击"Say Hello"按钮,结果如下
