这里不再介绍什么是red5了,直接写配置。
我用的是red5 0.8版,首先从网上下载两个文件:red5-war-0.8.0.zip 和 setup-Red5-0.8.0.exe,将red5-war-0.8.0.zip 解压,得到root.war,
1.将root.war复制到tomcat安装目录下的webapps,解压到root文件夹,替换原来的root文件夹,启动tomcat,得到red5的测试页面,red5集成到tomcat完成。
2.安装 setup-Red5-0.8.0.exe.
3.下面来编写red5的测试项目。
4.新建Web项目HelloRed5(我是将集成了red5的tomcat配到Myeclipse,在Myeclipse编写项目),到 setup-Red5-0.8.0.exe的安装路径下找到red5.jar,boot.jar,复制到项目的lib下,再到tomcat的webapps\ROOT\WEB-INF\lib路径下复制所有的jar包到项目的lib下,到tomcat的webapps\ROOT\WEB-INF\classes目录下,将里面所有的配置文件复制到项目src下,将tomcat的webapps\ROOT\WEB-INF目录下复制web.xml到项目下,覆盖原来的web.xml.
此时,我们项目目录为:
5.然后我们编写后台的测试类:
package red5.example.red5server;
import org.red5.server.adapter.ApplicationAdapter;
import org.red5.server.api.IConnection;
public class Application extends ApplicationAdapter {
public boolean appConnect(IConnection conn, Object[] args) {
System.out.println(" 连接");
return true;
}
public String change(String str) {
System.out.println(" 客户端调用服务器");
return str.toUpperCase();// 传入的字符串转换成大写后返回
}
}
5.下面我们来修改配置,使项目能成为一个red5的项目发布。
首先,将web.xml中的
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>/</param-value>
</context-param>
修改为
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>/HelloRed5</param-value> <!-- HelloRed5 为项目名 -->
</context-param>
6.在src目录下新建一个HelloRed5-web.xml(HelloRed5为项目名),内容为
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="web.context.red5Server" class="org.red5.server.Context">
<property name="scopeResolver" ref="red5.scopeResolver" />
<property name="clientRegistry" ref="global.clientRegistry" />
<property name="serviceInvoker" ref="global.serviceInvoker" />
<property name="mappingStrategy" ref="global.mappingStrategy" />
</bean>
<bean id="web.scope" class="org.red5.server.WebScope"
init-method="register">
<property name="server" ref="red5.server" />
<property name="parent" ref="global.scope" />
<property name="context" ref="web.context.red5Server" />
<property name="handler" ref="web.handler.red5Server" />
<property name="contextPath" value="/HelloRed5" /> <!-- HelloRed5为项目名 -->
<property name="virtualHosts"
value="*,localhost, localhost:8080, 127.0.0.1:8080" />
</bean>
<bean id="web.handler.red5Server"
class="red5.example.red5server.Application"/> <!-- 此处配置的就是前面编写的测试类 -->
</beans>
然后到root-web.xml中删除以下内容:
<bean id="web.scope" class="org.red5.server.WebScope" init-method="register">
<property name="server" ref="red5.server" />
<property name="parent" ref="global.scope" />
<property name="context" ref="web.context" />
<property name="handler" ref="global.handler" />
<property name="contextPath" value="/" />
<property name="virtualHosts" value="*,localhost, localhost:8080, 127.0.0.1:8080" />
</bean>
因为这个bean对象已经在HelloRed5-web.xml中定义好了。
7.到re5-core.xml中找到
<!-- RTMP Mina Transport -->
<bean id="rtmpTransport" class="org.red5.server.net.rtmp.RTMPMinaTransport" init-method="start" destroy-method="stop">
<property name="ioHandler" ref="rtmpMinaIoHandler" />
<property name="connectors">
<list>
<bean class="java.net.InetSocketAddress">
<constructor-arg index="0" type="java.lang.String" value="0.0.0.0" />
<constructor-arg index="1" type="int" value="1935" />
</bean>
<!-- You can now add additional ports and ip addresses
<bean class="java.net.InetSocketAddress">
<constructor-arg index="0" type="java.lang.String" value="0.0.0.0" />
<constructor-arg index="1" type="int" value="1936" />
</bean>
-->
</list>
</property>
<property name="receiveBufferSize" value="65536" />
<property name="sendBufferSize" value="271360" />
<property name="eventThreadsCore" value="4" />
<property name="eventThreadsMax" value="8" />
<property name="eventThreadsQueue" value="-1 " />
<property name="eventThreadsKeepalive" value="60" />
<!-- This is the interval at which the sessions are polled for stats. If mina monitoring is not
enabled, polling will not occur. -->
<property name="jmxPollInterval" value="1000" />
<property name="tcpNoDelay" value="true" />
</bean>
将其中<constructor-arg index="0" type="java.lang.String" value="0.0.0.0" /> 中的value改为你电脑的IP地址,将其中 <constructor-arg index="1" type="int" value="1935" /> 中的value改为8080,如我的IP地址为10.21.2.127,则我将其修改为:
<!-- RTMP Mina Transport -->
<bean id="rtmpTransport" class="org.red5.server.net.rtmp.RTMPMinaTransport" init-method="start" destroy-method="stop">
<property name="ioHandler" ref="rtmpMinaIoHandler" />
<property name="connectors">
<list>
<bean class="java.net.InetSocketAddress">
<constructor-arg index="0" type="java.lang.String" value="10.21.2.127" />
<constructor-arg index="1" type="int" value="8080" />
</bean>
<!-- You can now add additional ports and ip addresses
<bean class="java.net.InetSocketAddress">
<constructor-arg index="0" type="java.lang.String" value="0.0.0.0" />
<constructor-arg index="1" type="int" value="1936" />
</bean>
-->
</list>
</property>
<property name="receiveBufferSize" value="65536" />
<property name="sendBufferSize" value="271360" />
<property name="eventThreadsCore" value="4" />
<property name="eventThreadsMax" value="8" />
<property name="eventThreadsQueue" value="-1 " />
<property name="eventThreadsKeepalive" value="60" />
<!-- This is the interval at which the sessions are polled for stats. If mina monitoring is not
enabled, polling will not occur. -->
<property name="jmxPollInterval" value="1000" />
<property name="tcpNoDelay" value="true" />
</bean>
8.将项目发布到tomcat中,如果启动成功,看到如下提示,则快成功了
9.接着我们编写客户端,新建一个flex项目,内容为:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
fontSize="12" backgroundGradientAlphas="[1.0, 1.0]"
backgroundGradientColors="[#FDF9F9, #FDF9F9]" width="442" height="344" creationComplete="init()">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
private var rtmpURL:String="rtmp://10.21.2.127:8080/HelloRed5";
private var conn:NetConnection=new NetConnection();
private var isConnectSuccess:Boolean=false;
/**
* 初始化时,连接到red5
*/
private function init():void{
conn.addEventListener(NetStatusEvent.NET_STATUS,netStatus); //netStatus为回调函数
conn.connect(rtmpURL);
}
private function netStatus(e:NetStatusEvent):void{
Alert.show(e.info.code);
if(e.info.code=="NetConnection.Connect.Success"){
isConnectSuccess=true;
}
}
private function click(e:MouseEvent):void{
if(!isConnectSuccess){
Alert.show("还没连接到服务器");
}
else{
conn.call("change",new Responder(resultFun),str.text);//change 是服务器端方法名称,Responder包括对应的处理函数
}
}
private function resultFun(object:String):void{
trace(object);
result.text=object.toString();
}
]]>
</mx:Script>
<mx:Label x="129" y="119" text="显示从服务器端返回的字符" id="result" width="160" fontSize="12"/>
<mx:TextInput x="129" y="145" id="str" width="212"/>
<mx:Button x="224" y="175" label="调用服务器方法" click="this.click(event)"/>
</mx:Application>
运行后看到以下效果,则成功了: