red5应用程序分为服务端和客户端两部分,使用eclipse作为开发环境,客户端Flex使用Flash Builder4.6开发。注意,red5只支持jdk1.6。下面开发一个简单的red5应用程序,实现客户端与服务端的通信。
1.服务端
直接将eclipse的工作空间设置为D:\Program Files\Red5\webapps,新建一个名为"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
red5-web.xml,... <context-param> <param-name>webAppRootKey</param-name> <param-value>/helloRed5</param-value> </context-param> ...
现在服务端的工作就全部完成了<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"按钮,结果如下