读书人

《Red5 用户参考手册》之4:入门第三章

发布时间: 2012-08-17 02:08:34 作者: rapoo

《Red5 用户参考手册》之四:入门第三章 迁移指南
官方最新《Red5 用户参考手册》全套下载地址
本文档介绍了 Macromedia Flash 通信服务器/Adobe Flash 媒体服务器和 Red5 之间的 API 差异,目的是帮助我们将现有的应用转移至 Red5。
如果你还没有基于 Red5 的应用,请先阅读有关创建一个新的 Red5 应用程序的文档。
程序回调
当实现一个服务端的程序时,最重要的功能之一就是通知客户是否连接成功并等待应用程序的新实例的创建的通知。
IScopeHandler 接口
Red5 将这些行为指定在 IScopeHandler 接口 http://dl.fancycode.com/red5/api/org/red5/server/api/IScopeHandler.html。请阅读 API 文档来获得详细信息。
ApplicationAdapter 类
鉴于有些方法可能会在一个请求中多次被调用到(比如,连接可能会被客户端连接到的树中的每一个域都调用一次),类 ApplicationAdapter http://dl.fancycode.com/red5/api/org/red5/server/adapter/ApplicationAdapter.html 定义了附加方法。
这个类经常被用来作为新应用的基类。

以下是 FCS/FMS 的 application 类和 Red5 的 ApplicationAdapter http://dl.fancycode.com/red5/api/org/red5/server/adapter/ApplicationAdapter.html 类的方法的一个简单对比。

FCS / FMSRed5onAppStartappStart \\ roomStartonAppStopappStop \\ roomStoponConnectappConnect \\ roomConnect \\ appJoin \\ roomJoinonDisconnectappDisconnect \\ roomDisconnect \\ appLeave \\ roomLeave

app 相关方法是由主应用进行调用,room 相关方法则由应用程序的 room(比如,实例)来调用。
你也可以使用类 ApplicationAdapter http://dl.fancycode.com/red5/api/org/red5/server/adapter/ApplicationAdapter.html 来检查流、共享对象。
连接方法的执行顺序
假设你连接到 rtmp://server/app/room1/room2
首先,连接建立,用户"连接"所有域跨越至 room2:
1.app (-> appConnect)
2.room1 (-> roomConnect)
3.room2 (-> roomConnect)
连接建立以后,客户端对象被检索,如果是第一次连接,将"连接"域:
1.app (-> appJoin)
2.room1 (-> roomJoin)
3.room2 (-> roomJoin)
如果同一个客户端再次连接到同一个域,就只会调用 connect 方法。如果你恰好连接到同一些域,可能只会调用到一小部分的 join 方法,例如,rtmp://server/app/room1/room3 会触发
1.appConnect("app")
2.joinConnect("room1")
3.joinConnect("room3")
4.roomJoin("room3")
此时 appStart 仅在 Red5 启动时调用一次,它并不能像 FCS/FMS 那样卸载/加载程序。当第一个客户端连接到域时 roomStart 被调用。
接受/拒绝客户端
FCS/FMS 提供 acceptConnection 和 rejectConnection 方法来接受或者拒绝新的客户端。如若允许客户端连接,Red5 应用只需让 *Connect 方法返回 true 即可。
如果不允许某个客户端连接,可以调用由类 ApplicationAdapter http://dl.fancycode.com/red5/api/org/red5/server/adapter/ApplicationAdapter.html 实现的 rejectClient 方法。任何传递到 rejectClient 的参数作为返回给调用者的有状态对象的程序属性都是可用的。
当前连接和客户端

Red5 支持两种不同的方式来从一个被调用的方法中访问当前连接。连接可以用于获取活动客户端以及他连接到的域。第一种可能性(方式)就是使用"神奇的"Red5http://dl.fancycode.com/red5/api/org/red5/server/api/Red5.html 对象:

import org.red5.server.net.remoting.RemotingClient; import org.red5.server.net.remoting.IRemotingCallback; public class CallbackHandler implements IRemotingCallback {   void errorReceived(RemotingClient client, String method,                      Object[] params, Throwable error) {       // An error occurred while performing the remoting call.   }   void resultReceived(RemotingClient client, String method,                       Object[] params, Object result) {       // The result was received from the server.   } } String url = "http://server/path/to/service"; RemotingClient client = new RemotingClient(url); Object[] args = new Object[]{"Hello world!"}; IRemotingCallback callback = new CallbackHandler(); client.invokeMethod("service.remotingMethod", args, callback);


TODO:如何在应用中访问流?
原文链接:http://trac.red5.org/wiki/Documentation/UsersReferenceManual/GettingStarted/03-Migration-Guide。

读书人网 >互联网

热点推荐