RED5安装与配置.docx
- 文档编号:28730101
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:32
- 大小:504.11KB
RED5安装与配置.docx
《RED5安装与配置.docx》由会员分享,可在线阅读,更多相关《RED5安装与配置.docx(32页珍藏版)》请在冰豆网上搜索。
RED5安装与配置
RED5将所有的应用程序都放在RED5根目录下的”webapps“目录。
你需要为所创建的程序在webapps目录下添加相应的目录。
在你的应用程序目录里应该有一个名为”WEB-INF“的目录,用来存放你的程序的配置文件。
在”doc/templates/myapp“目录有一个模板,可以用来帮你完成建立程序的初始工作。
RED5启动的时候,在”webapps”目录的程序文件都是搜索”WEB-INF”的目录下的配置文件来完成配置的。
最主要的配置文件是”web.xml”。
这个文件里包含了以下参数:
globalScope:
指定全局作用范围
1.
2.
3.
4.
contextConfigLocation:
指定配置handler的文件的位置。
这些配置文件描述了客户端加入/离开的动作触发后调用的处理方法,作用范围。
在描述的时候可以使用通配符来描述多个文件:
1.
2.
3.
4.
locatorFactorySelector:
程序的根上下文,通常是”red5.xml”
1.
2.
3.
4.
parentContextKey:
父级上下文,通常是”default.context”
1.
2.
3.
4.
log4jConfigLocation:
日志配置文件的位置
1.
2.
3.
4.
webAppRootKey:
程序的全局唯一名
1.
2.
3.
4.
对于每一个Handler配置文件最少需要有三个bean
Context:
用来影射路径到某个作用范围、搜索服务和Handler,它有一个保留的名字”web.context”。
其默认的类为org.red5.server.Context
1. 2.autowire=“byType“/> 对于没有一个应用程序只应该有一个Context,但是同一个Context可以被多个作用范围共享 Scope: 每一个应用程序最少有一个作用范围,用来将handler连接到context和服务器。 作用范围可以建立一棵树,每一个客户端连接到树上的一个节点,而共享对象存在于作用范围里。 可以把作用范围看作是聊天室或者程序实例。 默认的作用范围通常是web.scope,不过这名字是可以任意取的。 对于bean有以下属性: server: 与全局服务器”red5.server”相关。 parent: 指定当前作用范围的父范围,通常是”global.scope” context: 当前作用范围的服务器上下文,一般指定为”web.context” handler: 对应当前作用范围的handler contextPath: 用来连接到当前作用范围的路径 virtualHosts: 一个主机名或IP的列表,用来描述虚拟主机的位置,列表项目之间用逗号分隔开。 1. 2.init-method=“register“> 3. 4. 5. 6. 7. 8. 9. 为了应用程序配置方便的需要,可以将”contextPath“和”virtualHosts“放到另外一个单独的属性文件里边,而在这里使用变量来表示,为此需要添加一个特别的bean来指定属性文件的位置。 1. 2. 3. 假设在属性文件red5-web.properties里有如下的数据: 1.webapp.contextPath=/myapp 2.webapp.virtualHosts=localhost,127.0.0.1 则上边的bean的”contextPath“和”virtualHosts“属性即可使用变量来指定值 1. 2. 对于”contextPath“可以视为是一个根作用范围。 你可以在配置好的”contextPath“路径后边随意添加其他的路径,而连接到这些路径的客户端将动态创建另外的作用范围,这些作用范围使用的是同样的handler,但拥有自己的属性、共享对象和活动流。 handler: 每一个上下文需要一个handler来响应用户连接、离开作用范围时的动作,handler实现了很多方法,用户可以调用以达到特定的目的。 这个handler必须实现”org.red5.server.api.IScopeHandler“接口,当然针对共享对象和流的访问还应该实现其他的接口。 在”org.red5.server.adapter.ApplicationAdapter“可以找到一个能够用作基类的例子,同时还应该多多参照文档以得到更多细节。 某个作用范围的handler可以如下指定: 1. 2.class=“the.path.to.my.Application“ 3.singleton=“true“/> 其中”id“属性是上边定义的作用范围里指定的。 如果你不需要任何服务端的逻辑处理,可以使用Red5默认提供的handler 1. 2.class=“org.red5.server.adapter.ApplicationAdapter“ 3.singleton=“true“/> handler的例子 1.packagethe.path.to.my; 2.importorg.red5.server.adapter.ApplicationAdapter; 3.publicclassApplicationextendsApplicationAdapter{ 4.publicDoubleadd(Doublea,Doubleb){ 5.returna+b; 6.} 7.} 这里假设使用上边的配置,则在客户端调用的时候使用以下方式 1.nc=newNetConnection(); 2.nc.connect(“rtmp: //localhost/myapp“); 3.nc.onResult=function(obj){ 4.trace(“Theresultis“+obj); 5.} 6.nc.call(“add“,nc,1,2); 返回因该有输出: Theresultis3 /////////////////////////////////////////////////////////////// 基于red5的在线视频录制实例和详细注释 最近在学校做毕业设计 顶着压力,昨天晚上研究了一个晚上red5和as3发现还是蛮有意思的 red5和fms都是个不错的东西,发现在压力下学东西学起来特别快哈 //预定义声明 importmx.utils.Delegate; //创建一个基本的网络连接对象 varnc: NetConnection=newNetConnection(); //连接到本地的Red5服务器 nc.connect("rtmp: //localhost/online"); //将已和red5服务器建立连接的nc传递给NetStream varns: NetStream=newNetStream(nc); //从摄像头和麦克风取得信息 varcam: Camera=Camera.get(); varmic: Microphone=Microphone.get(); //初始化摄像头和麦克风,调用函数 setupCameraMic(); //保存上次录制的内容,并进行清空 varlastVideoName: String=""; //监听开始录制和停止录制两个按键的点击动作并进行相应的处理 playButton.addEventListener("click",Delegate.create(this,playClick)); stopButton.addEventListener("click",Delegate.create(this,stopClick)); //定义开始录制的playclick函数 functionplayClick(): Void { //此flv文件是保存在webapps/oflaDemo/streams/文件夹 //将摄像头和麦克风赋给ns ns.attachVideo(cam); ns.attachAudio(mic); //将摄像头信息赋给视频显示窗口,这样我们可以即时看到信息 videoContainer.attachVideo(cam); //此处是定义存储名字的,用随机数目获得一个唯一的文件名 lastVideoName="red5RecordDemo_"+random(getTimer()); ns.publish(lastVideoName,"record"); //锁定开始按键使其失效 playButton.enabled=false; //锁定停止按键使其生效 stopButton.enabled=true; } functionstopClick(): Void { //关闭ns与red5的连接 ns.close(); //并清空视频显示窗口 videoContainer.attachVideo(null); videoContainer.clear(); //锁定开始按键使其生效 playButton.enabled=true; //锁定停止按键使其失效 stopButton.enabled=false; //播放已经录制的视频 playLastVideo(); } functionplayLastVideo(): Void { //传递录制的视频信息给视屏显示窗口 videoContainer.attachVideo(ns); //回访已经上次录制的视频片段 ns.play(lastVideoName); } functionsetupCameraMic(): Void { //启动摄像头 cam=Camera.get(); //设置尺寸 cam.setMode(320,240,30); //设置录制质量 cam.setQuality(0,70); //启动麦克风 mic=Microphone.get(); mic.setRate(44); } /////////////////////////////////////////////////////////////// 公司今天需要装一台RED5的服务器用来开发程序。 发现RED5的0.6已经正式放出,以前我写过一篇关于用SVN进行抽取,然后建立RED5项目的文章。 而对于一般的开发者来说,不需要去修改RED5本身的程序,只需要建立自己的应用程序就可以了。 现在把建立过程记录下来,希望对各位有所帮助。 本文适合第一次接触RED5(WIN平台下),而不知道如何开始建立自己的应用程序的用户。 流程: 1.下载最新版本的RED5 http: //osflash.org/red5 2.安装RED5,注意在安装RED5前要先安装好JRE,安装RED5的时候会要求指定JRE的目录的。 3.到RED5的安装目录,找到doc/templates目录,该目录中存放了一个标准的RED5应用程序模版myapp,将其复制到RED5安装目录中的webapps目录下,并改名为你喜欢的文件夹名,比如你要开发一个聊天的程序,那么可以把myapp改为myChat,这个名字就是以后你要连接的服务名了。 4.在WEB-INF中新建一个文件夹src用来存放程序的源代码,新建一个classes文件夹用来存放编译后的文件。 5.打开Eclipse,将工作区指定为RED5安装目录下webapps,然后新建一个项目,项目名为myChat.这个时候你应该发现刚才myChat中的文件都被加载进来了,我们首先把src目录指定为源代码目录,右键选择src,在弹出的菜单中选择BuildPath->UseasSourceFolder,即将其指定为代码文件夹。 接下来要指定项目的目标目录,在项目名上右键选择Properties,选择JavaBulidPath,在选择Source标签,在下面的Browse中选择Classes目录,将其指定为目标目录。 然后选择Libraries,点击AddExternalJARs,将RED5安装目录下的red5.jar包含进来。 6.这个时候,在Eclipse的左边应该多了WEB-INF/src这样一个东东,我们将要在这里开始写入我们的第一个项目代码。 右键选择它,在弹出的菜单中选择New->Package,新建一个包,举例,包名可以为org.d5.first,然后再在生成的org.d5.first这个包上继续右键选择New->File,输入文件名Application.java。 并在建好的文件中输入以下代码: packageorg.d5.first; importorg.red5.server.adapter.ApplicationAdapter; publicclassApplicationextendsApplicationAdapter{ publicStringlogin(){ return"WelcometoChatServers"; } } 7.进行配置。 编辑WEB-INF下的red5-web.xml,找到beanid=”web.handler”一句,将class=”XXX”中的XXX位置修改为org.d5.first.Application,这样本程序将以刚才写的Application来运行。 删除后面的beanid=”server.handler…整句,因为我们暂时用不到这个东东。 编辑web.xml,找到webAppRootKey,将其下面的param-value标签中的值修改为/myChat。 编辑red5-web.properties,将第一句修改为webapp.contextPath=/myChat 8.编译项目 9.重新启动RED5服务器 10.在FLASH中新建一个文件,输入以下代码: import.NetConnection; import.Responder; varresponder: Responder=newResponder(chat); varnc: NetConnection=newNetConnection(); nc.connect("rtmp: //localhost/mytest"); nc.addEventListener(NetStatusEvent.NET_STATUS,statusHandler); functionchat(obj: Object): void{ trace(obj); } functionstatusHandler(event: NetStatusEvent): void { trace(event.info.code); switch(event.info.code) { case"NetConnection.Connect.Success": trace("Theconnectionwasmadesuccessfully"); break; case"NetConnection.Connect.Rejected": trace("sorry,theconnectionwasrejected"); break; case"NetConnection.Connect.Failed": trace("Failedtoconnecttoserver."); break; } } nc.call("login",responder); 运行程序,显示结果为WelcometoChatServers。 第一个RED5应用程序诞生了,呵呵: ) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 忙了好几天,最近也算把Red5服务器服务端基本搞定了。 为了熟悉服务端代码,以及了解API,我仿照着FMS的模式做了一个多人聊天室。 基本实现了视频、群聊、私聊几个基本功能。 看到网上似乎还没有人放出这类的源代码,我索性就先当回螃蟹吧! 我们先来看代码: 服务端: Application.java packageorg.jerry.videochat; importjava.util.*; importorg.red5.server.adapter.ApplicationAdapter; importorg.red5.server.api.IConnection; importorg.red5.server.api.IScope; importorg.red5.server.api.service.IServiceCapableConnection; importorg.red5.server.api.so.ISharedObject; publicclassApplicationextendsApplicationAdapter{ //属性 privateIScopeappScope; privateStringusername; privateISharedObjectlistSO; privateISharedObjectmsgSO; privateMap //方法 //此应用开始运行时触发的方法 publicbooleanappStart(IScopeapp){ if(! super.appStart(app)){ returnfalse; } appScope=app; returntrue; } //客户端连接的时候触发的方法 publicbooleanappConnect(IConnectionconn,Object[]params){ username=(String)params[0]; //登入时将连接ID和连接信息形成对应关系并存入在线列表 Stringlink_id=conn.getClient().getId(); onLineClient.put(username,conn); //为用户列表共享对象添加属性 //创建用户列表共享对象 listSO=getSharedObject(appScope,"listSO",false); //创建用户聊天内容共享对象 msgSO=getSharedObject(appScope,"msgSO",false); listSO.setAttribute(link_id,username); returntrue; } //广播消息 public
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- RED5 安装 配置