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


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM