文件夾
1. Kurento是什麼 3
2. Kurento簡單介紹 3
2.1 WebRTC媒體server 3
2.2 Kurento 媒體server 4
2.3 Kurento API, client和協議 5
2.4 使用Kurento建立應用程序 7
3. Kurento Media Server的安裝與卸載 8
3.1 Kurento Media Server的安裝 8
3.2 kurento Media Server的啓動與中止 8
3.3. kurento Media Server的卸載 8
4. STUN和TURN服務配置 9
4.1. STUNserver配置 9
4.2. TURNserver配置 10
5. Kurento教程 11
5.1 Node.js 教程1 - Hello world 11
5.1.1 執行演示樣例程序 11
5.1.2 執行時的出錯 12
5.1.3 演示樣例程序的分析 14
5.1.4 應用程序服務端邏輯 16
5.1.5 client邏輯 19
5.1.6 依賴庫 20
5.2 教程3一對多的視頻呼叫 21
5.2.1 執行演示樣例程序 21
5.2.2 理解這個演示樣例程序 21
5.2.3 應用程序服務端邏輯 24
5.2.4 client 29
5.2.5 依賴庫 30
5.3 教程四-一對一的視頻呼叫 31
5.3.1 執行演示樣例程序 31
5.3.2 Understanding this example 31
5.3.3 應用程序服務端邏輯 33
5.3.4 client 40
5.3.5 依賴庫 43
11. Kurento 架構 43
11.1 Kurento API和接口 44
11.2 Kurento 模塊 45
11.3 使用Kurento建立應用程序 46
11.4 client,服務端和Kurento的通訊 47
11.5 使用kurento實現實時WebRTC應用 49
11.6 Kurento 設計原則 51
1. Kurento是什麼
Kurento是一個WebRTC媒體server,並且包括一個clientAPI集合,
用以簡化WWW和移動平臺上的高級視頻應用程序的開發。
Kurento的功能包含組通訊,轉碼,記錄。混音。廣播和routing of audiovisual flows。
Kurento相同提供高級的媒體處理能力,包含計算機視覺。視頻檢索。虛擬現實和語音分析。
Kurento模塊化的架構使得其集成第三方媒體處理算法(如語音識別,場景分析,人臉識別等)很是easy。
而且它可以被應用程序開發人員視爲透明。
Kurento的核心組成是Kurento媒體server,它用來負責媒體傳輸,處理,載入和記錄。
它是基於GStreamer。優化了資源消耗來實現的。它提供的功能例如如下:
• 網絡流協議,包含HTTP(做爲client和服務端工做),RTP和WebRTC.
• 組通訊(MCU和SFU功能),支持媒體混合和媒體路由/分發
• 原生支持計算機視覺和虛擬現實濾鏡
• 媒體存儲,支持WebM和MP4的寫操做。能播放GStreamer支持的所有格式
• 本身主動的媒體轉換。支持GStreamer提供的所有codec,包含VP8, H.264, H.263, , AMR, OPUS, Speex, G.711,等。
它還提供的不少基於Java和Javascript的Kurentoclient庫,用來提供給應用程序控制Kurento媒體server。
假設你喜歡其餘的編程語言。可以使用基於WebSocket和JSON-RPC的Kurento協議來實現。
Kurento是開源的,它基於 LGPL version 2.1許可協議,它的源代碼位於GitHub。.
假設你想高速上手。最好的方式是安裝Kurento媒體server並學習官方提供的演示樣例教程。
假設想利用好Kurento,可以看本指南的高級部分。java
2. Kurento簡單介紹
2.1 WebRTC媒體server
WebRTC是一項開源技術,它能夠經過JavaScript API實現網頁瀏覽器間的實時通訊。
它被以爲是一種P2P技術,能實現瀏覽器間的實時通訊,而不用經過不論什麼類型的媒體中繼。
這樣的方式能足以實現一些主要的應用。但是有些功能。如組通訊,媒體流錄製,
媒體廣播或媒體轉碼是很是難實現的。git
基於這個緣由,很是多應用仍是需要有媒體server。github
Figure 1.1: Peer-to-peer WebRTC approach vs. WebRTC through a media server
在概念上。WebRTC媒體server是一種多媒體中繼(它位於兩個通訊端的中間)。算法
媒體server能處理媒體流。並有各類功能,包含組通訊(分發一個端生成的媒體流到多個接收端,
如像Multi-Conference Unit, MCU的工做方式)。混合(轉換多個輸入流合成一個組合流)。
轉碼(在不兼容的client間選擇codec和格式), 錄製等
Figure 1.2: Typical WebRTC Media Server capabilities
編程
2.2 Kurento 媒體server
Kurento架構的核心是媒體server,它被命名爲Kurento媒體server(KMS)。
Kurento媒體server的媒體處理能力是插件式的,意思是它的功能都是插件模塊,
可以被激活和關閉。而且,開發人員可以無縫地建立額外的模塊來擴展Kurento媒體server並動態插入。
Kurento媒體server提供即時可用的組通訊。混合,轉碼,錄製和播放。
另外,它還提供一些高級的媒體處理模塊。包含有計算機視覺,虛擬現實,透鏡等;
Figure 2.1: Kurento Media Server capabilities
json
2.3 Kurento API, client和協議
Kurento媒體server的能力是經過Kurento API呈現給應用開發人員的。
這些API是經過叫作Kurento Client庫實現的。
Kurento提供了兩種類型的client庫: Java和JavaScript。瀏覽器
假設你但願使用其餘的語言,可以經過Kurento 協議來直接操做Kurento。網絡
這個協議可以控制Kurento媒體server。它是基於標準的網絡協議如WebSocket和JSON-RPC。
下圖顯示了Kurentoclient的三種應用場景:
• 在兼容WebRTC的瀏覽器上直接使用Kurento JavaScript Client
• 在Java EE Application Server上使用Kurento Java Client
• 在Node.js server上使用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.
app
2.4 使用Kurento建立應用程序
從應用程序開發者的角度來看,媒體元素就像是樂高積木:
你僅僅需選擇應用程序想要的元素,而後再它鏈接到想要的拓撲結構中。
在Kurento的術語中。媒體元素的鏈接圖被稱做媒體管道。
所以,當你想建立一個管道時,開發者需要肯定想要使用的媒體元素的能力。
並肯定媒體元素間怎樣鏈接的拓撲圖。這些鏈接是經過鏈接原語控制(以Kurento Client APIs方式顯現)。
這些原語以拓撲上興許的元素做爲參數。激活本元素做爲源:
sourceMediaElement.connect(sinkMediaElement)
好比,假設你想建立一個錄製WebRTC流到文件的應用程序,
你需要兩個媒體元素:WebRtcEndpoint 和 RecorderEndpoint。當一個client鏈接到這個應用程序時,
你需要實例化這兩個媒體元素。並使用 WebRtcEndpoint
(它用來接收WebRTC流)來接收流後輸送給RecorderEndpoint (它用來將媒體流錄製到文件)。
最後。你需要鏈接它們,這樣就能實現將前一個媒體元素接收到的流輸送給後一年媒體元素。
像如下這樣:
WebRtcEndpoint.connect(RecorderEndpoint)
爲了簡化在client的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
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穿透。
在大多數狀況下,STUNserver可以知足需要。僅僅有在NAT是對稱的時,才需要TURNserver。
4.1. STUNserver配置
爲了安裝STUNserver,需要取消Kurento Media Server配置文件裏的如下兩行的凝視。
配置文件位於 /etc/kurento/kurento.conf.json :
"stunServerAddress" : "stun ip address",
"stunServerPort" : 3478
參數 stunServerAddress 應當是一個IP地址。不能是域名。
而且需要注意它的JSON格式,假設 stunServerPort 行是WebRtcEndpoint 區域的最後一行,
那麼它不能以逗號(,)結束。
如下是一些可用的公共的STUNserver,好比:
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. TURNserver配置
爲了安裝TURNserver,需要取消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/TURNserver例如如下:
"turnURL" : "user:password@66.228.45.110:3478"
有一個TURNserver的開源實現:coturn.(https://code.google.com/p/coturn/).