Kurento實戰之二:快速部署和體驗

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

歡迎訪問我的GitHub

https://github.com/zq2599/blog_demos

內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等;

本篇概覽

  • 本文是《Kurento實戰》的第二篇,前文手動部署了KMS並體驗了一個demo,我們們對Kurento有了最初步的瞭解,現在回想似乎操作有些繁瑣,今天就來嘗試利用docker快速部署KMS,再快速體驗多個官方demo;
  • 本篇由以下內容組成:
    在這裡插入圖片描述

接下來開始體驗吧;

環境準備

  1. 本次實戰,需要您準備一臺Linux電腦,物理機、虛擬機器都可以,Ubuntu或者CentOS都可以,版本沒有特殊要求,我這裡用的是CentOS-7.9;
  2. 本文所有操作用的都是root賬號;
  3. 接下來是環境準備的幾步操作;
  4. 關閉防火牆並禁止開機啟動:
systemctl stop firewalld && systemctl disable firewalld
  1. 執行以下命令安裝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
  1. 執行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
  1. 設定映象加速,否則下載映象慢並且時常超時,執行以下命令完成映象加速的設定並使其生效:
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

  1. 執行以下命令即可完成KMS安裝,下載映象有些耗時請耐心等待:
docker run -d \
--name kms \
--network host \
kurento/kurento-media-server:6.15
  1. 等待控制檯輸出完成即代表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
  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. 需要格外注意:從前面的docker run命令的引數可以發現,KMS容器直接使用了宿主機的網路卡(--network host),因此,請不要在Mac電腦上執行本篇的的操作,因為Mac電腦的docker不支援host網路模式
  • 至此,KMS部署完畢(也就是一行命令的事兒),接下來試試如何快速體驗官方的多個demo;

關於官方demo

  1. Kurento官方分別基於java和nodejs實現了KMS客戶端,並基於這兩種客戶端分別實現了demo;
  2. 請大家原諒欣宸在nodejs領域的毫無建樹,接下來我們們將會體驗java版本的demo,重點是如何快速體驗這些demo
  3. java版本demo的地址是:https://github.com/Kurento/kurento-tutorial-java ,如下圖,功能非常豐富:

在這裡插入圖片描述

demo執行環境準備

  1. 由於demo是java版本,所以要安裝JDK和Maven,下面是安裝步驟;
  2. 請下載Linxu版本的JDK安裝包,我這裡用的是jdk-8u191-linux-x64.tar.gz,請自行前往Oracle官方下載;
  3. 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
  1. 在環境變數中寫入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
  1. 執行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)
  1. 接下來是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

  1. 執行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"

  1. 為了提高二方庫的下載速度,建議配置阿里雲倉庫,開啟檔案/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>
  1. 儲存退出,環境設定已經完成,接下來可以下載demo原始碼了;

下載官方demo

  1. 現在我們們把官方demo下載下來,用於稍後的體驗;
  2. 為了確保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
  1. 解壓後是個名為的資料夾,裡面是前面截圖中的那些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前,先梳理一下資料流

  1. 簡單看看當前情況,現在的情況如下圖所示,CentoOS電腦上執行著KMS:

在這裡插入圖片描述

  1. 一旦我們們執行一個demo,就會變成下圖的樣子:

在這裡插入圖片描述

  1. 然後,我們們會在另一臺電腦上用瀏覽器訪問demo應用的網頁,以kurento-hello-world這個demo為例,基本流程如下(省略了WebRTC的複雜流程):

在這裡插入圖片描述
4. 上面就是一個最基本的demo所涉及的資料流向,當然了,每個demo都有其特殊性,例如直播的demo是多個瀏覽器連線到KMS,不過整體上與上面的流程圖類似;

  • 做了這麼多準備工作還沒開始執行demo,可能您已經很憤怒了,好吧我不繼續逼逼了,我們們立即開始執行demo;
  • 再多說一句:執行瀏覽器的電腦上請備好攝像頭和麥克風,不然很多demo功能無法體驗;

demo之一:本人本地預覽+實時播放

  1. 進入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 &
  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
...
  1. 漫長等待後輸入以下資訊,標誌著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)

  1. 我這裡CentOS電腦的IP是192.168.133.208,因此用瀏覽器訪問demo的地址是:https://192.168.133.208:8443/ ,即可體驗demo的功能,如下圖:

在這裡插入圖片描述

  • 這個服務就讓它一直執行吧,接下來我們們繼續體驗下一個demo;

demo之二:本人本地預覽+實時播放(帶filter特效)

  1. 馬上要體驗的demo,其功能和前面的差不多,也是從KMS取得本地的視訊資料用來展示,不同的是KMS會對視訊做處理,給視訊中的人加上一頂帽子;
  2. 進入demo原始碼的子目錄kurento-magic-mirror,在啟動此應用之前有個問題要處理:前一個demo已經佔用了8443埠,這裡就不能再用了,要改;
  3. 開啟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 &
  1. 啟動成功後,瀏覽器訪問https://192.168.133.208:8444/,執行起來的效果如下圖所示,視訊中的人帶上了一頂帽子:

在這裡插入圖片描述

其他典型demo簡介

  • 受篇幅限制,其他demo就不再逐個操作了,您已經掌握了所有要點,可以自行啟動並體驗,這裡再將幾個典型的demo簡單介紹一下,希望能給您的體驗帶來一些參考:
  1. kurento-one2one-call:一對一視訊聊天,張三在"Name"輸入自己名字,再點選"Register",李四在"Name"輸入自己名字,再在"Peer"輸入張三的名字再點選"Call",即可發起聊天
  2. kurento-one2many-call:直播,主播點選"Presenter"開始直播,觀眾點選"Viewer"觀看直播(演示環境,只支援一位主播)
  3. kurento-group-call:多人會議,輸入自己的名字,再輸入房間名稱,即可開始多人會議
  4. kurento-platedetector:通過攝像頭識別車牌(很難識別到,好不容易識別到了,還識別錯誤)
  5. kurento-chroma:會將視訊中的綠色區域替換成超級馬里奧的圖片
  6. kurento-crowddetector:在視訊中劃定區域(ROI),區域中如果有人群出現,就會閃爍
  7. kurento-player:指定流媒體地址,KMS拉取並解碼,然後通過WebRTC實時傳遞給瀏覽器
  8. kurento-pointerdetector:在幾個固定的區域,如果某些顏色的物體在這幾個位置晃動(某些顏色指的是可以被KMS的指定filter識別的顏色),頁面的console會輸出這些物體進入和退出區域的事件
  • 以上就是快速部署KMS和體驗官方demo的詳細步驟了,希望本文能協助您快速瞭解Kurento,接下來的文章我們們會逐漸深入學習Kurento開發。

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

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

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

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

相關文章