Kurento應用開發指南(以Kurento 5.0爲模板) 之一:簡介,安裝與卸載

1. Kurento是什麼

Kurento是一個WebRTC媒體服務器,而且包含一個客戶端API集合,
用以簡化WWW和移動平臺上的高級視頻應用程序的開發。
Kurento的功能包括組通訊,轉碼,記錄,混音,廣播和routing of audiovisual flows。
Kurento一樣提供高級的媒體處理能力,包括計算機視覺,視頻檢索,虛擬現實和語音分析。
Kurento模塊化的架構使得其集成第三方媒體處理算法(如語音識別,場景分析,人臉識別等)很簡單,
並且它能夠被應用程序開發者視爲透明。
Kurento的核心組成是Kurento媒體服務器,它用來負責媒體傳輸,處理,加載和記錄。
它是基於GStreamer,優化了資源消耗來實現的。它提供的功能以下:
? 網絡流協議,包括HTTP(做爲客戶端和服務端工做),RTP和WebRTC.
? 組通訊(MCU和SFU功能),支持媒體混合和媒體路由/分發
? 原生支持計算機視覺和虛擬現實濾鏡
? 媒體存儲,支持WebM和MP4的寫操做,能播放GStreamer支持的全部格式
? 自動的媒體轉換,支持GStreamer提供的全部codec,包括VP8, H.264, H.263, , AMR, OPUS, Speex, G.711,等。
它還提供的許多基於Java和Javascript的Kurento客戶端庫,用來提供給應用程序控制Kurento媒體服務器。
若是你喜歡其它的編程語言,可使用基於WebSocket和JSON-RPC的Kurento協議來實現。
Kurento是開源的,它基於 LGPL version 2.1許可協議,它的源碼位於GitHub。.
若是你想快速上手,最好的方式是安裝Kurento媒體服務器並學習官方提供的示例教程。
若是想利用好Kurento,能夠看本指南的高級部分。
 java

2. Kurento簡介

2.1 WebRTC媒體服務器

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

 git

2.2 Kurento 媒體服務器

Kurento架構的核心是媒體服務器,它被命名爲Kurento媒體服務器(KMS)。
Kurento媒體服務器的媒體處理能力是插件式的,意思是它的功能都是插件模塊,
能夠被激活和關閉。並且,開發者能夠無縫地建立額外的模塊來擴展Kurento媒體服務器並動態插入。
Kurento媒體服務器提供即時可用的組通訊,混合,轉碼,錄製和播放。
另外,它還提供一些高級的媒體處理模塊,包括有計算機視覺,虛擬現實,透鏡等;
 
Figure 2.1: Kurento Media Server capabilities

 github

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.

 算法

2.4  使用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。更多的信息能夠參見示例程序的章節
 
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 add-apt-repository ppa:kurento/kurento
# sudo apt-get update
# sudo apt-get install kurento-media-server

 json

3.2 kurento Media Server的啓動與中止

如今,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。

 瀏覽器

3.3. kurento Media Server的卸載

卸載使用以下命令:
# sudo apt-get remove kurento-media-server
# sudo apt-get purge kurento-media-server
或者完全卸載:
# sudo apt-get remove kurento*
# sudo apt-get autoremove
# sudo apt-get update
# sudo apt-get dist-upgrade

 服務器

3.4 Kurento Media Server的手動編譯安裝

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 https://github.com/Kurento/kurento-media-server.git
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_<version>_<arch>.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


參數 stunServerAddress  應當是一個IP地址,不能是域名。
並且須要注意它的JSON格式,若是 stunServerPort 行是WebRtcEndpoint  區域的最後一行,
那麼它不能以逗號(,)結束。
下面是一些可用的公共的STUN服務器,例如:
173.194.66.127:19302
173.194.71.127:19302
74.125.200.127:19302
74.125.204.127:19302
173.194.72.127:19302
74.125.23.127:3478
77.72.174.163:3478
77.72.174.165:3478
77.72.174.167:3478
77.72.174.161:3478
208.97.25.20:3478
62.71.2.168:3478
212.227.67.194:3478
212.227.67.195:3478
107.23.150.92:3478
77.72.169.155:3478
77.72.169.156:3478
77.72.169.164:3478
77.72.169.166:3478
77.72.174.162:3478
77.72.174.164:3478
77.72.174.166:3478
77.72.174.160:3478
54.172.47.69:3478

 

4.2.  TURN服務器配置

爲了安裝TURN服務器,須要取消Kurento Media Server配置文件(/etc/kurento/kurento.conf.json)
下面這行的註釋:
"turnURL" : "user:password@address:port" 和前面的同樣,TURN地址也必須是IP地址(不能是域名)。一樣也要注意JSON格式的最後一行的逗號。TURN配置的示例以下: "turnURL" : "kurento:kurento@193.147.51.36:3478" 或使用免費的numb STUN/TURN服務器以下: "turnURL" : "user:password@66.228.45.110:3478" 有一個TURN服務器的開源實現:coturn.(https://code.google.com/p/coturn/). 

相關文章
相關標籤/搜索