功能模块¶
本页概述了Kurento提供的功能,以及指向最重要的文档页面的链接.
Kurento API, 客户端, 协议¶
Kurento Media Server 通过 Kurento API 的RPC接口暴露了所有功能. 任何使用兼容json的客户端都可以直接使用这个API,但是推荐的方式是使用 Kurento Client 库; 目前提供的库有 Java, Browser Javascript, 和 Node.js.
如果你想使用其他程序语言,你可以基于 WebSocket and JSON-RPC 按照 Kurento 协议 规范来编写自定义客户端程序.
下面图片展示了在下列三种场景中如何使用Kurento 客户端:
- 在兼容 WebRTC 的浏览器中直接使用Kurento JavaScript Client.
- 在Java EE 应用服务中使用Kurento Java Client.
- 在Node.js 服务中使用Kurento JavaScript Client.
这里有三种技术场景的完整案例 部分教程.
Kurento Client API基于 媒体元素 的概念. 媒体元素拥有特定的媒体功能. 例如,媒体元素 WebRtcEndpoint 拥有发送和接收WebRTC媒体流的能力; 媒体元素 RecorderEndpoint 拥有录制接收的媒体流存如文件系统的能力; FaceOverlayFilter 检测交换的视频流上的面部并在其上添加特定的重叠图像, 等等. Kurento 公开了丰富的媒体元素工具箱作为其API的一部分.
理解这些概念可以通过查阅 Kurento API 和 Kurento协议. 当然你还可以通过查阅已经实现的API参考文档: Kurento Client.
Kurento 模块¶
Kurento被设计成是一个可插拔的框架. Kurento 媒体服务将 kms-core, kms-elements 和 kms-filters 作为默认模块.
此外,还有其他内置模块可以增强Kurento Media Server提供的功能。这些模块分别是 kms-crowddetector, kms-pointerdetector, kms-chroma, 和 kms-platedetector.
最后, Kurento媒体服务可以通过自定义模块来扩展.
获取更多信息可查阅 Kurento Modules.
RTP 流¶
除了WebRTC连接,Kurento Media Server还能够管理标准RTP流,允许将KMS实例连接到各种设备.
处理RTP连接时需要注意两个点:KMS实现的自动拥塞控制算法 (阅 拥塞控制 / REMB), 和 NAT 遍历功能 (阅 NAT穿透).
拥塞控制 / REMB¶
Kurento 是基于 Google Congestion Control 算法实现的, 所以它能够生成并解析 abs-send-time
RTP 头信息 和 REMB RTCP 消息.
通过在SDP Offer船体媒体级属性 goog-remb
来校验通过 . 案例:
v=0
o=- 0 0 IN IP4 127.0.0.1
s=-
c=IN IP4 127.0.0.1
t=0 0
m=video 5004 RTP/AVPF 103
a=rtpmap:103 H264/90000
a=rtcp-fb:103 goog-remb
a=sendonly
a=ssrc:112233 cname:user@example.com
a=rtcp-fb
是 RTCP 反馈 能力属性, 如定义 RFC 4585.
KMS在连接的发送方和接收方之间实现REMB传播.这意味着当KMS用作视频发送方与一个或多个视频接收方之间的代理时,来自接收方的最小REMB值将被转发给发送方. 这允许发送方选择较低的比特率,以容纳在另一侧连接到KMS的所有接收方.
有关什么是REMB及其如何适应RMCAT更大项目的更多背景信息,请阅读我们的知识库文档: 阻塞控制 (RMCAT).