Kurento实战之二:快速部署和体验

2021-06-11  本文已影响0人  程序员欣宸

欢迎访问我的GitHub

https://github.com/zq2599/blog_demos

内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;

本篇概览

接下来开始体验吧;

环境准备

  1. 本次实战,需要您准备一台Linux电脑,物理机、虚拟机都可以,Ubuntu或者CentOS都可以,版本没有特殊要求,我这里用的是CentOS-7.9;
  2. 本文所有操作用的都是<font color="red">root</font>账号;
  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. 执行<font color="red">docker version</font>,如果看到以下信息表示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. <font color="red">需要格外注意</font>:从前面的<font color="blue">docker run</font>命令的参数可以发现,KMS容器直接使用了宿主机的网卡(--network host),因此,<font color="red">请不要在Mac电脑上执行本篇的的操作,因为Mac电脑的docker不支持host网络模式</font>;

关于官方demo

  1. Kurento官方分别基于java和nodejs实现了KMS客户端,并基于这两种客户端分别实现了demo;
  2. 请大家原谅欣宸在nodejs领域的毫无建树,接下来咱们将会体验java版本的demo,重点是<font color="blue">如何快速体验这些demo</font>;
  3. java版本demo的地址是:https://github.com/Kurento/kurento-tutorial-java ,如下图,功能非常丰富:
在这里插入图片描述

demo运行环境准备

  1. 由于demo是java版本,所以要安装JDK和Maven,下面是安装步骤;
  2. 请下载Linxu版本的JDK安装包,我这里用的是<font color="blue">jdk-8u191-linux-x64.tar.gz</font>,请自行前往Oracle官方下载;
  3. 将<font color="blue">jdk-8u191-linux-x64.tar.gz</font>上传到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. 执行<font color="blue">java -version</font>看看设置是否已经生效:
[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. 执行<font color="blue">mvn -version</font>看看设置是否已经生效:
[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. 为了提高二方库的下载速度,建议配置阿里云仓库,打开文件<font color="blue">/usr/local/apache-maven-3.6.3/conf/settings.xml</font>,找到<font color="red">mirrors</font>节点,在里面增加以下内容:
 <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的稳定,就不下载最新代码了,而是已经归档的<font color="blue">6.15.0</font>版本,执行以下命令完成下载和解压:
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前,先梳理一下数据流

  1. 简单看看当前情况,现在的情况如下图所示,CentoOS电脑上运行着KMS:
在这里插入图片描述
  1. 一旦咱们运行一个demo,就会变成下图的样子:
在这里插入图片描述
  1. 然后,咱们会在另一台电脑上用浏览器访问demo应用的网页,以<font color="blue">kurento-hello-world</font>这个demo为例,基本流程如下(省略了WebRTC的复杂流程):
在这里插入图片描述
  1. 上面就是一个最基本的demo所涉及的数据流向,当然了,每个demo都有其特殊性,例如直播的demo是多个浏览器连接到KMS,不过整体上与上面的流程图类似;

demo之一:本人本地预览+实时播放

  1. 进入demo源码的子目录<font color="blue">kurento-hello-world</font>,执行以下命令即可启动demo应用,并且,将控制台信息转存到<font color="blue">~/kurento-hello-world.log</font>:
nohup mvn -U clean spring-boot:run \
-Dspring-boot.run.jvmArguments="-Dkms.url=ws://localhost:8888/kurento" \
>> ~/kurento-hello-world.log \
2>&1 &
  1. 此时开始编译项目<font color="blue">kurento-hello-world</font>,会消耗一定时间,可以执行命令<font color="blue">tail -f ~/kurento-hello-world.log</font>查看当前进展,如下所示,我这里还在下载二方库:
...
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是<font color="blue">192.168.133.208</font>,因此用浏览器访问demo的地址是:https://192.168.133.208:8443/ ,即可体验demo的功能,如下图:
在这里插入图片描述

demo之二:本人本地预览+实时播放(带filter特效)

  1. 马上要体验的demo,其功能和前面的差不多,也是从KMS取得本地的视频数据用来展示,不同的是KMS会对视频做处理,给视频中的人加上一顶帽子;
  2. 进入demo源码的子目录<font color="blue">kurento-magic-mirror</font>,在启动此应用之前有个问题要处理:前一个demo已经占用了8443端口,这里就不能再用了,要改;
  3. 打开<font color="blue">kurento-magic-mirror</font>目录下的<font color="red">pom.xml</font>文件,找到下图红框位置,这里就是应用端口的值,请改成一个还未占用的值(我这里改成了<font color="blue">8444</font>):
在这里插入图片描述
  1. 执行以下命令即可启动demo应用,并且将控制台信息转存到<font color="blue">~/kurento-magic-mirror.log</font>:
nohup mvn -U clean spring-boot:run \
-Dspring-boot.run.jvmArguments="-Dkms.url=ws://localhost:8888/kurento" \
>> ~/kurento-magic-mirror.log \
2>&1 &
  1. 启动成功后,浏览器访问<font color="blue">https://192.168.133.208:8444/</font>,运行起来的效果如下图所示,视频中的人带上了一顶帽子:
在这里插入图片描述

其他典型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会输出这些物体进入和退出区域的事件

你不孤单,欣宸原创一路相伴

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 数据库+中间件系列
  6. DevOps系列

欢迎关注公众号:程序员欣宸

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

上一篇下一篇

猜你喜欢

热点阅读