Kurento Room 核心API

原创
2017/02/20 09:55
阅读数 1.6K

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: 错误简短描述的字符串
    
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部