Kurento實戰之一:KMS部署和體驗

程式設計師欣宸發表於2021-08-19

歡迎訪問我的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可用;

版本資訊

  1. 作業系統:Ubuntu 16.04.5 LTS
  2. KMS:6.13.0
  3. JDK:1.8.0_191
  4. SpringBoot:2.3.3.RELEASE
  • 注意:本次實戰全程使用root帳號
  • 接下來開始部署KMS;

操作

  1. 關閉防火牆;
  2. 安裝gnupg
apt-get install --no-install-recommends --yes gnupg
  1. 設定環境變數:
DISTRO="xenial"
  1. 從金鑰伺服器下載金鑰到可信任的金鑰列表,為後面的安裝做準備:
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5AFA7A83
  1. 新增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
  1. 安裝kms:
apt-get update && apt-get install --yes kurento-media-server
  1. 啟動kms:
service kurento-media-server start
  1. 檢視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.
  1. 執行以下命令確認響應是否正常:
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
  1. 如果控制檯響應以下內容,證明KMS已經可以正常服務了:
HTTP/1.1 500 Internal Server Error
Server: WebSocket++/0.7.0
  1. 至此,KMS部署和啟動已經完成,接下來我們們快速體驗KMS的基礎能力;

體驗KMS

  • 接下來部署一個SpringBoot應用,通過應用的網頁服務體驗KMS,這個應用部署在另一臺電腦上(和KMS部署在一起也沒任何問題),整個環境情況如下:

在這裡插入圖片描述

  1. 登入到上圖的192.168.133.208電腦,關閉防火牆;
  2. 192.168.133.208電腦上安裝JDK8;
  3. 本文的重點是KMS部署,關於SpringBoot應用無需開發,下載我準備好的jar檔案即可,地址是:https://download.csdn.net/download/boling_cavalry/14012545
  4. 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
  1. 控制檯輸出以下內容,表示啟動成功:
[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)
  1. 在瀏覽器訪問地址:https://192.168.133.208:8443 ,由於使用了自簽證照,瀏覽器會有安全提示,點選下圖紅框中的按鈕:

在這裡插入圖片描述

  1. 點選下圖紅框中的連結,即可訪問SpringBoot應用的首頁:
    在這裡插入圖片描述

  2. 首頁效果如下,這是Kurento官方的hello-world專案,確保您當前電腦上的麥克風攝像頭都正常,再點選下圖紅框中的Start按鈕,即可開始WebRTC流程:

在這裡插入圖片描述

  1. 出於安全考慮,瀏覽器會彈出確認視窗,如下圖紅框,點選確認後攝像頭開始捕捉畫面:

在這裡插入圖片描述

  1. 如下圖,WebRTC已經開始正常工作:

在這裡插入圖片描述

  1. 聰明的您應該發現了,這個應用的功能是將本地攝像頭的資料給到KMS,再從KMS取視訊到本地展示,官方給出的流程圖如下:

在這裡插入圖片描述

  1. 如果您使用的瀏覽器是Chrome,再開啟一個標籤,輸入地址:chrome://webrtc-internals/ ,可以檢視WebRTC的詳情,如下圖,可以看到PeerConnection的詳細資訊:

在這裡插入圖片描述

  1. 如下圖紅框所示,本地輸出到KMS的視訊流,編碼格式為VP8

在這裡插入圖片描述

  1. 您可以繼續嘗試,登入KMS機器執行以下命令停止KMS服務,再回到網頁時,發現左側的預覽視窗依舊正常工作,但是右側的遠端視訊視窗已經靜止不動了:
service kurento-media-server stop
  • 至此,KMS從部署到體驗的操作都完成了,希望本文能協助您完成最基本的kurento體驗,接下來的文章我們們繼續寫程式碼做實戰,一邊動手一邊學習kurento;

你不孤單,欣宸原創一路相伴

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 資料庫+中介軟體系列
  6. DevOps系列

歡迎關注公眾號:程式設計師欣宸

微信搜尋「程式設計師欣宸」,我是欣宸,期待與您一同暢遊Java世界...
https://github.com/zq2599/blog_demos

相關文章