Red5 入门教程实例

c472959676 贡献于2015-07-07

作者 微软用户  创建于2012-08-04 07:31:00   修改者微软用户  修改于2012-08-04 07:37:00字数9221

文档摘要:Red5入门教程。简介:在flex,java盛行天下时red5把二者连为一体成为更强的强者,为即时通信,流媒体开发,网络在线游戏提供了一个简单易行的方案。越来越多的公司把这个方案当成了首先,熟悉相关技术的人才的缺少也就成了发展的障碍,而相关资料的奇缺成了技术人员成长的障碍。本书注重实用,着眼入门,用大量实际的例子力求带领您进入flex,red5结合开发的天堂。没一个列子都是精心挑选,每一个列子都代表着一个知识点,每一个列子都将成为您以后项目的一部分。
关键词:

Red5 入门教程 简介: 在flex,java 盛行天下时red5 把二者连为一体成为更强的强者,为即时通信,流媒体开发, 网络在线游戏提供了一个简单易行的方案。越来越多的公司把这个方案当成了首先,熟悉相 关技术的人才的缺少也就成了发展的障碍,而相关资料的奇缺成了技术人员成长的障碍。 本书注重实用,着眼入门,用大量实际的例子力求带领您进入flex,red5 结合开发的天堂。 没一个列子都是精心挑选,每一个列子都代表着一个知识点,每一个列子都将成为您以后项 目的一部分。当然这是入门级别的书籍, 不可能把所有的相关知识都讲到, java,flex,spr ing,mina 等等等等都red5 相关,如果要对每一个点讲解那将是一个系列,而不是 一本书。为了突出重点,本书只讲解把这些联系起来的纽扣red5,并讲解如何利用red5 开 发项目。 内容包括red5 的安装,red5 开发中各种概念,各种问题的解决方案,开发工具的使用等 等,但有详有略,如工具的使用只讲解了书本中需要用到的相关知识。最后书本还有数个完 整的列子,也是实际开发中常用的列子,如聊天程序,播放视频程序。 一.Red5介绍及安装 1. Red5 介绍 Red5是一个采用Java 开发开源免费的的Flash 流媒体服务器,功能和Adobe 的fms(F lash Media Server)相同,可以上官方网站http://www.osflash.org/red5免费下载并使用。它支持把音频(MP3) 和视频(FLV)转换成播放流,在下载的同时播放流; 录制客户端播放流(只支持FLV),把摄像头,麦 克风等传入的视频音频录制保存到服务器;共享对象;现场直播流发布;远程调用。Red5使用RSTP 作为 流媒体传输协议。 Red5的功能使其在许多领域得到应用。如视频播放网站,远程教育,视频会议程序,聊天程序,网络 游戏等等。 免费开源使软件更加容易扩展,下载后你可以对源代码进行修改;更加经济,比起fms 高昂的费用red5 能为一般的应用节约大笔费用;服务器端的java语言比起fms 服务器端的actionscript2语言更加面向对 象更加成熟。这使得red5还没到版本1就已经红遍世界。 2.red5 安装 第一步上java.sun.com下载jdk6并安装。如果不是安装在默认路径请设置classpath和path。设 置classpath和path 的方法请参考其他java 的资料。 第二步上http://www.osflash.org/red5下载Red5 v0.7.0 Final 的window 安装版。点击下载到 的exe 文件即开始安装,安装过程中选择要把red5安装到的目录。安装结束后打开浏览器输入 http://localhost:5080/如果能打开显示“Red5 Test Page”表示安装成功。安装成功后可以运行查看 red5自带的例子。 第三步red5的启动和关闭。安装版的red5默认情况下会在计算机启动时启动,如果想关闭自启动可以 右击我的电脑->管理->服务和程序,找到red5的那项把启动方式的自动启动改为手动或其他的。更改了 启动方式后可以找到red5的安装目录下的wrapper 目录下的Red5.bat 文件,双击即可启动,这样可以 从窗口看到客户端连接的情况。关闭窗口即可关闭red5,也可以双击StopRed5-NT.bat 关闭服务程序。 二.编写运行第一个程序 第一个程序的运行是学习的莫大回报,也是继续下面学习的关键,只有顺利的运行了第一个程序才会 更加信心百倍的去学习更深一步的知识。 Red5+flex 或red5+flash 的项目一般都包括服务器和客户端俩个部分,服务器用java,客户端用 flex 或flash。编写并编译完服务器端代码后需要把服务器的的应用部署到red5的webapps 目录下这和 传统的java应用没区别,客户端可以直接点击flash 文件运行。 下面开始第一个程序的编写,它分成服务器和客户端俩部分,以后的程序也都安这种方式分。 1.编写服务器端 打开eclipse 新建java 工程或javaee 工程chapter2(如果不熟悉eclipse 请参考附件eclipse 的 使用)。把red5安装目录下的red5.jar 以及lib 目录下的jar 都添加到工程的类库中。 新建包first,然后新建类,类名称为Application 并继承ApplicationAdapter。类的代码如下: package first; import org.red5.server.adapter.Applic ationAdapter; 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();// 传入的字符串转换成大写后返回 } } 2.编写客户端 打开flexbuilder3 新建flex 工程(具体flexbuilder 的使用请参考附录),名字取名为chapter2。 打开项目中chapter2.mxml。chapter2.mxml 的代码如下: 3.部署运行程序 进入red5 的安装目录下的webapps 下,复制test 文件夹,把复制的文件夹改名为chapter2, 删除chapter2\WEB-INF 目录下的文件夹。 把服务器项目下的classes 目录下的文件夹first 拷贝到chapter2\WEB-INF 下。 把red5-web.properties 中的/test 替换为/chapter2。 把red5-web.xml 中的删除。 把org.red5.server.webapp.test.Application 替换为first.Application。 把web.xml 中的/test 替换为/chapter2 把 / tlds/c/WEB-INF/tlds/c.tld 删除 注意:webapps 下的文件夹名chapter2,red5-web.properties 中的chapter2,web.xml中的chapter2 要保持相同,如果一个改了,其他的也改成相同的,所有以后的工程都这样。 重新启动red5 在flexbuilder3 中选择运行菜单中的运行项运行chapter2。在文本框里输入字符串,点击连 接按钮,然后点击调用方法按钮。上面如果显示出输入框里的字符串的大写表示运行正常。 服务器端类有俩个方法,appConnect 类从ApplicationAdapter 继承来,当flash 连接时触发, 可以返回true 或false。True表示接受客户端的请求,false 表示拒绝客户端的请求。如果拒绝那么以后 flash 和服务器端的交互服务器都不会理会,所以当想拒绝某些ip 的请求时只需有在用户连接时检查它的ip 是否在拒绝ip 之内,如果在就返回false,那样就可以拒之门外了。change 是自己定义的,客户可以直 接调用的一个远程方法。作用是把客户传入的参数变成大些后返回,此处目的在于运行一个red5 和flex 交互的过程,并没有检查传入的参数是否有大写或都已经是大写。 客户端的代码稍多些,位于之外的是图形界面的 代码,包括俩个按钮,一个输入框,一个显示文本,这就不详细讲解了,注意给按钮添加事件监听器。过 程是这样的,用户点击连接,按钮的监听器clickConnect响应,conn.connect(rtmpURL)连接到服务 器,在服务器和客户端建立一条信息交流的通道。当这条通道打通时netStatus 执行,把是否是打通的开 关isConnectSuccess 设置为通的。当用户再点击调用按钮时,通过这条通道调用服务器端的方法 conn.call("c hange",responder,str.text) 。传给服务器字符串str.text,当服务器端方法执行完后把返 回值给responder 定义时的方法resultFun,这样一个客户端与服务器交互的过程完成。 三.远程调用 通过red5 服务器端和客户端可以直接通过方法调用来交互,这是非常方便的(想想你在个类里面方法调用发方便性吧),服务器调可以用客户端的方法,客户端也可以调用服务器 端的方法。其实上面的例子就是通过方法调用实现的。 1.客户端调用服务器端方法 通过red5 可以从客户端直接调用服务器上java 编写的方法。调用时指明被调用的方法 名称,如果有返回值则需要指明返回值处理的responder,如果被调用的方法有参数则需要 传入参数。可以引用第一章的例子,conn.call("change",responder,str.text); 表示客户端调用服务器端的名称为change的方法,查看java中change的定义public String change(String str){//函数体}发现参数是java 中String 类型的;调用时传入的str.text 是 actionscript 中String 类型;假如change 有多个入口参数,则可以把参数列在str.text 后面, 并用''," 隔开。返回值由responder 处理,change 返回值是String 类型的,要求responder 定义 时的函数resultFun的入口参数是String类型。 调用过程中需要注意的是参数类型的对应。具体可以看下列表 表说明假如java 传给flash 的参数是自定义Bean类型时,客户端接收到的是Object 类型 当被调用的方法没有返回值时把responder 设置为null 。具体怎么实现就不再雷述,请 看第二章的例子。 2.服务器调用客户端方法 不带返回的调用 新建eclipse 工程chapter3,并建立包first ,在包里新建一个类Application 并继承 ApplicationAdapter。Application 到代码如下: package first; import org.red5.server.adapter.Applic ationAdapter; import org.red5.server.api.IConnection; import org.red5.server.api.service.IServiceCapableConnection; public class Application extends ApplicationAdapter { @Override public boolean appConnect(IConnection arg0, Object[] arg1) { // TODO Auto-generated method stub callClient(arg0); return true; } private void callClient(IConnection conn){ if (conn instanceof IServiceCapableConnection) { IServiceCapableConnection sc = (IServiceCapableConnection) conn; sc.invoke("clientMethod", new Object[]{"One", 1}); Java actionscript null null int/float Number double Double boolean Boolean String String List Array Map Object Bean Object } } } 复制webapps 下的chapter2 文件夹,并改名为chapter3,把工程下class 目录下的first 拷贝覆盖以前 的first , 把red5-web.properties 中的/chapter2,替换为/chapter3。把web.xml 中的/ chapter2替换为/chapter3 重启red5。 新建chapter3 客户端项目,chapter.mxml 代码如下: 点击调试程序运行客户端,然后点击连接按钮可以发现输出“接收One2”表示服务器调用 客户端到方法成功。 服务器端还是只有俩个方法,当客户端连接时服务器调用appConnect,在appConnect里 调用callClient 。在callClient 中服务器调用客户端的方法clientMethod,并传给客户端俩个参数,一个 字符类型,一个数字类型。只有IServiceCapableConnection 类型的连接才可以调用客户端方法,所以 要先对连接类型进行强制转换。 再看客户端,有三个方法,因为不需要处理连接状态的变化事件所以用个空方法以便简单突出重点。用 户点击按钮连接,调用clickConnect 方法连接服务器。还有一个方法给服务器调用的,这个方法附着在 conn.client 上。因为ActionScript3 中NetConnection 是封闭的,无法直接把方法附着在其上,但他 的一个属性client 是Object 类型的,是动态的。 服务器不但可以调用客户端的方法,还可以把客户端方法处理的值返回给服务器。 理服务器调用客户端方法有返回值就就必须实现IPendingServiceCallback 接口,并调用方式 改为sc.invoke("clientMethod", new Object[]{"One", 1},this); this 是任意一个实现 IPendingServiceCallback 接口的类,在接口的resultReceived 方法中处理返回值。现在把上面 的类改成下面样子 package first; import org.red5.server.adapter.Applic ationAdapter; import org.red5.server.api.IConnection; import org.red5.server.api.service.IPendingServiceCall; import org.red5.server.api.service.IPendingServiceCallback; import org.red5.server.api.service.IServiceCapableConnection; public class Application extends ApplicationAdapter implements IPendingServiceCallback{ @Override public boolean appConnect(IConnection arg0, Object[] arg1) { callClient(arg0); return true; } private void callClient(IConnection conn){ if (conn instanceof IServiceCapableConnection) { IServiceCapableConnection sc = (IServiceCapableConnection) conn; sc.invoke("clientMethod", new Object[]{"One", 1},this); } } public void resultReceived(IPendingServiceCall arg0) { System.out.println(" 来自客户端到返回:"+arg0.getResult()); } } 把客户端的 private function clientMethod(str:String,num:Number):void{ Alert.show("接收"+str+(num+1)); } 改成 private function clientMethod(str:String,num:Number):String{ Alert.show("接收"+str+(num+1)); Return "客户端返回来的字符串"; } 测试可以从red5 的框里看到输出“客户端返回来的字符串"

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 6 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档