Red5相关接口知识整理

来源:互联网 发布:破解软件密码公司 编辑:程序博客网 时间:2024/05/20 03:42

一直以为red5接口方面太过于混乱,以至于我在编码的时候我都不知道到底该用哪个接口,于是抽空将red5方面的接口作了以下整理

整理的接口只是适应我工作的需求,对于一些其他的接口,暂时没有归纳到整理的范畴,另外接口中提供的方法也并不是全部

首先,整个接口结构如下:


在这个结构图中,由于我需要的是处理流模块的东西,所以我重点关注的是IStreamAwareScopeHandler接口以及其实现类MultiThreadedApplicationAdapter

下面是接口以及类中的具体方法

           

处理流程是:appStart() --> roomStart() --> appConnect() --> appJoin() --> roomConnect() -->roomJoin()

真正到roomJoin()之后,我们就可以在这个room中获取连接当前room的Connection、scope以及client,当然如果没有重写room之类的方法,在整个app中也是可以获取的

当使用了推送流的同时会触发streamBoradcastStart(IBoradcastStream stream)方法以及关闭推送流时会触发streamBoradcastClose(IBoradcastStream stream)方法

如果是以"live"方式推送,可以触发streamPublishStart()方法,以“record”方式推送,会触发streamRecordStart()方法

IBroadcastStream接口中定义一些对流的信息处理的方法,接口图如下:

ClientBroadcastStream类实现了IBroadcastStream接口,其中有更详细地处理方法

ApplicationAdapter类介绍(参考地址)

MultiThreadedApplicationAdapter类,是Red5应用程序的基础类。它提供了操作SharedObjects 和 streams的方法,还有连接和服务列表,是一个应用程序基本的Iscope。它实现了IstreamAwareScopeHandler接口,提供了在应用程序种控制流的方法。它还提供了一个很有用的事件控制器,可以拦截流、授权用户访问等。可以在其子类中添加各种方法,在客户端上通过NetConnection.call()方法调用服务器端的方法。这与Flash Media Server不同,FMS需要将你的客户端方法保存在服务器端,Red5提供更方便的方式进行远程方法调用。

ApplicationAdapter类是MultiThreadedApplicationAdapter的子类。ApplicationAdapter使用单线程的方式进行方法调用的消息出来,所以其性能不如MultiThreadedApplicationAdapter。

这2个类的核心方法为:

public boolean appStart(IScope arg0):Red5应用程序启动时自动执行此方法,进行一些参数初始化,如声明连接数据库的资料等。

public void appStop(IScope arg0):Red5应用程序停止时自动执行此方法。

public boolean appConnect(IConnection arg0, Object[] arg1):当客户端连接本应用程序时自执行此方法。

public boolean appDisconnect(Iconnection conn):当客户端断开连接时自动执行此方法。(如关闭浏览器、关闭FLASH PLAYER等特殊情况,均会触发该方法)。

public boolean appJoin(IClient arg0, IScope arg1):当有新的连接加入进来时自动调用。

获取某客户在服务器端保留/设置的变量:首先要通过Red5.getConnectionLocal()方法获得Iconnection对象,然后调用它的getClient()方法获得Client对象,再通过Client对象的getAttributes(“var_name”) 方法获得对应的变量的值。


主要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 为您的远程请求提供了更加方便快捷的操作方法。


另外red5中的一些其他概念以及模型,参考这篇博客(red5简介)



0 0