怎么将RED5项目部署在tomcat下运行,并且red5项目嵌入到J2EE项目中

写这篇文章前先允许我发下牢骚吧,因为这里面的曲折心酸真的难以体会啊,我是第一次弄一个helloworld的东西弄了将近3天 啊,差一点点我都基本要放弃了,可是还是那句老话对啊,坚持就是胜利,果然我胜利了。还有一个就是,感觉现在视频网站也到处都是,flex技术也很多了,干嘛关于red5的资源网上这么少,市面上的书籍更是没有,这样就导致很多刚开始入门的时候会弄很久,然后一没信心就放弃了。  还好我坚持了,庆幸下先 大笑,还希望以后各位能把自己所会的放到网上来,大家一起学生,千万别像我在入门red5的时候,千辛万苦的找到一个一个pdf的作者,想问问他入门的时候这些东西到底哪里错了,该怎么配,心想也花不了他多少时间,可是谁想到他居然不但不给我说,还说我写的程序是垃圾,集成tomcat没用,在这里强烈的鄙视他,程序届有这种人真是悲哀。    好了,唠叨完了,心情好点了,可以说正事了。


首先我要说的是,我用的是0.6  java6版本的安装包和0.6 war包,包括(Root .war   admin.war,echo.war)(在这之前弄了个1.0的包 和0.8的包  都没成功,如果谁成功了告诉我下好吧)

1. 将0.6的windows安装包安装好(D/red5)

2.删除你tomcat重conf里面的catalina文件件,删除work文件夹,删除webapps\ROOT文件夹(因为这里的两个文件夹都是tomcat的,现在你要集成red5,所以删掉,ps:当你配置完下面我要说的所有后重启tomcat时这两个文件会重新的生成)

3.找到你的tomcat的wabapps,然后将那三 个war包放在wapapps下

4重启tomcat(其实现在看来Root.war admin.war echo.war 对于写项目没用,唯一有用的就是 当我们建立自己的项目时会用到root.war 加压后的文件夹里面的一些文件,这些一会说)

5.打开tomcat下webapps\ROOT\WEB-INF\classes,里面的root-web.xml.将里面的所有端口都换成8080,PS:现在看来该这里东西对我们以后写的项目也没影响,该它只是为了访问red5主页或者它里面的例子。

6.再重启tomcat,现在在浏览器中输入:http://localhost:8080  如果出现red5的主页,而不 是以往 我们熟知的tomcat主页就行了。 


现在下面的才是真正我们需要的东西:

在myeclipse里面建立我们的项目如图:


前面那两 个包你们不用管,主要是red5.example.red5Server这个包,里面建个类:

import org.red5.server.adapter.ApplicationAdapter;
import java.util.ArrayList;   
import java.util.Iterator;   
import java.util.List;   
  
import org.red5.server.api.IConnection;   
import org.red5.server.api.IScope;
import org.red5.server.api.Red5;
import org.red5.server.api.service.IServiceCapableConnection;


public class Application extends ApplicationAdapter {  
    private String userName;   
           
        //客户端调用的方法   
        public String callFromClient(String userName) { 
         System.out.println("ddd");
            this.userName = userName;   
            callClient();   
            return "Hello:"+userName;   
       }   
           
        //服务器端调用客户端的方法   
        public void callClient() {   
            IConnection conn=Red5.getConnectionLocal();   
            if (conn instanceof IServiceCapableConnection) {   
                IServiceCapableConnection sc = (IServiceCapableConnection) conn;   
                sc.invoke("callFromServer", new Object[]{"hi,"+userName+" this message from server"});   
           }   
        }   


 
}

建好后可定会报错,因为我们要用到red5的jar包 啊,我们还们引入jar包,于是我们来到0.6windows安装版的安装路径下找到red5.jar 把它拷工程的lib下,同时你也去tomcat的root文件夹下的classes里面 的lib的所以jar拷的你工程的离别下         同时你也去tomcat下找到Root文件夹,里面的web-inf下的classes里面的配置文件,除admin    echo  sosample -web.xml外的文件拷到你工程src下,将tomcat6\webapps\ROOT\WEB-INF下的web.xml  和log4j的配置文件拷到你的项目的web-inf下,覆盖以前的文件。到这里,你的项目基本快要完成了,接下来就是修改里面的 配置。


首先要改的就是web.xml,容器从这里找到你的服务,

将web.xml中的

<context-param>
<param-name>webAppRootKey</param-name>
<param-value>/</param-value>
</context-param>

改成

<context-param>
<param-name>webAppRootKey</param-name>
<param-value>/red5Server</param-value>
</context-param>


然后在src建立以个red5Server.xml文件,类容为:

<?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="/red5Server" />  
       <property name="virtualHosts"  
            value="*,localhost, localhost:8080, 127.0.0.1:8080" />  
    </bean>  
  
    <bean id="web.handler.red5Server"  
       class="red5.example.red5server.Application" />  
  
</beans>  

想必你们也能明白这里的意思了。

然后这里就非常的重要了,打re5-core.xml,找到里面的:

<bean id="rtmpTransport" class="org.red5.server.net.rtmp.RTMPMinaTransport" init-method="start" destroy-method="stop">
<property name="ioHandler" ref="rtmpMinaIoHandler" />
<property name="address" value="10.30.6.221" />
<property name="port" value="8080" />
<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" />
</bean>

看见“address”,这 个地方就是让我纠结2天的东西,这个地址大概意思是说“在这个地址上监听rtmp请求”(这是我个人想法,还没来及看官方文档),这个地址就写你现在本地的ip地址,我之前写的是localhost,让我连了2天都没连通,换成它默认的0.0.0.0也不行。下面的写8080,其实我想知要写个没被占的端口都可以,只要前台在连接的时候写对应的端口就行了。改好后保存。  这样你的 red5项目的服务端就是完事了。

下面写前台吧,我用Flex

<?xml version="1.0" encoding="utf-8"?>  
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">  
  
     <mx:Script>  
        <![CDATA[  
            import flash.net.*;  
             import flash.events.*;     
             import flash.utils.*;     
            import mx.controls.*;   
            private var nc:NetConnection;  
              
            public function connServer():void {  
                 nc = new NetConnection();                    
                 nc.addEventListener(NetStatusEvent.NET_STATUS, netStatus);     
                 nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, netSecurityError);     
                 nc.connect(txtServerURL.text,txtUserName.text);     
             }  


            
            public function init():void {  
//             Alert.show("页面初始化完成!")
                 nc = new NetConnection();                    
                 nc.addEventListener(NetStatusEvent.NET_STATUS, netStatus);     
                 nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, netSecurityError);     
                 nc.connect("rtmp://10.30.6.221:8080/red5Server");     
                 nc.client = this;   
                 //Alert.show("连接完成");
             }  
               
             private function netStatus(event:NetStatusEvent):void {     
                var connStatus:String = event.info.code;  
                 Alert.show(connStatus);   
                 if(connStatus == "NetConnection.Connect.Success") { 
                     txtResult.text += "登陆成功";   
                     nc.call("callFromClient",new Responder(callServerMethodResult,callServerMethodFault),Math.random().toString());  
                }  
                 else if(connStatus == "NetConnection.Connect.Rejected")  
                 {  
                     //登录被拒绝  
                     txtResult.text += event.info.application;  
                 }  
                 else if(connStatus == "NetConnection.Connect.Failed")  
                 {  
                     //登录被拒绝  
                     txtResult.text += event.info.application;  
                 } 
             }     
              
             private function netSecurityError(event:SecurityErrorEvent):void {     
                 Alert.show("netSecurityError: " + event);     
             }  
 
           public function callServerMethodResult(re:String):void {  
                Alert.show("客户端调用服务器端方法成功,返回结果:"+re);  
             }  
              
           public function callServerMethodFault(fo:Object):void {  
               Alert.show("客户端调用服务器端方法失败:"+fo.toString());  
            }  
              
            public function callFromServer(re:Object):void {  
                Alert.show("服务器端调用客户端方法,传递的参数为:"+re.toString());  
           } 




        ]]>  
     </mx:Script>  
      <mx:Label x="10" y="38" text="输入用户名:"/>  
     <mx:TextInput x="83" y="36" id="txtUserName" width="167"/>  
     <mx:Label x="10" y="10" text="连接的服务器:"/>  
    <mx:TextInput x="83" y="8" id="txtServerURL" text="rtmp://10.30.6.221:8080/red5Server"/>  
    <mx:Button x="10" y="64" label="连接到red5服务器" width="240" click="this.connServer()"/>  
    <mx:TextArea x="10" y="94" width="240" height="154" id="txtResult"/>  
       
 </mx:Application>
 这个项目要映射到你的J2EE项目的目录下,比如这里我是映射到red5Server下,输入路径为/red5Server/chart

编写完成后可以直接点Flexbulder3运行,也可以在地址栏中输入:http://localhost:8080/red5Server/chart/chart.html

如果在局域网中测试最好用80端口,因为80默认能穿过防火墙。


运行结果如图:



在看看你的myeclipse后台,肯定输入了ddd符号,这说明前台掉后台的方法成功了。现在就可以进行的需要的red5开发了。

字敲完了,休息了。 如果哪里有错还请原谅,都是带着瞌睡敲的。你可以说出来大家一起研究下,有问题就留言哈。



2012,.03.15

=================================一下是最近做个一个小东西,继续更新中==========================================



建议用red5高版本,因为0.6的是spring2.0



======================2012年3月31:项目更新,用red5 0.8版 ,局域网内测试 上传流量可达80多K,代码在我的资源里 需要的可以去下载==================


评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值