`

red5简介及基础知识

    博客分类:
  • Flex
阅读更多

 

  • 简介

 

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:连接对象。每个连接都有一个关联的客户端和域。连接可能是持续型、轮询型、或短暂型。建立此接口的目的,是为了给不同的子类,如 RTMPConnection,RemotingConnection,AJAXConnection, HttpConnection 等,提供基础通用的方法。它提供getClient()方法来获取客服端对象。

IScope :每个Red5应用程序至少有一个域,用来搭建处理器、环景、服务器之间的连接。域可以构成树形结构,所有客户端都可以作为其节点共享域内的对象(比如流和数据)。所有的客服端(client)通过连接(connection)连接到域中。对于单一域,每个连接对应一个客服端,每个客服端对应一个id,简单的应用,操作就针对一个id和一个连接进行。

IServiceCapableConnection :获取有效连接。代码中先获取到连接实例,然后判断是否是有效连接并强制类型转换,之后调取客户端相应函数。

IClient :客户端对象代表某单一客户端。一个客户端可以和同一主机下不同的域分别建立连接。客户端对象和HTTP session 很相像。可以使用IClientRegistry.newClient(Object[])方法来创建IClient对象。

ApplicationAdapter:ApplicationAdapter是应用层级的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   : bless<505629625@qq.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   : bless<505629625@qq.com>
	 * @param scope
	 */
	private void notifyAppConnect(IScope scope,String userName){
		//遍历所有链接到服务器的客户端
		Collection<Set<IConnection>> col = scope.getConnections();
		for (Set<IConnection> 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接口实现方法
	 */
	@Override
	public void execute(ISchedulingService arg0)
			throws CloneNotSupportedException {
                //运行定时任务的实际方法
		callEvery(this.getScope(),"运行下计划任务...");
	}
}
 
 
把这几种交互方式和基本概念掌握清楚,就能编写一个简单的聊天程序了。
 
 
 
1
3
分享到:
评论

相关推荐

    RED5&Flex流媒体应用实战开发课程2

    本系列教程注重实战,不仅讲解了Red5的基础知识让同学们快速入门,还加入了实战项目力求带领您进入flex,red5结合开发的天堂。  本教程有四大部分组成:第一部分讲项目前预备知识,在线播放器程序全程贯穿,后三个...

    Red5入门教程

    适合学习Red5的基本知识,详细阐述Red5的几个简单应用,表达清楚明白!

    RED5&Flex流媒体应用实战开发视频教程

    本系列教程注重实战,不仅讲解了Red5的基础知识让同学们快速入门,还加入了实战项目力求带领您进入flex,red5结合开发的天堂。  本教程有四大部分组成:第一部分讲项目前预备知识,在线播放器程序全程贯穿,后三个...

    RED5&Flex流媒体应用实战开发课程1

    本系列教程注重实战,不仅讲解了Red5的基础知识让同学们快速入门,还加入了实战项目力求带领您进入flex,red5结合开发的天堂。  本教程有四大部分组成:第一部分讲项目前预备知识,在线播放器程序全程贯穿,后三个...

    linux基础知识,redflag的试题库

    linux基础知识,redflag的试题库

    Red Hat Linux 9.0基础教程

    详细介绍了Red Hat Linux 9.0基础知识,覆盖面广,包括命令,shell脚本,linux基本编程,网络连接等

    Red Hat Enterprise Linux 5基础教程 ppt

    本书以Red Hat公司最新推出的Red Hat Enterprise Linux 5为对象,由浅入深、循序渐进地对Linux操作系统的使用方法做了详细的介绍。本书共分为11章,内容涉及Linux操作系统简介和安装、图形桌面系统的使用、办公软件...

    Red Hat linux9 基础教程

    详细了介绍了Red Hat linux9 的基础知识

    Red Hat Linux 入门指南

    所讨论的课题包括:使用图形化桌面环境管理文件和目录处理文档使用万维网和电子邮件使用数码照相机 在熟练了 Red Hat Linux 系统的基础知识之后,你可能想学习些关于高级课题的知识。这些知识可以在 《Red Hat Linux...

    PDF: Practical Node-RED Programming

    了解了基础知识之后,您将探索各种可视化编程技术,并在覆盖Web开发,IoT开发和云服务连接的过程中,了解如何制作示例流程,并最终构建有用的实际应用程序。 到本书结尾,您将学习如何使用Node-RED从头开始开发真实...

    [2008.02]Red Hat Linux用户基础

    全书结合最新红帽企业版linux 5(rhel 5)操作系统,从零开始深入透彻地讲解linux系统的基础知识,同时也结合传统unix操作系统讲解相关知识。通过本书读者可以学习到如何有效使用linux系统,理解并掌握命令行功能、...

    IBM LDAP一些基础知识

    IBM LDAP一些基础知识及red book for LDAP

    Red Hat Enterprise Linux 5基础教程

    大学生学习linux 的入学课程,设计成适合所有专业的学生的学习,知识点全面,语音精练,深入浅出,是学习Linux必备PPT。

    Red Flag Server 4.1.pdf

    《Red Flag Server 4.1 系统管理手册》中涉及的系统管理基础知识及相关系统管理主题对理解本 手册的内容很有帮助,建议先阅读它。 印刷惯例 《Red Flag Server 4.1 高级管理手册》用不同的字体、大小和风格代表...

    linux基础教程 red hat linux 版

    主要详细的将了red hat linux系统的一些基础知识 linux系统概述 linux系统文件系统 linux下c编程

    Linux基础知识(详细).ppt

    Linux,全称GNU/Linux,是一套免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·...Linux有上百种不同的发行版,如基于社区开发的debian、archlinux,和基于商业开发的Red Hat Enterprise Linux、SUSE、oracle li

    Red摄影零基础相机入门课程-视频教程网盘链接提取码下载.txt

    Red摄影零基础相机入门课程是为零基础...通过系统的教学,学员将学习相机操作、曝光调节、构图技巧等基础知识,掌握拍摄技巧和表达方式。课程注重实践操作,帮助学员快速提升摄影水平,轻松入门摄影领域。 视频大小:1G

    EMC基础知识介绍.pdf

    EMC基础知识介绍.pdf

    Learn-Red-Fundamentals-of-Red:学习红色-红色基础知识,由Packt发布

    学习红色-红色基础知识这是发布的“ 的代码库。 它包含从头到尾完成本书所必需的所有支持项目文件。关于这本书当今软件开发的关键问题是软件膨胀,在软件编码和部署中需要庞大的工具链和开发环境。 Red通过提供极简...

    Linux学习教程之 Red Hat Linux 基础教程

    详细介绍linux的基础知识,是学习linux入门的好资料,word版本,方便阅读。

Global site tag (gtag.js) - Google Analytics