网站建设鼠标点击变色怎么弄,万能浏览器,做一个微信公众号需要多少钱,常见的网络营销推广方法有哪些简介 Red5的主要功能和Macromedia公司的FMS类似#xff0c;提供基于Flash的流媒体服务的一款基于Java的开源流媒体服务器。它由Java语言编写#xff0c;使用RTMP作为流媒体传输协议#xff0c;这与FMS完全兼容。它具有流化FLV、MP3文件#xff0c;实时录制客户端流为FLV文件… 简介 Red5的主要功能和Macromedia公司的FMS类似提供基于Flash的流媒体服务的一款基于Java的开源流媒体服务器。它由Java语言编写使用RTMP作为流媒体传输协议这与FMS完全兼容。它具有流化FLV、MP3文件实时录制客户端流为FLV文件共享对象实时视频播放、Remoting等功能。用Red5替换FMS后,客户端不用更改可正常运行。 提供red5相关的链接 官网http://www.red5.org/ 下载地址http://www.red5.org/downloads/ 相关实例http://trac.red5.org/wiki/Examples 相关文档http://trac.red5.org/wiki/Documentation 运行部署实例 目前red5最高版本是1.0RC1我用的是0.9.1Final版red5具体使用例子网上有很多在这我推荐一个网址作者做了一个red5入门的视频非常适合新手入门 http://plter.com/archives/524 注如果red5还未入门不建议看后面的内容。 ApplicationAdapter类 ApplicationAdapter类是MultiThreadedApplicationAdapter的子类。ApplicationAdapter使用单线程的方式进行方法调用的消息出来所以其性能不如MultiThreadedApplicationAdapter。MultiThreadedApplicationAdapter类是Red5应用程序的基础类。它提供了操作SharedObjects 和 streams的方法还有连接和服务列表是一个应用程序基本的Iscope。通常应用开发一般会继承ApplicationAdapter类。 在开发中我们经常会接触如下几个方法这些方法都是通过MultiThreadedApplicationAdapter实现 //Red5应用程序启动时自动执行此方法
public boolean appStart(IScope arg0) //Red5应用程序停止时自动执行此方法 public void appStop(IScope arg0) //flex客户端连接项目时自动运行的方法 public boolean appConnect(IConnection arg0, Object[] arg1) //flex客户端与服务器断开连接时触发的方法 public void appDisconnect(IConnection arg0) //flex客户端与服务器连接时运行与appConnect比较类似 public boolean appJoin(IClient arg0, IScope arg1) //flex客户端与服务器断开时运行与appDisconnect类似 public void appLeave(IClient arg0, IScope arg1) Red5关键API Red5提供了很多接口供开发人员进行二次开发 IConnection连接对象。每个连接都有一个关联的客户端和域。连接可能是持续型、轮询型、或短暂型。建立此接口的目的是为了给不同的子类如 RTMPConnectionRemotingConnectionAJAXConnection HttpConnection 等提供基础通用的方法。它提供getClient()方法来获取客服端对象。 IScope 每个Red5应用程序至少有一个域用来搭建处理器、环景、服务器之间的连接。域可以构成树形结构所有客户端都可以作为其节点共享域内的对象比如流和数据。所有的客服端(client)通过连接(connection)连接到域中。对于单一域每个连接对应一个客服端每个客服端对应一个id简单的应用操作就针对一个id和一个连接进行。 IServiceCapableConnection 获取有效连接。代码中先获取到连接实例然后判断是否是有效连接并强制类型转换之后调取客户端相应函数。 IClient 客户端对象代表某单一客户端。一个客户端可以和同一主机下不同的域分别建立连接。客户端对象和HTTP session 很相像。可以使用IClientRegistry.newClient(Object[])方法来创建IClient对象。 ApplicationAdapterApplicationAdapter是应用层级的IScope。若要处理流进程需实现 IStreamAwareScopeHandler接口中的相应处理方法。ApplicationAdapter还提供了有效的事件处理机制来进行截取流、确认用户等操作。同时其子类中引入的方法均可在客户端通过 NetConnection 调取。在Aodbe 的FMS 中必须在服务器端维护客户端对象与之相较Red5 为您的远程请求提供了更加方便快捷的操作方法。 简单实例 【flex客户端连接red5服务器】 Actionscript提供了NetConnection与服务器连接连接之后可以调用red5的方法也可以指定client对象供red5调用。 下面这段代码是连接red5中某个自己创建的项目并且通过事件监听连接状况 //创建NetConnection实例
var netConn:NetConnection new NetConnection();
//指定rtmp地址并且向服务器传递一个参数值hello
netConn.connect(rtmp://localhost/chatroom,hello);
//添加NetStatus事件监听连接
netConn.addEventListener(NetStatusEvent.NET_STATUS,function connStatus(e:NetStatusEvent):void{switch(e.info.code){//连接成功case NetConnection.Connect.Success:l_connStatus.text 连接成功;break;//服务器断开case NetConnection.Connect.Closed:l_connStatus.text 连接断开;break;//能连上但被拒绝访问case NetConnection.Connect.Failed:l_connStatus.text 连接拒绝;break;default:break;}}); 把这段代码放到flex事件中当触发事件时就会连接red5. 【客户端调用服务器方法】 客户端调用服务器方法非常常用有时你会主动向服务器获取视频资源或者向服务器发送消息信息。 NetConnection的call(command:String,responder:Responder,...arguments)用于调用服务器方法 command 指定被调用的服务器的方法名 responder 可选对象用于处理服务器的返回值这是回调的形式所以需要实例化Responder对象然后在对象体内创建一个方法获取服务器返回值如果没有返回值则方法参数为空即可。 arguments 可选参数当在远程应用程序服务器上执行 command 参数中指定的方法时这些参数将被传递给该方法 下面这段代码介绍向服务器发送消息的方法 /*** 发送消息* */protected function sendMsg():void{netConn.call(sendMessage,new Responder(function result():void{}),uName,txt_msg.text);} 服务器必须有一个sendMessage方法并且带两个参数以获取客户端传入的参数值 public void sendMessage(String userName,String message){....
} 因为当前方法没有返回值所以Responder内的result方法参数为空假如sendMessage方法返回String则需要把Responder改成这样 new Responder(function result(str:String):void{....
}) 【服务器调用客户端】 比如一个会议系统某个客户端下线服务器必须及时通知其它客户端该客户下线的通知所以必须主动访问客户端。 客户端为了允许服务器调用需要在NetConnnection中指定client属性该属性就是指定服务器能访问客户端的对象范围可以指定某个方法也就是服务器只能访问那个方法也可以把整个mxml对象都指定为client这样服务器就可以访问mxml对象内的元素了。 通常指定client是在连接服务器的时候 //指定连接client方便red5调用当前客户端的方法
netConn.client this; 在flex中创建一个普通的方法 /*** 【供red5调用的方法】* 客户端与red5连接时red5向客户端返回的消息* */public function connection_msg(str:String):void{Alert.show(str);} red5服务器端需要IServiceCapableConnection.invoke调用客户端它是IConnection的子接口所以只要找到IConnection就可以调用IServiceCapableConnection了 invoke(String str,Object[] objs)方法第一个参数表示客户端的方法名第二个参数表示客户端方法中必须传入的参数值。 public boolean appConnect(IConnection arg0, Object[] arg1) {callClient(arg0,通知客户端连接成功);return super.appConnect(arg0, arg1);
}/*** Function : red5调用客户端connection_msg方法返回相应信息* author : bless505629625qq.com* param conn* param str*/private void callClient(IConnection conn,String str){if(conn instanceof IServiceCapableConnection){IServiceCapableConnection sc (IServiceCapableConnection) conn;sc.invoke(connection_msg, new Object[]{str});}} 【通知其它在线用户】 通过IConnection.getScope()获取域中其它用户再一次迭代通知每一个域中的客户 public boolean appConnect(IConnection arg0, Object[] arg1) {//通知其它用户该用户上线notifyAppConnect(arg0.getScope(),用户A上线啦);
}/*** Function : 通知其它客户用户上线信息* author : bless505629625qq.com* param scope*/private void notifyAppConnect(IScope scope,String userName){//遍历所有链接到服务器的客户端CollectionSetIConnection col scope.getConnections();for (SetIConnection set : col) {for (IConnection iConnection : set) {//通知有所客户端上线用户信息if(iConnection instanceof IServiceCapableConnection){IServiceCapableConnection sc (IServiceCapableConnection) iConnection;sc.invoke(otherConnection_msg, new Object[]{userName});}}}} 【服务器指定计划任务】 计划任务可以让服务器定时循环做一些事比如定时向客户端发送消息提示之类的。 MultiThreadedApplicationAdapter.addScheduledJob(int interval, IScheduledJob job) interval表示多少毫秒运行一次该计划但是是毫秒哦 job是IScheduledJob接口你必须实现IScheduledJob接口 比较常用的方式是在当前服务器核心类实现IScheduledJob接口并且重写execute(ISchedulingService arg0)方法 public class HelloRed5 extends ApplicationAdapter implements IScheduledJob{public boolean appStart(IScope arg0) {System.out.println(启动 appStart);//添加计划任务this.addScheduledJob(10000, this);return super.appStart(arg0);}/*** IScheduledJob接口实现方法*/Overridepublic void execute(ISchedulingService arg0)throws CloneNotSupportedException {//运行定时任务的实际方法callEvery(this.getScope(),运行下计划任务...);}
} 把这几种交互方式和基本概念掌握清楚就能编写一个简单的聊天程序了。