WebRTC是一项开源技术,它能够通过JavaScript API实现网页浏览器间的实时通信。 它被认为是一种P2P技术,能实现浏览器间的实时通信,而不用通过任何类型的媒体中继。 这种方式能足以实现一些基本的应用,但是有些功能,如组通信,媒体流录制, 媒体广播或媒体转码是很难实现的。基于这个原因,很多应用还是需要有媒体服务器。 Figure 1.1: Peer-to-peer WebRTC approach vs. WebRTC through a media server 在概念上,WebRTC媒体服务器是一种多媒体中继(它位于两个通信端的中间)。 媒体服务器能处理媒体流,并有各种功能,包括组通信(分发一个端生成的媒体流到多个接收端, 如像Multi-Conference Unit, MCU的工作方式),混合(转换多个输入流合成一个组合流), 转码(在不兼容的客户端间选择codec和格式), 录制等 Figure 1.2: Typical WebRTC Media Server capabilities
2.2 Kurento 媒体服务器
Kurento架构的核心是媒体服务器,它被命名为Kurento媒体服务器(KMS)。 Kurento媒体服务器的媒体处理能力是插件式的,意思是它的功能都是插件模块, 可以被激活和关闭。而且,开发者可以无缝地创建额外的模块来扩展Kurento媒体服务器并动态插入。 Kurento媒体服务器提供即时可用的组通信,混合,转码,录制和播放。 另外,它还提供一些高级的媒体处理模块,包括有计算机视觉,虚拟现实,透镜等; Figure 2.1: Kurento Media Server capabilities
2.3 Kurento API, 客户端和协议
Kurento媒体服务器的能力是通过Kurento API呈现给应用开发者的。 这些API是通过叫做Kurento Client库实现的。 Kurento提供了两种类型的客户端库: Java和JavaScript。 如果你希望使用其它的语言,可以通过Kurento 协议来直接操作Kurento。 这个协议可以控制Kurento媒体服务器,它是基于标准的网络协议如WebSocket和JSON-RPC。 下图显示了Kurento客户端的三种应用场景: ? 在兼容WebRTC的浏览器上直接使用Kurento JavaScript Client ? 在Java EE Application Server上使用Kurento Java Client ? 在Node.js 服务器上使用Kurento JavaScript Client 这三种场景在教程中都有完整的示例程序。 Figure 3.1: Connection of Kurento Clients (Java and JavaScript) to Kuento Media Server
Kurento Client的API是基于Media Element的概念,每个Media Element都有特定的媒体能力。 例如,WebRtcEndpoint有发送和接收WebRTC媒体流的能力; RecorderEndpoint 有将接收到的媒体流存储到文件的能力; FaceOverlayFilter 能检测视频流中的人脸并添加一个特定的图片在人脸之上。 Kurento拥有丰富的媒体元素工具箱来做为它的API的一部分。 Figure 3.2: Some Media Elements provided out of the box by Kurento
更好的理解这些概念需要参见本文档中关于Kurento API和Kurento Protocol的章节. 你同样还需要看看Java文档和JS文档: ? 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.
为了简化在客户端的WebRTC流的处理,Kurento提供了一个叫WebRtcPeer的实体, 而且,标准的WebRTC API (getUserMedia, RTCPeerConnection,and so on) 同样能连接到WebRtcEndpoints。更多的信息可以参见示例程序的章节 Figure 4.1: Simple Example of a Media Pipeline
3. Kurento Media Server的安装与卸载
3.1 Kurento Media Server的安装
Kurento Media Server必须安装在Ubuntu 14.04 LTS (32 or 64 bits)下。 考虑到在Ubuntu Server 14.04下安装Kurento Media Server时, 工具add-apt-repository默认是没有安装的,可以用下面的命令安装。 # sudo apt-get install software-properties-common
现在,Kurento Media Server安装并已启动了。可以使用下面的命令启动和停止。 # sudo service kurento-media-server start # sudo service kurento-media-server stop Kurento Media Server 的日志文件位于 /var/log/kurento-media-server/media-server.log。
Kurento Media Server To build Kurento Media Server you need an Ubuntu 14.04 LTS operating system. First you have to install all needed development tools and dependencies executing the following commands: # sudo add-apt-repository ppa:kurento/kurento # sudo apt-get update # sudo apt-get install git # sudo apt-get install libthrift-dev thrift-compiler libjsoncpp-dev # sudo apt-get install gstreamer1.0* libgstreamer1.0-dev # sudo apt-get install libgstreamer-plugins-base1.0-dev libnice-dev gtk-doc-tools # sudo apt-get install cmake libglibmm-2.4-dev uuid-dev libevent-dev libboost-dev # sudo apt-get install libboost-system-dev libboost-filesystem-dev # sudo apt-get install libboost-test-dev libsctp-dev # sudo apt-get install libopencv-dev autoconf git libjsoncpp-dev # sudo apt-get install libtool libsoup2.4-dev tesseract-ocr-dev tesseract-ocr-eng # sudo apt-get install libgnutls28-dev gnutls-bin libvpx-dev
Plase take care that the list of dependencies changes as dependencies change and new features are added, you can check the actual packages that the Ubuntu PPA needs for building from sources in the Build-Depends of the latest release debian/control file. Second you have to get the source code clonning git repository: # git clone Then you can compile Kurento Media Server: # mkdir build # cd build # cmake .. # make Finally, install it into the system as a service: # git submodule update --recursive --init # dpkg-buildpackage -us -uc # sudo dpkg -i ../kurento__.deb And start and stop it: # sudo service kurento-media-server start # sudo service kurento-media-server stop
4. STUN和TURN服务配置
如果Kurento Media Server位于NAT之后,这时就需要使用 STUN or TURN来实现NAT穿透。 在大多数情况下,STUN服务器可以满足需要,只有在NAT是对称的时,才需要TURN服务器。
4.1. STUN服务器配置
为了安装STUN服务器,需要取消Kurento Media Server配置文件中的下面两行的注释, 配置文件位于 /etc/kurento/kurento.conf.json : "stunServerAddress" : "stun ip address", "stunServerPort" : 3478