Kurento實(shí)戰(zhàn)之一:KMS部署和體驗(yàn)

歡迎訪問我的GitHub

https://github.com/zq2599/blog_demos

內(nèi)容:所有原創(chuàng)文章分類匯總及配套源碼,涉及Java、Docker、Kubernetes、DevOPS等;

關(guān)于《kurento實(shí)戰(zhàn)》系列

《kurento實(shí)戰(zhàn)》系列是欣宸原創(chuàng)的音視頻領(lǐng)域?qū)崙?zhàn)專題,旨在通過實(shí)戰(zhàn)學(xué)習(xí)主流的實(shí)時(shí)音視頻技術(shù),很榮幸與您一同開啟這段精彩的旅程;

關(guān)于Kurento

  • Kurento由WebRTC媒體服務(wù)器和一系列客戶端應(yīng)用組成,用于簡(jiǎn)化web和智能設(shè)備上的實(shí)時(shí)音視頻開發(fā);
  • 官方架構(gòu)圖如下,頂部的紫色區(qū)域是端側(cè),左下角紅色區(qū)域是提供音視頻服務(wù)的Kurento Media Server(KMS),右下角綠色區(qū)域是業(yè)務(wù)服務(wù),通過API與KMS交互,對(duì)KMS和端側(cè)的提供信令和控制服務(wù)(例如點(diǎn)對(duì)點(diǎn)聊天時(shí)找到對(duì)方,多人聊天是提供房間的業(yè)務(wù)邏輯):
在這里插入圖片描述

關(guān)于WebRTC(Web Real-Time Communication)

WebRTC是一項(xiàng)在瀏覽器內(nèi)部進(jìn)行實(shí)時(shí)視頻和音頻通信的技術(shù),是谷歌于2010年以6820萬美元收購VoIP軟件開發(fā)商 Global IT Solutions 公司而獲得,可以在瀏覽器內(nèi)部進(jìn)行實(shí)時(shí)視頻和音頻通信,谷歌于2011年6月3日開源該項(xiàng)目,有關(guān)WebRTC的知識(shí)不在本文展開,但下圖是典型的實(shí)時(shí)通信流程,非常重要:

在這里插入圖片描述

本篇概覽

作為《kurento實(shí)戰(zhàn)》的開篇,今天咱們一起來嘗試部署核心服務(wù)Kurento Media Server(KMS),再運(yùn)行一個(gè)demo應(yīng)用驗(yàn)證KMS可用;

版本信息

  1. 操作系統(tǒng):Ubuntu 16.04.5 LTS
  2. KMS:6.13.0
  3. JDK:1.8.0_191
  4. SpringBoot:2.3.3.RELEASE
  • 注意:本次實(shí)戰(zhàn)全程使用<font color="red">root</font>帳號(hào)
  • 接下來開始部署KMS;

操作

  1. 關(guān)閉防火墻;
  2. 安裝<font color="red">gnupg</font>:
apt-get install --no-install-recommends --yes gnupg
  1. 設(shè)置環(huán)境變量:
DISTRO="xenial"
  1. 從密鑰服務(wù)器下載密鑰到可信任的密鑰列表,為后面的安裝做準(zhǔn)備:
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. 啟動(dòng)kms:
service kurento-media-server start
  1. 查看kms狀態(tài),如下,可見服務(wù)啟動(dòng)成功(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. 執(zhí)行以下命令確認(rèn)響應(yīng)是否正常:
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. 如果控制臺(tái)響應(yīng)以下內(nèi)容,證明KMS已經(jīng)可以正常服務(wù)了:
HTTP/1.1 500 Internal Server Error
Server: WebSocket++/0.7.0
  1. 至此,KMS部署和啟動(dòng)已經(jīng)完成,接下來咱們快速體驗(yàn)KMS的基礎(chǔ)能力;

體驗(yàn)KMS

  • 接下來部署一個(gè)SpringBoot應(yīng)用,通過應(yīng)用的網(wǎng)頁服務(wù)體驗(yàn)KMS,這個(gè)應(yīng)用部署在另一臺(tái)電腦上(和KMS部署在一起也沒任何問題),整個(gè)環(huán)境情況如下:
在這里插入圖片描述
  1. 登錄到上圖的<font color="blue">192.168.133.208</font>電腦,關(guān)閉防火墻;
  2. 在<font color="blue">192.168.133.208</font>電腦上安裝JDK8;
  3. 本文的重點(diǎn)是KMS部署,關(guān)于SpringBoot應(yīng)用無需開發(fā),下載我準(zhǔn)備好的jar文件即可,地址是:https://download.csdn.net/download/boling_cavalry/14012545
  4. 將<font color="red">helloworld-0.0.1-SNAPSHOT.jar</font>下載到<font color="blue">192.168.133.208</font>,再執(zhí)行以下命令即可啟動(dòng)應(yīng)用,注意參數(shù)<font color="blue">-Dkms.url</font>的IP是KMS電腦的地址:
java -Dkms.url=ws://192.168.133.207:8888/kurento -jar helloworld-0.0.1-SNAPSHOT.jar
  1. 控制臺(tái)輸出以下內(nèi)容,表示啟動(dòng)成功:
[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 ,由于使用了自簽證書,瀏覽器會(huì)有安全提示,點(diǎn)擊下圖紅框中的按鈕:
在這里插入圖片描述
  1. 點(diǎn)擊下圖紅框中的鏈接,即可訪問SpringBoot應(yīng)用的首頁:


    在這里插入圖片描述
  2. 首頁效果如下,這是Kurento官方的hello-world項(xiàng)目,確保您當(dāng)前電腦上的麥克風(fēng)攝像頭都正常,再點(diǎn)擊下圖紅框中的<font color="blue">Start</font>按鈕,即可開始WebRTC流程:

在這里插入圖片描述
  1. 出于安全考慮,瀏覽器會(huì)彈出確認(rèn)窗口,如下圖紅框,點(diǎn)擊確認(rèn)后攝像頭開始捕捉畫面:
在這里插入圖片描述
  1. 如下圖,WebRTC已經(jīng)開始正常工作:
在這里插入圖片描述
  1. 聰明的您應(yīng)該發(fā)現(xiàn)了,這個(gè)應(yīng)用的功能是將本地?cái)z像頭的數(shù)據(jù)給到KMS,再從KMS取視頻到本地展示,官方給出的流程圖如下:
在這里插入圖片描述
  1. 如果您使用的瀏覽器是Chrome,再打開一個(gè)標(biāo)簽,輸入地址:chrome://webrtc-internals/ ,可以查看WebRTC的詳情,如下圖,可以看到PeerConnection的詳細(xì)信息:
在這里插入圖片描述
  1. 如下圖紅框所示,本地輸出到KMS的視頻流,編碼格式為<font color="blue">VP8</font>:
在這里插入圖片描述
  1. 您可以繼續(xù)嘗試,登錄KMS機(jī)器執(zhí)行以下命令停止KMS服務(wù),再回到網(wǎng)頁時(shí),發(fā)現(xiàn)左側(cè)的預(yù)覽窗口依舊正常工作,但是右側(cè)的遠(yuǎn)程視頻窗口已經(jīng)靜止不動(dòng)了:
service kurento-media-server stop
  • 至此,KMS從部署到體驗(yàn)的操作都完成了,希望本文能協(xié)助您完成最基本的kurento體驗(yàn),接下來的文章咱們繼續(xù)寫代碼做實(shí)戰(zhàn),一邊動(dòng)手一邊學(xué)習(xí)kurento;

你不孤單,欣宸原創(chuàng)一路相伴

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 數(shù)據(jù)庫+中間件系列
  6. DevOps系列

歡迎關(guān)注公眾號(hào):程序員欣宸

微信搜索「程序員欣宸」,我是欣宸,期待與您一同暢游Java世界...
https://github.com/zq2599/blog_demos

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容