玩转Red5+Flex(3)—— Red5第一个例子之HelloWorld

来源:互联网 发布:淘宝虚拟商品怎么发货 编辑:程序博客网 时间:2024/06/05 02:52

注:代码复制不了,可以参考:

 http://412887952-qq-com.iteye.com/blog/1620334


3  Red5第一个例子之HelloWorld

 

3.1 HelloWorld开发前指导


   不管在学习什么新技术,都离不开HelloWorld,简单而经典。本技术也不例外,从HelloWorld步步深入进行研究。在开发之前,先讲讲HelloWorld的开发流程,主要包括服务端和客服端。Red5程序主要是在服务端发布一个服务,供其他客户端进行访问,具体的步骤如下:

 

 Ø  用Eclipse编写客户端

 Ø 将编写的程序部署发布

 Ø 用Flex编写客服端

 

接下来我们就按照这三大步进行开发。

 

3.2 用Eclipse编写客户端

   Red5服务端的开发类似于开发一个web project,所以我们的工程基本上的架构跟web project一样,需要如下几个文件WEB-IN,classes,web.xml ,lib… 具体的步骤如下:


²  用Eclipse新建一个Java Project

新建一个Java Project,取名为Hello_Red5,具体的步骤不多说,我想大家这一步都不应该有问题,待会会把整个文件结构放上。


² 新建目录文件

刚才我们已经说了,我们实际开发的应该类似一个web project才能够进行部署,当然一开始你也可以直接选择web project。

 

  l  在根目录下新建WEB-INF文件夹

      l在WEB-INF下新建classes文件夹

      l  在WEB-INF下新建lib文件夹

 

 新建文件夹的步骤应该是这样的:

【点击工程】——【右键】——【New】——【Folder】——【输入文件名称即可】

现在的文件结构应该是这样的:


 

² 设置字节码存放位置

我们知道用Eclipse编写的java代码默认情况下编译之后的 .class字节码文件都是存放在bin目录下,我们需要修改下,让它存放在WEB-INF下的classes文件下,具体步骤如下:

 

【点击工程】——【右键】——【Build Path】——【Configure Build Path】——【在右边选择Source菜单】——【在右下角就可以看到default outer folder,点击Browse,切换到

WEB-INF/classes】——【切换完成之后在输入框的值应该是:Hello_Red5/WEB-INF/classes】

  

关键的操作演示如下:

 


 

²  编写配置文件

虽说标题是些编写配置文件,但是其实大部分配置都已经有现成的模板了,只需要你稍微修改下就可以了。那么模板在哪里可以找到呢?其实就在Red5的安装根目录的/doc/templates/myapp/WEB-INF下的四个配置文件,

分别是:log4j.properties,red5-web.properties,red5-web.xml,web.xml具体都是做什么用的,我们下节在进行讲解,这一节的主要目标是成功部署一个应用程序,细节的东西先不管。找到这几个配置文件之后复制到WEB-INF目录下。

  

 

现在的文件结构应该是这样的:


 

²  导入Red5.jar文件

Red5.jar文件在Red5安装根目录下。导入步骤:

【点击工程】——【右键】——【Build Path】——【Configure Build Path】——【在右边选择Libraries菜单】——【点击Add External Jars…】

   关键步骤演示:


 

注:有人导入jar文件的时候,会选择这样的方式,就是先复制Red5.jar文件,然后粘贴到lib目录下,最后在Add Jars…,这种方式也是可以的,应该来说这种方式还有更好,不

 

会由于你改变了Red5的安装路径就报错了。但是需要你注意的是:当你发布程序到Red5服务器的时候,需要把lib包下的Red5.jar再删除掉,不删除的话是无法部署成功的,不

 

然你可以试一试,要是成功的话,也麻烦你告诉我,或许我部署有问题了。那么你肯定会有这样的疑问,我们在开发的时候不是用到Red5.jar文件里的类库了吗,现在删除了,

 

那么它怎么还能运行呢?一开始我也是这么认为的。但是经过自己的各种尝试(谷哥和度娘好像没有查到相关的说明,要是有相关的文档说明的话,麻烦告诉我下。),发现当

 

你将程序部署到Red5进行发布的时候,它是读取了Red5安装目录下的Red5.jar的。

 

² 编写代码

在src目录下先新建一个包: cn.app,在新建的包下新建一个类,取名为Application,代码如下:

 

 

 

 

Java代码 
  1. package cn.app;  
  2.    
  3. import org.red5.server.adapter.ApplicationAdapter;  
  4.    
  5. public class Application extends ApplicationAdapter{  
  6.      
  7.     /** 
  8.      * 提供访问的方法,可以写多个,让客服端进行调用. 
  9.      * @param name 
  10.      * @return 
  11.      */  
  12.     public String login(String name){  
  13.        return "Red5 say:Hello,"+name;  
  14.     }    
  15. }  
 

 

 

 

 

此java代码跟普通java代码没有什么区别,主要是该类继承了

org.red5.server.adapter.ApplicationAdapter 类。

  

现在的文件结构应该是这样的:

 


 

 

²  修改WEB-INF下的配置文件

我们说配置文件有模板,但是没有不用进行修改的模板吧,所以还是需要你手动的修改下配置文件,但是改动不大,不用担心。

 

² red5-web.properties 文件

将 webapp.contextPath=/myapp 修改为:

webapp.contextPath=/Hello_Red5

其中Hello_Red5是你的工程名称。

 

webapp.virtualHosts配置的是虚拟主机地址,在此我们可以不进行修改。

 

²  red5-web.xml

<bean id="web.handler"

        class="the.path.to.my.Application"

       singleton="true" />

修改为:

   <bean id="web.handler"

        class="cn.app.Application"

       singleton="true" />

注:修改的是你自己的class。

   删除(或者注释掉):

<bean id="myhandler.service"

        class="the.path.to.my.ServiceHandler"

       singleton="true" />

  

² web.xml

<context-param>

       <param-name>webAppRootKey</param-name>

       <param-value>/myapp</param-value>

    </context-param>

修改为:

   <context-param>

       <param-name>webAppRootKey</param-name>

       <param-value>/Hello_Red5</param-value>

    </context-param>

注:param-value指向你的工程名称。

   删除(或者注释):

    <context-param>

        <param-name>log4jConfigLocation</param-name>

        <param-value>/WEB-INF/log4j.properties</param-value>

    </context-param>

 

<listener>    

<listener-class>org.springframework.web.util.Log4jConfigListener

</listener-class>

</listener>

 

<listener> 

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

注:ContextLoaderListener代码是启动Sping监听器的,按道理是不应该注释掉的,但是不注释掉的话,就会报错。我在网上查找了很多资料,甚至是英文网站都没有相关的说明,我是通过不断的尝试,才知道注释掉能够正常运行。我想应该是Red5 1.0版本在conf目录下就应该有启动Spring监听器了(要是有人有知道的,请联系我)。另外两个主要是Log4j日志的,要是不注释掉的话,需要加入Log4j.jar文件。

   至此代码就开发完成了,那么就让我们小休息一会吧。

 

温馨提示:在开发的时候,我们发现每次编译完之后,都需要重新复制工程到Red5/webapps进行部署,这样很是麻烦,一方面我们可以用ant进行部署,但是实话说ant我还真是不会,于是我就采用了偷懒的形式:把Eclipse的workspace直接设置到Red5/webapps下,这样每次更新就是更新了webapps的数据了。主要还有就是在项目上线的时候,可以把src下的源码删除了。

 

3.3 部署发布程序

   革命尚未成功,我们仍需努力,让我们一起来见证奇迹吧。

² 部署程序

程序的部署还是很简单的,说的直白点就是复制粘贴的过程。将我们编写的Hello_Red5复制到Red5的安装目录下的webapps目录下。

² 发布程序

发布程序就更easy了,就是启动服务器的过程。进入到Red5的安装目录,启动Red5.bat文件。需要的注意的是,有可能之前就启动Red5服务器了,但是当你重新发布程序的时候,需要你重新再启动。

² 测试程序是否发布成功

本地的话,见文件夹【测试工具】。在网页的见附件,下载附件里的【Red5用rtmp是否能够连接工具--Angel提供】。打开Main.html

进行测试,演示图如下:

 

 

3.4 用Flex编写客户端

   坚持就是胜利,马上就有葡萄可吃了。

² 新建一个Flex项目

打开开发工具,新建一个Flex项目:【右键】——【新建】——【Flex项目】,项目名称随意。

²  编写访问服务端的代码

首先我们需要在启动程序的时候,就去连接客户端,如果连接成功的话,那么就将返回的数据弹出。

   启动文件mxml文件的代码主要如下:

 

 

Xml代码 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" creationComplete="init()"  
  3.                xmlns:s="library://ns.adobe.com/flex/spark"  
  4.                xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">  
  5.     <fx:Declarations>  
  6.         <!-- 将非可视元素(例如服务、值对象)放在此处 -->  
  7.     </fx:Declarations>  
  8.      
  9.     <fx:Script>  
  10.         <![CDATA[ 
  11.             import mx.controls.Alert; 
  12.             //程序加载完成执行的事件. 
  13.             private function init():void{ 
  14.                 
  15.                 //定义一个网络连接对象. 
  16.                 var nt:NetConnection = new NetConnection(); 
  17.                 
  18.                 
  19.                 // 设置 连接 地址. 
  20.                 nt.connect("rtmp://127.0.0.1/Hello_Red5"); 
  21.                 
  22.                 
  23.                 //连接成功失败监听--这个前期先不进行监听.利用这个自己可以开发一个 连接Red5的测试工具. 
  24.                 
  25.                 //调用服务端的函数. 
  26.                 /*  
  27.                     login: 方法的名称,在Application类进行声明。 
  28.                 
  29.                     new Responder(loginHandler): 回应处理. 
  30.                     
  31.                     Flex4:参数,多个参数就是再加上 逗号 ,在进行添加。这个参数是在 login方法定义的。 
  32.                 */ 
  33.                 nt.call("login",new Responder(loginHandler),"Flex4"); 
  34.                 
  35.             } 
  36.             
  37.             
  38.             //函数处理. 
  39.             private function loginHandler(obj:Object):void{ 
  40.                 Alert.show(obj+""); 
  41.             } 
  42.             
  43.         ]]>  
  44.     </fx:Script>  
  45.      
  46.      
  47.      
  48. </s:Application>  

 

 

²  运行应用程序

右键运行应用程序,如果运行成功的话,在浏览器会弹出:

Red5 say: Hello,Flex4

原创粉丝点击