歡迎訪問我的GitHub
https://github.com/zq2599/blog_demos
內容:所有原創文章分類匯總及配套源碼,涉及Java、Docker、Kubernetes、DevOPS等;
本篇概覽
- 本文是《Kurento實戰》的第二篇,前文手動部署了KMS並體驗了一個demo,咱們對Kurento有了最初步的了解,現在回想似乎操作有些繁瑣,今天就來嘗試利用docker快速部署KMS,再快速體驗多個官方demo;
- 本篇由以下內容組成:
接下來開始體驗吧;
環境准備
- 本次實戰,需要您准備一台Linux電腦,物理機、虛擬機都可以,Ubuntu或者CentOS都可以,版本沒有特殊要求,我這里用的是CentOS-7.9;
- 本文所有操作用的都是root賬號;
- 接下來是環境准備的幾步操作;
- 關閉防火牆並禁止開機啟動:
systemctl stop firewalld && systemctl disable firewalld
- 執行以下命令安裝wget和docker:
yum install -y wget yum-utils device-mapper-persistent-data lvm2 \
&& yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo \
&& yum install -y docker-ce docker-ce-cli containerd.io \
&& systemctl start docker
- 執行docker version,如果看到以下信息表示docker安裝和啟動成功:
[root@centos7 ~]# docker version
Client: Docker Engine - Community
Version: 20.10.2
API version: 1.41
Go version: go1.13.15
Git commit: 2291f61
Built: Mon Dec 28 16:17:48 2020
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.2
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: 8891c58
Built: Mon Dec 28 16:16:13 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.3
GitCommit: 269548fa27e0089a8b8278fc4fc781d7f65a939b
runc:
Version: 1.0.0-rc92
GitCommit: ff819c7e9184c13b7c2607fe6c30ae19403a7aff
docker-init:
Version: 0.19.0
GitCommit: de40ad0
- 設置鏡像加速,否則下載鏡像慢並且時常超時,執行以下命令完成鏡像加速的設置並使其生效:
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
環境准備完成,接下來安裝KMS;
安裝KMS
- 執行以下命令即可完成KMS安裝,下載鏡像有些耗時請耐心等待:
docker run -d \
--name kms \
--network host \
kurento/kurento-media-server:6.15
- 等待控制台輸出完成即代表KMS部署和啟動完成,查看容器情況:
[root@centos7 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4265203b2baa kurento/kurento-media-server:6.15 "/entrypoint.sh" 3 minutes ago Up 3 minutes (healthy) kms
- 執行以下命令確認響應是否正常:
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
- 需要格外注意:從前面的docker run命令的參數可以發現,KMS容器直接使用了宿主機的網卡(--network host),因此,請不要在Mac電腦上執行本篇的的操作,因為Mac電腦的docker不支持host網絡模式;
- 至此,KMS部署完畢(也就是一行命令的事兒),接下來試試如何快速體驗官方的多個demo;
關於官方demo
- Kurento官方分別基於java和nodejs實現了KMS客戶端,並基於這兩種客戶端分別實現了demo;
- 請大家原諒欣宸在nodejs領域的毫無建樹,接下來咱們將會體驗java版本的demo,重點是如何快速體驗這些demo;
- java版本demo的地址是:https://github.com/Kurento/kurento-tutorial-java ,如下圖,功能非常豐富:
demo運行環境准備
- 由於demo是java版本,所以要安裝JDK和Maven,下面是安裝步驟;
- 請下載Linxu版本的JDK安裝包,我這里用的是jdk-8u191-linux-x64.tar.gz,請自行前往Oracle官方下載;
- 將jdk-8u191-linux-x64.tar.gz上傳到CentOS電腦上,再執行以下命令,將JDK包解壓到合適的位置:
mkdir -p /usr/lib/jvm
tar -C /usr/lib/jvm/ -xzf jdk-8u191-linux-x64.tar.gz
- 在環境變量中寫入JDK相關的信息,並使之生效:
echo 'export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_191' >> ~/.bashrc
echo 'export JRE_HOME=${JAVA_HOME}/jre' >> ~/.bashrc
echo 'export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib' >> ~/.bashrc
echo 'export PATH=${JAVA_HOME}/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
- 執行java -version看看設置是否已經生效:
[root@centos7 ~]# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
- 接下來是maven,執行以下命令,即可完成下載、解壓、環境變量設置等所有工作:
wget https://mirrors.bfsu.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
tar -C /usr/local/ -xzf apache-maven-3.6.3-bin.tar.gz
echo 'export MAVEN_HOME=/usr/local/apache-maven-3.6.3' >> ~/.bashrc
echo 'export PATH=$MAVEN_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
- 執行mvn -version看看設置是否已經生效:
[root@centos7 ~]# mvn -version
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /usr/local/apache-maven-3.6.3
Java version: 1.8.0_191, vendor: Oracle Corporation, runtime: /usr/lib/jvm/jdk1.8.0_191/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.11.1.el7.x86_64", arch: "amd64", family: "unix"
- 為了提高二方庫的下載速度,建議配置阿里雲倉庫,打開文件/usr/local/apache-maven-3.6.3/conf/settings.xml,找到mirrors節點,在里面增加以下內容:
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
- 保存退出,環境設置已經完成,接下來可以下載demo源碼了;
下載官方demo
- 現在咱們把官方demo下載下來,用於稍后的體驗;
- 為了確保demo的穩定,就不下載最新代碼了,而是已經歸檔的6.15.0版本,執行以下命令完成下載和解壓:
wget https://github.com/Kurento/kurento-tutorial-java/archive/6.15.0.tar.gz
tar -xzf 6.15.0.tar.gz
- 解壓后是個名為的文件夾,里面是前面截圖中的那些demo:
[root@centos7 ~]# tree -L 1 kurento-tutorial-java-6.15.0/
kurento-tutorial-java-6.15.0/
├── kurento-chroma
├── kurento-crowddetector
├── kurento-group-call
├── kurento-hello-world
├── kurento-hello-world-recording
├── kurento-hello-world-repository
├── kurento-magic-mirror
├── kurento-metadata-example
├── kurento-one2many-call
├── kurento-one2one-call
├── kurento-one2one-call-advanced
├── kurento-one2one-call-recording
├── kurento-platedetector
├── kurento-player
├── kurento-pointerdetector
├── kurento-rtp-receiver
├── kurento-send-data-channel
├── kurento-show-data-channel
├── LICENSE
├── NOTICE
├── pom.xml
└── README.md
18 directories, 4 files
- 至此,運行官方demo前的准備工作已經完成,開始體驗精彩的官方demo吧!
運行官方demo前,先梳理一下數據流
- 簡單看看當前情況,現在的情況如下圖所示,CentoOS電腦上運行着KMS:
- 一旦咱們運行一個demo,就會變成下圖的樣子:
- 然后,咱們會在另一台電腦上用瀏覽器訪問demo應用的網頁,以kurento-hello-world這個demo為例,基本流程如下(省略了WebRTC的復雜流程):
4. 上面就是一個最基本的demo所涉及的數據流向,當然了,每個demo都有其特殊性,例如直播的demo是多個瀏覽器連接到KMS,不過整體上與上面的流程圖類似;
- 做了這么多准備工作還沒開始運行demo,可能您已經很憤怒了,好吧我不繼續逼逼了,咱們立即開始運行demo;
- 再多說一句:運行瀏覽器的電腦上請備好攝像頭和麥克風,不然很多demo功能無法體驗;
demo之一:本人本地預覽+實時播放
- 進入demo源碼的子目錄kurento-hello-world,執行以下命令即可啟動demo應用,並且,將控制台信息轉存到~/kurento-hello-world.log:
nohup mvn -U clean spring-boot:run \
-Dspring-boot.run.jvmArguments="-Dkms.url=ws://localhost:8888/kurento" \
>> ~/kurento-hello-world.log \
2>&1 &
- 此時開始編譯項目kurento-hello-world,會消耗一定時間,可以執行命令tail -f ~/kurento-hello-world.log查看當前進展,如下所示,我這里還在下載二方庫:
...
Downloaded from nexus-aliyun: http://maven.aliyun.com/nexus/content/groups/public/com/jcraft/jsch.agentproxy.jsch/0.0.9/jsch.agentproxy.jsch-0.0.9.jar (0 B at 0 B/s)
Downloading from nexus-aliyun: http://maven.aliyun.com/nexus/content/groups/public/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar
Downloaded from nexus-aliyun: http://maven.aliyun.com/nexus/content/groups/public/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-6/plexus-interactivity-api-1.0-alpha-6.jar (0 B at 0 B/s)
Downloading from nexus-aliyun: http://maven.aliyun.com/nexus/content/groups/public/org/apache/maven/wagon/wagon-ssh-common/3.3.2/wagon-ssh-common-3.3.2.jar
Progress (1): 1.9 kB
...
- 漫長等待后輸入以下信息,標志着demo啟動成功:
[INFO] --- spring-boot-maven-plugin:2.2.4.RELEASE:run (default-cli) @ kurento-hello-world ---
[INFO] Attaching agents: []
.------------------------------------.
| |
| | |/ / _ _ _ ___ _ _| |_ ___ |
| | ' < || | '_/ -_) ' \ _/ _ \ |
| |_|\_\_,_|_| \___|_||_\__\___/ |
| |
'------------------------------------'
Kurento Java Tutorial - Hello World
Version 6.15.0
2021-01-09 15:56:15.348 WARN 35812 --- [ main] o.s.boot.StartupInfoLogger : InetAddress.getLocalHost().getHostName() took 10012 milliseconds to respond. Please verify your network configuration.
2021-01-09 15:56:25.366 INFO 35812 --- [ main] o.k.tutorial.helloworld.Application : Starting Application on centos7 with PID 35812 (/root/kurento-tutorial-java-6.15.0/kurento-hello-world/target/classes started by root in /root/kurento-tutorial-java-6.15.0/kurento-hello-world)
2021-01-09 15:56:25.367 INFO 35812 --- [ main] o.k.tutorial.helloworld.Application : No active profile set, falling back to default profiles: default
2021-01-09 15:56:25.984 INFO 35812 --- [rbeatExec-e1-t0] o.k.j.c.JsonRpcClientNettyWebSocket : [KurentoClient] Connecting native client
2021-01-09 15:56:25.985 INFO 35812 --- [rbeatExec-e1-t0] o.k.j.c.JsonRpcClientNettyWebSocket : [KurentoClient] Creating new NioEventLoopGroup
2021-01-09 15:56:41.079 INFO 35812 --- [ntLoopGroup-2-1] o.k.j.c.JsonRpcClientNettyWebSocket : [KurentoClient] Initiating new Netty channel. Will create new handler too!
2021-01-09 15:56:41.140 WARN 35812 --- [ main] org.kurento.client.KurentoClient : Connected to KMS in 15142 millis (> 5000 millis)
2021-01-09 15:56:41.704 INFO 35812 --- [ main] o.k.tutorial.helloworld.Application : Started Application in 51.601 seconds (JVM running for 51.817)
- 我這里CentOS電腦的IP是192.168.133.208,因此用瀏覽器訪問demo的地址是:https://192.168.133.208:8443/ ,即可體驗demo的功能,如下圖:
- 這個服務就讓它一直運行吧,接下來咱們繼續體驗下一個demo;
demo之二:本人本地預覽+實時播放(帶filter特效)
- 馬上要體驗的demo,其功能和前面的差不多,也是從KMS取得本地的視頻數據用來展示,不同的是KMS會對視頻做處理,給視頻中的人加上一頂帽子;
- 進入demo源碼的子目錄kurento-magic-mirror,在啟動此應用之前有個問題要處理:前一個demo已經占用了8443端口,這里就不能再用了,要改;
- 打開kurento-magic-mirror目錄下的pom.xml文件,找到下圖紅框位置,這里就是應用端口的值,請改成一個還未占用的值(我這里改成了8444):
4. 執行以下命令即可啟動demo應用,並且將控制台信息轉存到~/kurento-magic-mirror.log:
nohup mvn -U clean spring-boot:run \
-Dspring-boot.run.jvmArguments="-Dkms.url=ws://localhost:8888/kurento" \
>> ~/kurento-magic-mirror.log \
2>&1 &
- 啟動成功后,瀏覽器訪問https://192.168.133.208:8444/,運行起來的效果如下圖所示,視頻中的人帶上了一頂帽子:
其他典型demo簡介
- 受篇幅限制,其他demo就不再逐個操作了,您已經掌握了所有要點,可以自行啟動並體驗,這里再將幾個典型的demo簡單介紹一下,希望能給您的體驗帶來一些參考:
- kurento-one2one-call:一對一視頻聊天,張三在"Name"輸入自己名字,再點擊"Register",李四在"Name"輸入自己名字,再在"Peer"輸入張三的名字再點擊"Call",即可發起聊天
- kurento-one2many-call:直播,主播點擊"Presenter"開始直播,觀眾點擊"Viewer"觀看直播(演示環境,只支持一位主播)
- kurento-group-call:多人會議,輸入自己的名字,再輸入房間名稱,即可開始多人會議
- kurento-platedetector:通過攝像頭識別車牌(很難識別到,好不容易識別到了,還識別錯誤)
- kurento-chroma:會將視頻中的綠色區域替換成超級馬里奧的圖片
- kurento-crowddetector:在視頻中划定區域(ROI),區域中如果有人群出現,就會閃爍
- kurento-player:指定流媒體地址,KMS拉取並解碼,然后通過WebRTC實時傳遞給瀏覽器
- kurento-pointerdetector:在幾個固定的區域,如果某些顏色的物體在這幾個位置晃動(某些顏色指的是可以被KMS的指定filter識別的顏色),頁面的console會輸出這些物體進入和退出區域的事件
- 以上就是快速部署KMS和體驗官方demo的詳細步驟了,希望本文能協助您快速了解Kurento,接下來的文章咱們會逐漸深入學習Kurento開發。
你不孤單,欣宸原創一路相伴
歡迎關注公眾號:程序員欣宸
微信搜索「程序員欣宸」,我是欣宸,期待與您一同暢游Java世界...
https://github.com/zq2599/blog_demos