WebRTC服務器Kurento實戰


1. Kurento
Kurento的主要組件是Kurento媒體服務器(KMS),負責媒體傳輸,處理,記錄和播放。KMS建立在出色的GStreamer多媒體庫之上,並提供以下功能:

網絡流協議,包括HTTP,RTP和WebRTC。
支持媒體混合和媒體路由/調度的組通信(MCU和SFU功能)。
對實現計算機視覺和增強現實算法的過濾器的通用支持。
媒體存儲支持WebM和MP4的寫入操作以及GStreamer支持的所有格式的播放。
GStreamer支持的任何編解碼器之間的自動媒體轉碼,包括VP8,H.264,H.263,AMR,OPUS,Speex,G.711等。


Kurento設計原則
Kurento的設計基於以下主要原則:

分開的媒體和信令平面
信號和媒體是兩個獨立的平面,以便應用程序可以分別處理多媒體處理的那些方面。
媒體和應用服務的分配
Kurento Media Server和應用程序可以在不同的機器之間並置,升級或分布。
一個應用程序可以調用多個Kurento Media Server的服務。相反的情況也適用,即Kurento Media Server可以滿足多個應用程序的請求。
適用於雲
Kurento適合集成到雲環境中以充當PaaS(平台即服務)組件。
媒體管道
通過媒體管道鏈接媒體元素是一種挑戰多媒體處理復雜性的直觀方法。
應用開發
開發人員無需了解內部Kurento Media Server的復雜性:所有應用程序都可以以開發人員喜歡的任何技術或框架部署,從客戶端到服務器。從瀏覽器到雲服務。
端到端通信能力
Kurento提供端到端通信功能,因此開發人員無需處理在客戶端設備上傳輸,編碼/解碼和呈現媒體的復雜性。
完全可處理的媒體流
Kurento不僅支持交互式人際通信(例如具有對話呼叫推送/接收功能的Skype),而且還支持人機(例如通過實時流傳輸的視頻點播)和人機(例如遠程視頻錄制) ,多傳感器數據交換)通信。
媒體的模塊化處理
通過媒體元素和管道實現的模塊化允許通過“面向圖形”的語言定義應用程序的媒體處理功能,其中應用程序開發人員可以通過鏈接適當的功能來創建所需的邏輯。
可審核的處理
Kurento能夠為QoS監視,計費和審計生成豐富而詳細的信息。
無縫IMS集成
Kurento旨在支持無縫集成到電話運營商的IMS基礎架構中。
透明媒體適配層
Kurento提供了透明的媒體適配層,以使在屏幕大小,功耗,傳輸速率等方面具有不同要求的不同設備之間的融合成為可能。
Kurento模塊體系
Kurento被設計為可插入框架,Kurento中的每個插件都稱為一個模塊,可以使用新的自定義模塊擴展Kurento Media Server。更多信息,請閱讀Kurento模塊部分。

 

 

Kurento模塊分為三類:

主要模塊
與Kurento Media Server開箱即用合並:

kms-core:Kurento Media Server的主要組件。
kms-elements:Kurento Media Elements的實現(WebRtcEndpoint,PlayerEndpoint等)
kms-filters:Kurento過濾器的實現(FaceOverlayFilter,ZBarFilter等)
內置模塊
Kurento團隊開發的額外模塊,用於增強Kurento Media Server的基本功能。到目前為止,有四個內置模塊,分別是:

kms-pointerdetector:基於顏色跟蹤檢測視頻流中指針的過濾器。
kms-chroma:過濾器,它在頂層使用顏色范圍並使之透明,從而在后面顯示另一個圖像。
kms-crowddetector:用於檢測視頻流中人聚集的過濾器。
kms-platedetector:用於檢測視頻流中的車牌的過濾器。
定制模塊
Kurento Media Server的擴展,提供了新的媒體功能。

2. 安裝 EPEL 鏡像源
yum update
# RHEL/CentOS 7:
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# RHEL/CentOS 8:
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
1
2
3
4
5
3. 安裝docker
# 卸載舊版本(如果安裝過舊版本的話)
yum remove docker docker-common docker-selinux docker-engine
# 安裝需要的軟件包
yum install -y yum-utils device-mapper-persistent-data lvm2
#設置docker源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 可使用阿里雲docker源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安裝docker
yum install docker-ce docker-ce-cli containerd.io
#啟動 docker
systemctl start docker
#開機自啟
systemctl enable docker

#查看KMS日志
docker logs kms
#實時查看:
docker logs -f kms
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
4. 安裝kurento
#安裝最新版kurento
docker pull kurento/kurento-media-server:latest
#啟動鏡像
docker run --name kms -d -p 8888:8888 kurento/kurento-media-server:latest
1
2
3
4
該Kurento媒體服務器的端口(KMS)過程中默認監聽8888客戶端WebSocket連接。

容器運行后,您可以使用docker logs命令獲取其日志輸出:
docker logs --follow kms >“kms-$(date ‘+%Y%m%dT%H%M%S’).log” 2>&1

要檢查KMS是否已啟動並正在偵聽連接,請使用以下命令:

curl \
--include \
--header "Connection: Upgrade" \
--header "Upgrade: websocket" \
--header "Host: 127.0.0.1:8888" \
--header "Origin: 127.0.0.1" \
http://127.0.0.1:8888/kurento
1
2
3
4
5
6
7
您應該得到類似於以下內容的響應:

HTTP/1.1 500 Internal Server Error
Server: WebSocket++/0.7.0
1
2
忽略“ Server Error ”消息:這是預期的,它實際上證明KMS已啟動並正在偵聽連接。

5. 安裝coturn
#安裝依賴
yum install -y openssl-devel libevent-devel git

#clone 源碼
git clone https://github.com/coturn/coturn.git
cd coturn
./configure
make
sudo make install

# 啟動turnserver
nohup turnserver -L 0.0.0.0 -a -u kurento:kurento123pwd -v -f -r zhaolong.org &
#然后查看相應的端口號3478是否存在進程
sudo lsof -i:3478
1
2
3
4
5
6
7
8
9
10
11
12
13
14


這樣就說明已經可以啟動了,接下來我們先停掉turnserver,重新配置。
turnserver 默認加載配置文件是etc/turnserver.conf或/usr/local/etc/turnserver.conf。

cp /usr/local/etc/turnserver.conf.default /usr/local/etc/turnserver.conf
openssl req -x509 -newkey rsa:2048 -keyout /usr/local/etc/turn_server_pkey.pem -out /usr/local/etc/turn_server_cert.pem -days 99999 -nodes
1
2
turnserver 默認使用的是SQLite數據庫,如果是需要使用MySQL或者PostgreSQL,需要先初始化數據庫,sql位置在/usr/local/share/turnserver/schema.sql。

修改的turnserver.conf內容:

# 設置轉發的ip(局域網ip),如果不設置,他會自己選擇默認的
relay-ip=xx.xx.xx.xx

# 轉發的外網ip(本機外網ip),用於NAT 地址映射
external-ip=xx.xx.xx.xx

# 轉發的線程數,其實默認不設置最好
relay-threads=5

#UDP 最小端口和最大端口
min-port=40000
max-port=60000

# WebRTC 的消息里會用到
fingerprint

# WebRTC 認證需要
lt-cred-mech

#中繼服務器的監聽器IP地址
listening-ip=0.0.0.0

#靜態賬號
user=kurento:kurento

# 統計狀態信息的redis db
redis-statsdb="ip=xx.xx.xxx.xx dbname=3 password=xxxx port=6379 connect_timeout=30"

# 用戶登錄域
realm=zhaolong.org

# 證書
cert=/usr/local/etc/turn_server_cert.pem

# 證書key
pkey=/usr/local/etc/turn_server_pkey.pem

# 輸出log
log-file=stdout

mobility
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
重新啟動turnserver

nohup turnserver >> /var/tmp/turn.log &
1
記得開放使用的端口:


可以用這個網址去測試stun和turn的有效性:
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

測試stun
測試stun的時候不需要輸入賬號密碼,只需要輸入stun:


測試turn
需要輸入turn地址,以turn:開頭,以及賬號密碼

 

5. 配置kurento服務器
進入kurento的鏡像編輯kurento的配置文件:

#進入鏡像
docker exec -it kms /bin/bash
#安裝vim
apt-get update
apt-get install vim
#進入配置文件夾
cd /etc/kurento/modules/kurento/
#編輯配置文件
vim WebRtcEndpoint.conf.ini
1
2
3
4
5
6
7
8
9
修改stun 和turn 信息

stunServerAddress=xx.xx.xx.xx
stunServerPort=pp
turnURL=username:userpwd@xx.xx.xx.xx:pp?transport=tcp
1
2
3
重啟kurento容器

#查看當前啟動的容器
docker ps
docker restart {kurento容器ID}
1
2
3
6. kurento-hello-world
git clone https://github.com/Kurento/kurento-tutorial-java.git
cd kurento-tutorial-java/kurento-hello-world
vim src/main/resources/static/js/index.js
1
2
3
在函數function uiStart()里,增加一個叫iceservers的變量,格式如下:

var iceservers={
"iceServers":[
{
urls:"stun:xx.xx.xx.xx:3478"
},
{
urls:["turn:xx.xx.xx.xx:3478"]
username:"xxxx",
credential: "xxxx"
}
]
}
1
2
3
4
5
6
7
8
9
10
11
12
再修改底下的options變量:

const options = {
localVideo: uiLocalVideo,
remoteVideo: uiRemoteVideo,
mediaConstraints: { audio: true, video: true },
onicecandidate: (candidate) => sendMessage({
id: 'ADD_ICE_CANDIDATE',
candidate: candidate,
}),
configuration: iceservers //修改在這里,增加了一個configuration的key
};
1
2
3
4
5
6
7
8
9
10
啟動項目

mvn -U clean spring-boot:run -Dkms.url=ws://xx.xx.xx.xx:8888/kurento
1
啟動完之后用谷歌或者火狐瀏覽器打開demo頁面https://localhost:8443/
點擊start啟動


至此,最簡單的HelloWorld已經完成。
————————————————
版權聲明:本文為CSDN博主「后端老鳥」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/huahao1989/article/details/106321369


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM