Kurento简介
博客专区 > chapin 的博客 > 博客详情
Kurento简介
chapin 发表于10个月前
Kurento简介
  • 发表于 10个月前
  • 阅读 81
  • 收藏 1
  • 点赞 1
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

WebRTC 媒体服务器

WebRTC是一项开源技术,它能够通过JavaScript API实现网页浏览器间的实时通信。它被认为是一种P2P技术,不用通过任何类型的媒体中继, 能实现浏览器间的实时通信。这种方式能足以实现一些基本的应用,但是有些功能,如组通信,媒体流录制,媒体广播或媒体转码是很难实现的。基于这个原因,很多应用还是需要有媒体服务器。

Peer-to-peer WebRTC approach vs. WebRTC through a media server

在概念上,WebRTC媒体服务器是一种多媒体中继(它位于两个通信端的中间)。媒体服务器能处理媒体流,并有各种功能,包括组通信(分发一个端生成的媒体流到多个接收端,如像Multi-Conference Unit, MCU的工作方式),混合(转换多个输入流合成一个组合流),转码(在不兼容的客户端间选择codec和格式), 录制等。

Typical WebRTC Media Server capabilities

Kurento 媒体服务器

Kurento架构的核心是媒体服务器,它被命名为Kurento媒体服务器(KMS)。Kurento媒体服务器的媒体处理能力是插件式的,意思是它的功能都是可以被激活和关闭插件模块。而且,开发者可以无缝地创建额外的模块来扩展Kurento媒体服务器并动态插入。

Kurento媒体服务器提供即时可用的组通信,混合,转码,录制和播放。另外,它还提供一些高级的媒体处理模块,包括有计算机视觉,虚拟现实,透镜等。

Kurento Media Server capabilities

Kurento API, 客户端和协议

Kurento媒体服务器的能力是通过Kurento API呈现给应用开发者的。这些API是通过叫做Kurento Client库实现的。Kurento提供了两种类型的客户端库: Java和JavaScript。如果你希望使用其它的语言,可以通过Kurento 协议来直接操作 Kurento。这个协议允许控制 Kurento媒体服务器,它是基于标准的网络协议如WebSocketJSON-RPC

下图显示了Kurento客户端的三种应用场景:

  • 在兼容WebRTC的浏览器上直接使用 Kurento JavaScript Client
  • 在Java EE Application Server上使用Kurento Java Client
  • 在Node.js 服务器上使用Kurento JavaScript Client

Connection of Kurento Clients (Java and JavaScript) to Kuento Media Server

这三种场景在教程中都有完整的示例程序。

Kurento Client的API是基于Media Element的概念,每个Media Element都有特定的媒体能力。例如,WebRtcEndpoint有发送和接收WebRTC媒体流的能力;RecorderEndpoint 有将接收到的媒体流存储到文件的能力;FaceOverlayFilter 能检测视频流中的人脸并添加一个特定的图片在人脸之上。Kurento拥有丰富的媒体元素工具箱来做为它的API的一部分。

Some Media Elements provided out of the box by Kurento

更好的理解这些概念需要参见本文档中关于 Kurento APIKurento Protocol 的章节。你同样还需要看看Java文档和JS文档:

使用Kurento创建应用程序

从应用程序开发人员的角度来看,媒体元素就像是乐高积木:你只需选择应用程序想要的元素,然后再它连接到想要的拓扑结构中。在Kurento的术语中,媒体元素的连接图被称作** 媒体管道 **。因此,当你想创建一个管道时,开发人员需要确定想要使用的媒体元素的能力,并确定媒体元素间如何连接的拓扑图。这些连接是通过连接原语控制(以Kurento Client APIs方式显现)。这些原语以拓扑上后续的元素作为参数,激活本元素作为源:

sourceMediaElement.connect(sinkMediaElement)

例如,如果你想创建一个录制WebRTC流到文件的应用程序,你需要两个媒体元素:WebRtcEndpoint 和 RecorderEndpoint。当一个客户端连接到这个应用程序时,你需要实例化这两个媒体元素,并使用 WebRtcEndpoint (它用来接收WebRTC流)来接收流后输送给RecorderEndpoint (它用来将媒体流录制到文件)。最后,你需要连接它们,这样就能实现将前一个媒体元素接收到的流输送给后一年媒体元素, 像下面这样:

WebRtcEndpoint.connect(RecorderEndpoint)

为了简化在客户端的WebRTC流的处理,Kurento提供了一个叫WebRtcPeer的实体,而且,标准的WebRTC API (getUserMedia, RTCPeerConnection,and so on) 同样能连接到WebRtcEndpoints。更多的信息可以参见示例程序的章节。

Simple Example of a Media Pipeline

共有 人打赏支持
粉丝 18
博文 82
码字总数 101076
×
chapin
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: