歡迎訪問我的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安裝和啟動成功:
[[email protected] ~]# 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部署和啟動完成,查看容器情况:
[[email protected] ~]# 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看看設置是否已經生效:
[[email protected] ~]# 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看看設置是否已經生效:
[[email protected] ~]# 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:
[[email protected] ~]# 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

Kurento實戰之二:快速部署和體驗的更多相關文章

  1. Jenkins流水線(pipeline)實戰之:從部署到體驗

    關於Jenkins流水線(pipeline) Jenkins 流水線 (pipeline) 是一套插件,讓Jenkins可以實現持續交付管道的落地和實施. 關於blueocean Blue Ocean ...

  2. Spring Boot 揭秘與實戰(二) 數據緩存篇 - 快速入門

    文章目錄 1. 聲明式緩存 2. Spring Boot默認集成CacheManager 3. 默認的 ConcurrenMapCacheManager 4. 實戰演練5. 擴展閱讀 4.1. Mav ...

  3. 2017.2.28 activiti實戰--第五章--用戶與組及部署管理(二)部署流程資源

    學習資料:<Activiti實戰> 第五章 用戶與組及部署管理(二)部署流程資源 內容概覽:講解流程資源的讀取與部署. 5.2 部署流程資源 5.2.1 流程資源 流程資源常用的有以下幾種 ...

  4. 使用Docker快速部署ELK分析Nginx日志實踐(二)

    Kibana漢化使用中文界面實踐 一.背景 筆者在上一篇文章使用Docker快速部署ELK分析Nginx日志實踐當中有提到如何快速搭建ELK分析Nginx日志,但是這只是第一步,後面還有很多儀錶盤需要 ...

  5. •搭建LAMP環境及快速部署雙網站並實現基於域名的虛擬主機

    本節所講內容: 實戰:搭建LAMP環境及快速部署雙網站並實現基於域名的虛擬主機 LAMP架構:??? Linux+Apache+Mysql+PHP Linux+Apache+Mysql/MariaDB ...

  6. Docker下實戰zabbix三部曲之一:極速體驗

    對於想學習和實踐zabbix的讀者來說,在真實環境搭建一套zabbix系統是件費時費力的事情,本文內容就是用docker來縮减搭建時間,目標是讓讀者們盡快投入zabbix系統的體驗和實踐: 環境信息 ...

  7. [轉帖]centos7 使用kubeadm 快速部署 kubernetes 國內源

    centos7 使用kubeadm 快速部署 kubernetes 國內源 https://www.cnblogs.com/qingfeng2010/p/10540832.html 前言 搭建kube ...

  8. 快速部署 Spring PetClinic 到函數計算平臺

    簡介 首先介紹下在本文出現的幾個比較重要的概念: 函數計算(Function Compute):函數計算是一個事件驅動的服務,通過函數計算,用戶無需管理服務器等運行情况,只需編寫代碼並上傳.函數計算准 ...

  9. Ubuntu部署和體驗Nexus3

    關於Nexus 如下圖,在局域網部署了Nexus之後,可以緩存中央倉庫的jar,開發者開發的二方庫發布到Nexus上,局域網內的其他人也可以從Nexus下載這些二方庫使用: 環境信息 本次實戰是在Li ...

  10. K8S環境快速部署Kafka(K8S外部可訪問)

    歡迎訪問我的GitHub https://github.com/zq2599/blog_demos 內容:所有原創文章分類匯總及配套源碼,涉及Java.Docker.Kubernetes.DevOPS ...

隨機推薦

  1. C# 多種方式發送郵件(附幫助類)

    因項目業務需要,需要做一個發送郵件功能,查了下資料,整了整,匯總如下,親測可用- QQ郵箱發送郵件 #region 發送郵箱 try { MailMessage mail = new MailMess ...

  2. Less 語法特性

                                     ——(原創翻譯:譯者添加部分解釋和代碼運行結果) 在線Less編譯器:LESS2CSS <一>綜述 Less作為CSS的 ...

  3. Nginx重新編譯添加模塊

    原文鏈接:http://www.linuxidc.com/Linux/2013-06/86438.htm 找到安裝nginx的源碼根目錄,如果沒有的話下載新的源碼 http://nginx.org t ...

  4. jquery中的事件與動畫

    一:事件 1.鼠標事件 eg:光棒效果 $(function () { $('li').mouseover(function () { //鼠標移過時 $(this).css('background' ...

  5. 20145208 《Java程序設計》第8周學習總結

    20145208 <Java程序設計>第8周學習總結 教材學習內容總結 NIO與NIO2 NIO與IO的區別 IO           NIO 面向流             面向緩沖 阻 ...

  6. javascript的變量、作用域和內存問題

    基本類型和引用類型的值執行環境垃圾收集 ECMAScript 變量可能包含兩種不同數據類型的值:基本類型值和引用類型值.基本類型值指的是簡單的數據段引用類型值指那些可能由多個值構成的對象 基本數據類型 ...

  7. 宙斯是一個完整的Hadoop的作業平臺[轉]

    https://github.com/alibaba/zeus 宙斯(zeus)是什麼 宙斯是一個完整的Hadoop的作業平臺從Hadoop任務的調試運行到生產任務的周期調度 宙斯支持任務的整個生命周 ...

  8. python運維開發(九)----socket

    內容目錄: socket通信過程 單線程socket 多線程socket ThreadingTCPServer socket socket通常也稱作"套接字",用於描述IP地址和端 ...

  9. 基於科大訊飛語音雲windows平臺開發

    前記: 前段時間公司沒事幹,突發奇想想做一個語音識別系統,看起來應該非常easy的,但做起來卻是各種問題,這個對電氣畢業的我,卻是挺為難的.穀姐已經離我們而去,感謝度娘,感謝CSDN各比特大神,好歹也做 ...

  10. 自動生成Code First代碼

    自動生成Code First代碼 在前面的文章中我們提到Entity Framework的“Code First”模式也同樣可以基於現有數據庫進行開發.今天就讓我們一起看一下使用Entity Fram ...