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

Stella981
• 阅读 463

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

本篇概览

  • 本文是《Kurento实战》的第二篇,前文手动部署了KMS并体验了一个demo,咱们对Kurento有了最初步的了解,现在回想似乎操作有些繁琐,今天就来尝试利用docker快速部署KMS,再快速体验多个官方demo;
  • 本篇由以下内容组成:
    Kurento实战之二:快速部署和体验

接下来开始体验吧;

环境准备

  1. 本次实战,需要您准备一台Linux电脑,物理机、虚拟机都可以,Ubuntu或者CentOS都可以,版本没有特殊要求,我这里用的是CentOS-7.9;

  2. 本文所有操作用的都是root账号;

  3. 接下来是环境准备的几步操作;

  4. 关闭防火墙并禁止开机启动:

    systemctl stop firewalld && systemctl disable firewalld

  5. 执行以下命令安装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

  6. 执行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

  7. 设置镜像加速,否则下载镜像慢并且时常超时,执行以下命令完成镜像加速的设置并使其生效:

    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

  2. 等待控制台输出完成即代表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

  3. 执行以下命令确认响应是否正常:

    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

  4. 如果控制台响应以下内容,证明KMS已经可以正常服务了:

    HTTP/1.1 500 Internal Server Error Server: WebSocket++/0.7.0

  5. 需要格外注意:从前面的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 ,如下图,功能非常丰富:
    Kurento实战之二:快速部署和体验

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

  4. 在环境变量中写入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

  5. 执行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)

  6. 接下来是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

  7. 执行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"

  8. 为了提高二方库的下载速度,建议配置阿里云仓库,打开文件/usr/local/apache-maven-3.6.3/conf/settings.xml,找到mirrors节点,在里面增加以下内容:

    nexus-aliyun central Nexus aliyun http://maven.aliyun.com/nexus/content/groups/public
  9. 保存退出,环境设置已经完成,接下来可以下载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

  3. 解压后是个名为的文件夹,里面是前面截图中的那些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:
    Kurento实战之二:快速部署和体验

  2. 一旦咱们运行一个demo,就会变成下图的样子:
    Kurento实战之二:快速部署和体验

  3. 然后,咱们会在另一台电脑上用浏览器访问demo应用的网页,以kurento-hello-world这个demo为例,基本流程如下(省略了WebRTC的复杂流程):
    Kurento实战之二:快速部署和体验

  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 &

  2. 此时开始编译项目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 ...

  3. 漫长等待后输入以下信息,标志着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)

  4. 我这里CentOS电脑的IP是192.168.133.208,因此用浏览器访问demo的地址是:https://192.168.133.208:8443/ ,即可体验demo的功能,如下图:
    Kurento实战之二:快速部署和体验

  • 这个服务就让它一直运行吧,接下来咱们继续体验下一个demo;

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

  1. 马上要体验的demo,其功能和前面的差不多,也是从KMS取得本地的视频数据用来展示,不同的是KMS会对视频做处理,给视频中的人加上一顶帽子;

  2. 进入demo源码的子目录kurento-magic-mirror,在启动此应用之前有个问题要处理:前一个demo已经占用了8443端口,这里就不能再用了,要改;

  3. 打开kurento-magic-mirror目录下的pom.xml文件,找到下图红框位置,这里就是应用端口的值,请改成一个还未占用的值(我这里改成了8444):
    Kurento实战之二:快速部署和体验

  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 &

  5. 启动成功后,浏览器访问https://192.168.133.208:8444/,运行起来的效果如下图所示,视频中的人带上了一顶帽子:
    Kurento实战之二:快速部署和体验

其他典型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世界…

本文同步分享在 博客“程序员欣宸”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
刚刚好 刚刚好
4个月前
css问题
1、在IOS中图片不显示(给图片加了圆角或者img没有父级)<div<imgsrc""/</divdiv{width:20px;height:20px;borderradius:20px;overflow:h
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
小森森 小森森
4个月前
校园表白墙微信小程序V1.0 SayLove -基于微信云开发-一键快速搭建,开箱即用
后续会继续更新,敬请期待2.0全新版本欢迎添加左边的微信一起探讨!项目地址:(https://www.aliyun.com/activity/daily/bestoffer?userCodesskuuw5n)\2.Bug修复更新日历2.情侣脸功能大家不要使用了,现在阿里云的接口已经要收费了(土豪请随意),\\和注意
晴空闲云 晴空闲云
4个月前
css中box-sizing解放盒子实际宽高计算
我们知道传统的盒子模型,如果增加内边距padding和边框border,那么会撑大整个盒子,造成盒子的宽度不好计算,在实务中特别不方便。boxsizing可以设置盒模型的方式,可以很好的设置固定宽高的盒模型。盒子宽高计算假如我们设置如下盒子:宽度和高度均为200px,那么这会这个盒子实际的宽高就都是200px。但是当我们设置这个盒子的边框和内间距的时候,那
艾木酱 艾木酱
3个月前
快速入门|使用MemFire Cloud构建React Native应用程序
MemFireCloud是一款提供云数据库,用户可以创建云数据库,并对数据库进行管理,还可以对数据库进行备份操作。它还提供后端即服务,用户可以在1分钟内新建一个应用,使用自动生成的API和SDK,访问云数据库、对象存储、用户认证与授权等功能,可专
Stella981 Stella981
1年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
1年前
MySQL查询按照指定规则排序
1.按照指定(单个)字段排序selectfromtable_nameorderiddesc;2.按照指定(多个)字段排序selectfromtable_nameorderiddesc,statusdesc;3.按照指定字段和规则排序selec
Stella981 Stella981
1年前
Angular material mat
IconIconNamematiconcode_add\_comment_addcommenticon<maticonadd\_comment</maticon_attach\_file_attachfileicon<maticonattach\_file</maticon_attach\
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
helloworld_28799839 helloworld_28799839
4个月前
常用知识整理
Javascript判断对象是否为空jsObject.keys(myObject).length0经常使用的三元运算我们经常遇到处理表格列状态字段如status的时候可以用到vue
helloworld_34035044 helloworld_34035044
7个月前
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为