Rooms API是基于Room Manager抽象。 管理员可以在Kurento技术的协助下组织和控制多方组呼叫。
我们将此库理解为任何希望实现Room服务器端应用程序开发人员的SDK。
Room Manager的Java API负责处理房间和媒体特定的细节,使程序员免于底层或重复任务(每个多会议应用程序固有的),并允许程序员更多地关注应用程序的功能或业务逻辑。
理解 API
manager处理两个主要概念:
- rooms : 虚拟对等体组,其目的是限制组中只能有唯一标识的用户。 为了识别它们,我们使用他们的名字作为标识。
- participants: 终端用户的虚拟表示。 应用程序将提供唯一足以标识此参与者级别的字符串表示。
使用我们的API的应用程序的性质,预期是终端用户尝试连接到现有房间(或创建新房间)并发布或接收来自其他同行的媒体流。
使用此SDK时,应用程序的工作是接收来自最终用户端的消息并将其转换为Room Manager实例的请求。
一些API的方法不仅处理房间管理,而且还与参与者需要的媒体功能。 底层媒体处理通过称为Kurento客户端的库来执行,该库可以在管理器创建的一些媒体对象满足某些条件时引发事件。 反过来,通过处理这些事件收集的信息时可能需要通知给终端用户。 管理器通过使用称为Room Handler的接口通知应用程序最重要的事件,应用程序必须为其提供实现。
我们提供两种类型的Room Manager,它们暴露几乎相同的接口(相同的方法名称,但具有不同的签名):
- org.kurento.room.RoomManager: 默认实现。
- org.kurento.room.NotificationRoomManager:用于将通知或响应返回给客户端模型的实现。
RoomManager
创建新(常规)的房间room manager有两个要求,他们提供的实现:
- 负责由内部媒体对象触发的事件的房间处理程序
- Kurento Client Manager将用于获取Kurento客户端实例
对于客户端发起的请求,需要应用程序通知远程方执行请求的结果,如当其中一个请求发布他的媒体时通知房间中的所有参与者。
还有另一种类型的方法来处理应用程序发起的请求(或业务逻辑),在这种情况下,应用程序是否自由解析结果并对其进行操作。
Events - RoomHandler
为了对媒体对象引发的事件(例如收集的新ICE候选或媒体错误)采取行动,应用程序必须提供事件处理程序。 一般来说,这些是面向用户的事件,因此应用程序应该通知相应的用户。
Room and RoomHandler 的关联
以下是详细说明Room Handler中的方法的服务器事件的表。
Events | RoomHandler |
---|---|
gathered ICE candidate | onSendIceCandidate |
pipeline error | onPipelineError |
media element error | onMediaElementError |
NotificationRoomManager
在实例化NotificationRoomManager时有两个要求,他们将提供以下实现:
- 通信接口,其可以将消息或通知发送回应用的最终用户和/或NotificationRoomManager事件处理器,其将控制通知的生命周期
- Kurento Client Manager用于获取Kurento客户端的具体实例
房间事件处理程序被设计为 从处理用户请求得到的结果 提供 对应用程序的反馈。
通知管理API考虑两种不同类型的方法:
-
服务器域 - 由实现应用程序逻辑层和与房间SDK集成的方法组成。 这些方法将同步执行。 他们可以被看成是帮助或管理方法,并直接控制房间。
-
客户端域 - 传入用户请求而调用的方法,它们实现客户端端点的房间规范。 它们可以异步执行,调用者不应该期望结果,但如果需要进一步分析和处理客户端的请求,则使用响应处理程序。
下图描述了使用通知房间管理器时组成系统的组件:
Notifications design - UserNotificationService
该规范规定,房间管理者可以将通知或响应返回给远程对等体,同时保持与传输层或通信层隔离。 通知API由NotificationRoomHandler(类DefaultNotificationRoomHandler)实现。
API的方法是基于JSON-RPC协议及其消息格式定义的。 客户端 - 服务器通信使用此协议是预期的但不是必需的。
开发人员需要为此API提供实现。
如果开发人员选择另一种机制与客户端通信,他们将不得不使用自己的NotificationRoomHandler实现,这将完全从房间API中解除通信细节。
Notifications design - NotificationRoomHandler
通过该接口,房间API将客户端原生执行结果传递给应用程序,并从那里传递给客户端。 遵守契约是用用开发人的义务。 这些方法都返回void。
在用户请求范围之外发生的事件,将调用几个方法:room关闭,user evicted。继承自RoomHandler接口。
NotificationRoomManager and NotificationRoomHandler relations
下面是一个表,详细说明了来自NotificationRoomManager的方法,它将使用NotificationRoomHandler(也是继承的方法)中的方法。
NotificationRoomManager | NotificationRoomHandler |
---|---|
joinRoom | onParticipantJoined |
leaveRoom | onParticipantLeft |
publishMedia | onPublishMedia |
unpublishMedia | onUnpublishMedia |
subscribe | onSubscribe |
unsubscribe | onUnsubscribe |
sendMessage | onSendMessage |
onIceCandidate | onRecvIceCandidate |
close room (Server action) | onRoomClosed |
evict participant (Server action) | onParticipantEvicted |
gathered ICE candidate (Server event) | onSendIceCandidate |
pipeline error (Server event) | onPipelineError |
media element error (Server event) | onParticipantMediaError |
KurentoClientProvider
此服务的设计使得Room Manager可以随时获取Kurento Client实例,而无需了解KMS实例的位置。
它留给开发人员提供这个接口的实现。
POJOs
以下类用于Rooms API定义的请求和响应中。
-
UserParticipant:将参与者的用户名标识符和一个标志相关联,该标志告诉用户当前是否为流媒体。
-
ParticipantRequest:将参与者的标识符与请求id(通信级别请求的可选标识符,包括响应回到客户端 时;是可空的,并且将被复制)一起链接。 用于Room Manager变化通知。
-
RoomException:运行时异常包装器,包括:
code:发生的错误类型的code message: 错误简短描述的字符串