歡迎訪問我的GitHub
https://github.com/zq2599/blog_demos
內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等;
關於《kurento實戰》系列
《kurento實戰》系列是欣宸原創的音視訊領域實戰專題,旨在通過實戰學習主流的實時音視訊技術,很榮幸與您一同開啟這段精彩的旅程;
關於Kurento
- Kurento由WebRTC媒體伺服器和一系列客戶端應用組成,用於簡化web和智慧裝置上的實時音視訊開發;
- 官方架構圖如下,頂部的紫色區域是端側,左下角紅色區域是提供音視訊服務的Kurento Media Server(KMS),右下角綠色區域是業務服務,通過API與KMS互動,對KMS和端側的提供信令和控制服務(例如點對點聊天時找到對方,多人聊天是提供房間的業務邏輯):
關於WebRTC(Web Real-Time Communication)
WebRTC是一項在瀏覽器內部進行實時視訊和音訊通訊的技術,是谷歌於2010年以6820萬美元收購VoIP軟體開發商 Global IT Solutions 公司而獲得,可以在瀏覽器內部進行實時視訊和音訊通訊,谷歌於2011年6月3日開源該專案,有關WebRTC的知識不在本文展開,但下圖是典型的實時通訊流程,非常重要:
本篇概覽
作為《kurento實戰》的開篇,今天我們們一起來嘗試部署核心服務Kurento Media Server(KMS),再執行一個demo應用驗證KMS可用;
版本資訊
- 作業系統:Ubuntu 16.04.5 LTS
- KMS:6.13.0
- JDK:1.8.0_191
- SpringBoot:2.3.3.RELEASE
- 注意:本次實戰全程使用root帳號
- 接下來開始部署KMS;
操作
- 關閉防火牆;
- 安裝gnupg:
apt-get install --no-install-recommends --yes gnupg
- 設定環境變數:
DISTRO="xenial"
- 從金鑰伺服器下載金鑰到可信任的金鑰列表,為後面的安裝做準備:
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5AFA7A83
- 新增kurentu源地址:
tee "/etc/apt/sources.list.d/kurento.list" >/dev/null <<EOF
deb [arch=amd64] http://ubuntu.openvidu.io/6.13.0 $DISTRO kms6
EOF
- 安裝kms:
apt-get update && apt-get install --yes kurento-media-server
- 啟動kms:
service kurento-media-server start
- 檢視kms狀態,如下,可見服務啟動成功(active):
root@docker:~# service kurento-media-server status
● kurento-media-server.service - LSB: Kurento Media Server daemon
Loaded: loaded (/etc/init.d/kurento-media-server; bad; vendor preset: enabled)
Active: active (running) since Fri 2021-01-01 05:39:24 PST; 2s ago
Docs: man:systemd-sysv-generator(8)
Process: 4815 ExecStart=/etc/init.d/kurento-media-server start (code=exited, status=0/SUCCESS)
Tasks: 24
Memory: 17.3M
CPU: 242ms
CGroup: /system.slice/kurento-media-server.service
└─4828 /usr/bin/kurento-media-server
Jan 01 05:39:24 docker systemd[1]: Starting LSB: Kurento Media Server daemon...
Jan 01 05:39:24 docker kurento-media-server[4815]: * Start Kurento Media Server
Jan 01 05:39:24 docker kurento-media-server[4815]: * Configure Kernel resource limits for Kurento Media Server
Jan 01 05:39:24 docker kurento-media-server[4815]: ...done.
Jan 01 05:39:24 docker systemd[1]: Started LSB: Kurento Media Server daemon.
- 執行以下命令確認響應是否正常:
curl -i -N \
-H "Connection: Upgrade" \
-H "Upgrade: websocket" \
-H "Host: 127.0.0.1:8888" \
-H "Origin: 127.0.0.1" \
http://127.0.0.1:8888/kurento
- 如果控制檯響應以下內容,證明KMS已經可以正常服務了:
HTTP/1.1 500 Internal Server Error
Server: WebSocket++/0.7.0
- 至此,KMS部署和啟動已經完成,接下來我們們快速體驗KMS的基礎能力;
體驗KMS
- 接下來部署一個SpringBoot應用,通過應用的網頁服務體驗KMS,這個應用部署在另一臺電腦上(和KMS部署在一起也沒任何問題),整個環境情況如下:
- 登入到上圖的192.168.133.208電腦,關閉防火牆;
- 在192.168.133.208電腦上安裝JDK8;
- 本文的重點是KMS部署,關於SpringBoot應用無需開發,下載我準備好的jar檔案即可,地址是:https://download.csdn.net/download/boling_cavalry/14012545
- 將helloworld-0.0.1-SNAPSHOT.jar下載到192.168.133.208,再執行以下命令即可啟動應用,注意引數-Dkms.url的IP是KMS電腦的地址:
java -Dkms.url=ws://192.168.133.207:8888/kurento -jar helloworld-0.0.1-SNAPSHOT.jar
- 控制檯輸出以下內容,表示啟動成功:
[root@centos7 ~]# java -Dkms.url=ws://192.168.133.207:8888/kurento -jar helloworld-0.0.1-SNAPSHOT.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.3.3.RELEASE)
2021-01-03 12:30:56.702 WARN 24669 --- [ main] o.s.boot.StartupInfoLogger : InetAddress.getLocalHost().getHostName() took 10004 milliseconds to respond. Please verify your network configuration.
2021-01-03 12:31:06.719 INFO 24669 --- [ main] c.b.helloworld.HelloWorldApplication : Starting HelloWorldApplication on centos7 with PID 24669 (/root/helloworld-0.0.1-SNAPSHOT.jar started by root in /root)
2021-01-03 12:31:06.719 INFO 24669 --- [ main] c.b.helloworld.HelloWorldApplication : No active profile set, falling back to default profiles: default
2021-01-03 12:31:07.970 INFO 24669 --- [rbeatExec-e1-t0] o.k.j.c.JsonRpcClientNettyWebSocket : [KurentoClient] Connecting native client
2021-01-03 12:31:07.974 INFO 24669 --- [rbeatExec-e1-t0] o.k.j.c.JsonRpcClientNettyWebSocket : [KurentoClient] Creating new NioEventLoopGroup
2021-01-03 12:31:23.159 INFO 24669 --- [ntLoopGroup-2-1] o.k.j.c.JsonRpcClientNettyWebSocket : [KurentoClient] Initiating new Netty channel. Will create new handler too!
2021-01-03 12:31:23.267 WARN 24669 --- [ main] org.kurento.client.KurentoClient : Connected to KMS in 15294 millis (> 5000 millis)
2021-01-03 12:31:24.241 INFO 24669 --- [ main] c.b.helloworld.HelloWorldApplication : Started HelloWorldApplication in 53.092 seconds (JVM running for 53.509)
- 在瀏覽器訪問地址:https://192.168.133.208:8443 ,由於使用了自簽證照,瀏覽器會有安全提示,點選下圖紅框中的按鈕:
-
點選下圖紅框中的連結,即可訪問SpringBoot應用的首頁:
-
首頁效果如下,這是Kurento官方的hello-world專案,確保您當前電腦上的麥克風攝像頭都正常,再點選下圖紅框中的Start按鈕,即可開始WebRTC流程:
- 出於安全考慮,瀏覽器會彈出確認視窗,如下圖紅框,點選確認後攝像頭開始捕捉畫面:
- 如下圖,WebRTC已經開始正常工作:
- 聰明的您應該發現了,這個應用的功能是將本地攝像頭的資料給到KMS,再從KMS取視訊到本地展示,官方給出的流程圖如下:
- 如果您使用的瀏覽器是Chrome,再開啟一個標籤,輸入地址:chrome://webrtc-internals/ ,可以檢視WebRTC的詳情,如下圖,可以看到PeerConnection的詳細資訊:
- 如下圖紅框所示,本地輸出到KMS的視訊流,編碼格式為VP8:
- 您可以繼續嘗試,登入KMS機器執行以下命令停止KMS服務,再回到網頁時,發現左側的預覽視窗依舊正常工作,但是右側的遠端視訊視窗已經靜止不動了:
service kurento-media-server stop
- 至此,KMS從部署到體驗的操作都完成了,希望本文能協助您完成最基本的kurento體驗,接下來的文章我們們繼續寫程式碼做實戰,一邊動手一邊學習kurento;
你不孤單,欣宸原創一路相伴
歡迎關注公眾號:程式設計師欣宸
微信搜尋「程式設計師欣宸」,我是欣宸,期待與您一同暢遊Java世界...
https://github.com/zq2599/blog_demos