Kurento媒体服务器提供了一套API给高级语言使用,以用于应用程序开发人员来控制它。这些API可以被用于Java或Javascript开发的Kurento 客户端。如果你更喜欢其它开发语言,你可以使用基于 WebSocket 或JSON-PRC 的Kurento协议。
在下面的章节中,我们将讲解Kurento API, 我们将显示Kurento媒体服务器提供给客户端的媒体能力。 如果你想看使用kurento的工作DEMO,你可以翻到前面看示例教程。
媒体元件和媒体管道
对于应用程序开发人员来说,Kurento提供了两个概念来作为构建模块:
媒体元件
媒体元件是对媒体流执行指定动作的功能单元。对于应用程序开发人员来说,媒体元件是每个能力的一种实现方式,它表示为自包含的"黑箱", 开发人员在使用时,不需要理解底层的实现细节。 媒体元件具有从其它元件(通过媒体源)接收媒体以及发送媒体到其它元素(通过媒体sink)的能力。 依赖于它们的能力,媒体元件可划分成不同的类型:
-
输入端点: 指具有接收媒体并注入到管道能力的媒体元件。有多种类型的输入端点。文件输入端点用来从文件获取媒体;网络输入端点用来从网络获取媒体; 捕捉输入端点有直接从摄像头或其它类型的硬件源上捕捉媒体流的能力。
-
滤镜:指负责媒体转码或分析的媒体元件。因此,滤镜的功能包括混合流,混间,分析,填充等
-
集线器:指负责管理一个管道中多个媒体流的媒体对象。 一个集线器可以有多个集线端口,以连接多个媒体元件。依据集线类型,可以有多种方式来控制媒体。例如,Composite集线器可以将多个输入视频流合并到一个唯一的输出视频流。
-
输出端点: 指具有将媒体流从管道中输出的能力的媒体元件。因此,也有多种类型的输出端点,如文件,网络,屏幕等。
媒体管道:
媒体管道是一个媒体元件的链,在这个链中,输出流是由一个源元件输入到一个或多个其它媒体元件处理后再输出的。 因此,管道表示能执行一系列流操作的机器。
例子实现了从一个WebRtcEndpoint接收媒体流,叠加一个图像到侦测到的人脸上并返回结果流的交互式多媒体应用。
Kurento API是面向对象的API,因此,有一些类需要实例化。这些类定义的操作可以被这个类的对象所引用 。这些类和其它相关类是继承关系,继承操作是从父类到子类的。
下面的类图显示了Kurento API中主类的关系。
从图中可以看出,Endpoint, Filter,HubPort的父类是MediaElement,而媒体元件、媒体管道,集线器的父类都是MediaObject。另外,媒体管道可拥有多个媒体元件,Hub可以拥有多个HubPort,而MediaObject可以拥有一个媒体管道。
端点
先来讨论Kurento提供的不同种类的端点。
WebRtcEndpoint 是一种有输出和输入的端点,它通过Web为RTC(Real Time Communictions)提供媒体流。它为浏览器间的通信实现了WebRTC技术。
** RtpEndpoint **是一种有输出和输入的端点。它为两个远程的网络节点,通过RTP协议,提供双向的内容传输能力。正如你所想的,为了通过网络发送和接收媒体,它使用了RTP协议,并使用 SDP 做媒体协商;
** HttpPostEndpoint ** 是一种只有输入的端点,它使用http POST请求,就像HTTP文件上传功能那样,接收媒体流。
** PlayerEndpoint ** 是一种只有输入的端点,它从文件系统,Http URL 或 RTSP URL接收内容并将其注入到媒体管道中。
** RecorderEndpoint **是一种只有输出的端点。它提供了以可靠模式存储内容的功能,它包含音频和视频的媒体接收器垫。
下面的类图显示了主要的端点类的关系:
滤镜
滤镜是执行媒体处理,机器视觉,虚拟现实等的媒体元件。我们来看看Kurento提供的滤镜:
** ZBarFilter滤镜 ** 检查视频流的 QR 和 条形码。当发现有条形码时,滤镜会触发 CodeFoundEvent 事件,客户端可以添加一个对这个事件的监听器并执行相应的动作。
FaceOverlayFilter滤镜 检查视频流中的人脸,并在人脸上叠加一个可设置的图片。
GStreamerFilter滤镜 它是一个通用的滤镜接口,它能使 Kurento媒体管道使用GStreamer滤镜。
下面的类图显示了主要的滤镜类的关系:
集线器
集线器是负责管理管道中多媒体流的媒体对象。一个集线器可以有多个连接其它媒体元件的集线端口,我们来看下 Kurento 提供的集线器:
Composite 是一个混合多个输入的音频流,并与视频流组成网格集线器。
DispatcherOneToMany 是发送指定输入流到多个连接的输出集线端口的集线器。
** Dispatcher ** 是一个允许在任意输入-输出集线端口对做路由的集线器。
下面是集线器的类关系图:
Kurento Client的细节可以看文档 JavaDoc/JsDoc:
-
kurento-client-java : JavaDoc of Kurento Java Client.
-
kurento-client-js : JsDoc of Kurento JavaScript Client.
-
kurento-utils-js : JsDoc of an utility JavaScript library aimed to simplify the development of WebRTC applications.