歡迎訪問(wèn)我的GitHub
https://github.com/zq2599/blog_demos
內(nèi)容:所有原創(chuàng)文章分類(lèi)匯總及配套源碼循头,涉及Java、Docker胞锰、Kubernetes厨姚、DevOPS等;
關(guān)于《kurento實(shí)戰(zhàn)》系列
《kurento實(shí)戰(zhàn)》系列是欣宸原創(chuàng)的音視頻領(lǐng)域?qū)崙?zhàn)專(zhuān)題猎醇,旨在通過(guò)實(shí)戰(zhàn)學(xué)習(xí)主流的實(shí)時(shí)音視頻技術(shù)窥突,很榮幸與您一同開(kāi)啟這段精彩的旅程;
關(guān)于Kurento
- Kurento由WebRTC媒體服務(wù)器和一系列客戶端應(yīng)用組成硫嘶,用于簡(jiǎn)化web和智能設(shè)備上的實(shí)時(shí)音視頻開(kāi)發(fā)阻问;
- 官方架構(gòu)圖如下,頂部的紫色區(qū)域是端側(cè)沦疾,左下角紅色區(qū)域是提供音視頻服務(wù)的Kurento Media Server(KMS)称近,右下角綠色區(qū)域是業(yè)務(wù)服務(wù),通過(guò)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萬(wàn)美元收購(gòu)VoIP軟件開(kāi)發(fā)商 Global IT Solutions 公司而獲得彻桃,可以在瀏覽器內(nèi)部進(jìn)行實(shí)時(shí)視頻和音頻通信坛善,谷歌于2011年6月3日開(kāi)源該項(xiàng)目,有關(guān)WebRTC的知識(shí)不在本文展開(kāi)邻眷,但下圖是典型的實(shí)時(shí)通信流程眠屎,非常重要:
本篇概覽
作為《kurento實(shí)戰(zhàn)》的開(kāi)篇,今天咱們一起來(lái)嘗試部署核心服務(wù)Kurento Media Server(KMS)肆饶,再運(yùn)行一個(gè)demo應(yīng)用驗(yàn)證KMS可用改衩;
版本信息
- 操作系統(tǒng):Ubuntu 16.04.5 LTS
- KMS:6.13.0
- JDK:1.8.0_191
- SpringBoot:2.3.3.RELEASE
- 注意:本次實(shí)戰(zhàn)全程使用<font color="red">root</font>帳號(hào)
- 接下來(lái)開(kāi)始部署KMS;
操作
- 關(guān)閉防火墻驯镊;
- 安裝<font color="red">gnupg</font>:
apt-get install --no-install-recommends --yes gnupg
- 設(shè)置環(huán)境變量:
DISTRO="xenial"
- 從密鑰服務(wù)器下載密鑰到可信任的密鑰列表葫督,為后面的安裝做準(zhǔn)備:
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
- 啟動(dòng)kms:
service kurento-media-server start
- 查看kms狀態(tài),如下板惑,可見(jiàn)服務(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.
- 執(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
- 如果控制臺(tái)響應(yīng)以下內(nèi)容橄镜,證明KMS已經(jīng)可以正常服務(wù)了:
HTTP/1.1 500 Internal Server Error
Server: WebSocket++/0.7.0
- 至此,KMS部署和啟動(dòng)已經(jīng)完成冯乘,接下來(lái)咱們快速體驗(yàn)KMS的基礎(chǔ)能力洽胶;
體驗(yàn)KMS
- 接下來(lái)部署一個(gè)SpringBoot應(yīng)用,通過(guò)應(yīng)用的網(wǎng)頁(yè)服務(wù)體驗(yàn)KMS裆馒,這個(gè)應(yīng)用部署在另一臺(tái)電腦上(和KMS部署在一起也沒(méi)任何問(wèn)題)姊氓,整個(gè)環(huán)境情況如下:
- 登錄到上圖的<font color="blue">192.168.133.208</font>電腦丐怯,關(guān)閉防火墻;
- 在<font color="blue">192.168.133.208</font>電腦上安裝JDK8翔横;
- 本文的重點(diǎn)是KMS部署读跷,關(guān)于SpringBoot應(yīng)用無(wú)需開(kāi)發(fā),下載我準(zhǔn)備好的jar文件即可禾唁,地址是:https://download.csdn.net/download/boling_cavalry/14012545
- 將<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
- 控制臺(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)
- 在瀏覽器訪問(wèn)地址:https://192.168.133.208:8443 ,由于使用了自簽證書(shū)订雾,瀏覽器會(huì)有安全提示肢预,點(diǎn)擊下圖紅框中的按鈕:
-
點(diǎn)擊下圖紅框中的鏈接,即可訪問(wèn)SpringBoot應(yīng)用的首頁(yè):
首頁(yè)效果如下洼哎,這是Kurento官方的hello-world項(xiàng)目烫映,確保您當(dāng)前電腦上的麥克風(fēng)攝像頭都正常,再點(diǎn)擊下圖紅框中的<font color="blue">Start</font>按鈕噩峦,即可開(kāi)始WebRTC流程:
- 出于安全考慮锭沟,瀏覽器會(huì)彈出確認(rèn)窗口,如下圖紅框识补,點(diǎn)擊確認(rèn)后攝像頭開(kāi)始捕捉畫(huà)面:
- 如下圖族淮,WebRTC已經(jīng)開(kāi)始正常工作:
- 聰明的您應(yīng)該發(fā)現(xiàn)了,這個(gè)應(yīng)用的功能是將本地?cái)z像頭的數(shù)據(jù)給到KMS凭涂,再?gòu)腒MS取視頻到本地展示祝辣,官方給出的流程圖如下:
- 如果您使用的瀏覽器是Chrome,再打開(kāi)一個(gè)標(biāo)簽切油,輸入地址:chrome://webrtc-internals/ 蝙斜,可以查看WebRTC的詳情,如下圖澎胡,可以看到PeerConnection的詳細(xì)信息:
- 如下圖紅框所示孕荠,本地輸出到KMS的視頻流,編碼格式為<font color="blue">VP8</font>:
- 您可以繼續(xù)嘗試攻谁,登錄KMS機(jī)器執(zhí)行以下命令停止KMS服務(wù)稚伍,再回到網(wǎng)頁(yè)時(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)阁苞,接下來(lái)的文章咱們繼續(xù)寫(xiě)代碼做實(shí)戰(zhàn)困檩,一邊動(dòng)手一邊學(xué)習(xí)kurento祠挫;
你不孤單,欣宸原創(chuàng)一路相伴
歡迎關(guān)注公眾號(hào):程序員欣宸
微信搜索「程序員欣宸」悼沿,我是欣宸等舔,期待與您一同暢游Java世界...
https://github.com/zq2599/blog_demos