WVP PRO配置实战

news2025/1/18 2:07:05

在这里插入图片描述

WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的开箱即用的网络视频平台,负责实现核心信令与设备管理后台部分,支持NAT穿透,支持海康、大华、宇视等品牌的IPC、NVR接入。支持国标级联,支持将不带国标功能的摄像机/直播流/直播推流转发到其他国标平台。

流媒体服务基于@夏楚 ZLMediaKit https://github.com/ZLMediaKit/ZLMediaKit
播放器使用@dexter jessibuca https://github.com/langhuihui/jessibuca/tree/v3
前端页面基于@Kyle MediaServerUI https://gitee.com/kkkkk5G/MediaServerUI 进行修改.

应用场景

支持浏览器无插件播放摄像头视频。 支持国标设备(摄像机、平台、NVR等)设备接入 支持非国标(onvif, rtsp, rtmp,直播设备等等)设备接入,充分利旧。 支持国标级联。多平台级联。跨网视频预览。 支持跨网网闸平台互联。

官方文档

官方文档写的很清楚。本文也是基于官方文档实现的。

  • 官方网站
    https://doc.wvp-pro.cn/#/
  • github项目主页
    https://github.com/648540858/wvp-GB28181-pro

docker(伪虚拟机)

本次部署与安装准备在docker容器中配置。为什么要在docker中配置呢?在这里我主要是把docker当作虚拟机使用。这样配置好了以后方便移植和部署。而在Linux中运行的话,docker的性能要比虚拟机强多了。

不用docker的可以直接跳过此节,往后看基本就是普通的 ubuntu Linux操作。

docker安装

docker的安装,不是本文的重点。请参考docker的官方文档:
https://docs.docker.com/engine/install/

比如:ubuntu的安装我参考的是:
https://docs.docker.com/engine/install/ubuntu/

创建容器

docker的基本使用,可以参考:
《Docker使用笔记》
https://blog.csdn.net/lxyoucan/article/details/121572097

下载镜像

这里我选用的是ubuntu系统,理论上其他发行版本也一样。

docker pull ubuntu

创建一个CONTAINER

执行下面命令:

docker run --name wvp -it ubuntu bash

这样我们就创建一个名为wvp的容器,并且直接执行bash。
这里说一下可能用到的操作

退出与进入CONTAINER

  • 快捷键ctrl -p ctrl-q 退出并让CONTAINER后台运行
  • 命令exit退出,会直接让CONTAINER关机

进入CONTAINER
docker attach $NAMES
docker attach $CONTAINER ID

比如我们这里应该输入:

docker attach wvp

可以查询系统的版本。

cat /etc/*-release

我这里是Ubuntu 22.04.2 LTS

简单配置实用工具

创建一个容器,就相当与刚安装了一个系统。我们先做简单的配置,和实用工具的安装。此节非必须。看个人喜好。

unminimize

因为docker中的ubuntu是精简版本的,就是恢复正常模式.
此步可能不是必须的,但是执行完这一步以后,这个容器会更接近一个真实的ubuntu.缺点就是会让这个容器体积会更大一些。

设置国内源

国内源很多,找个自己喜欢的就行了。
设置方法见:https://blog.csdn.net/lxyoucan/article/details/121691910

安装常用软件

下面这些软件是本人使用linux必备软件,仅供参考。

apt-get update
# 安装文本编辑器
apt install vim
# 安装zsh ,本人比较喜爱zsh替换bash
apt install zsh
# 网络工具
apt install curl wget
apt install unzip ranger

准备工作

我这里是Ubuntu 22.04.2 LTS,操作步骤基本参考官方手册。
https://doc.wvp-pro.cn/#/_content/introduction/compile

安装依赖

依赖版本用途开发环境需要生产环境需要
jdk>=1.8运行与编译java代码
maven>=3.3管理java代码依赖
git下载/更新/提交代码
nodejs编译于运行前端文件
npm管理前端文件依赖
apt-get install -y openjdk-11-jre git maven nodejs npm

安装mysql

这里说一下,我尝试安装mysql,但是在容器中没有安装成功。我也就没有花额外时间折腾了。
我用mariadb代替了,反正兼容mysql。
官方教程地址:

https://mariadb.org/download/?t=repo-config&d=22.04+%22jammy%22&v=10.11&r_m=aliyun

我把关键部分截取下来。
以下是在 Ubuntu 系统上导入 MariaDB 存储库密钥时要运行的命令:

sudo apt-get install apt-transport-https curl
sudo mkdir -p /etc/apt/keyrings
sudo curl -o /etc/apt/keyrings/mariadb-keyring.pgp 'https://mariadb.org/mariadb_release_signing_key.pgp'

编辑/etc/apt/sources.list.d/mariadb.sources,内容如下:

# MariaDB 10.11 repository list - created 2023-06-19 10:07 UTC
# https://mariadb.org/download/
X-Repolib-Name: MariaDB
Types: deb
# deb.mariadb.org is a dynamic mirror if your preferred mirror goes offline. See https://mariadb.org/mirrorbits/ for details.
# URIs: https://deb.mariadb.org/10.11/ubuntu
URIs: https://mirrors.aliyun.com/mariadb/repo/10.11/ubuntu
Suites: jammy
Components: main main/debug
Signed-By: /etc/apt/keyrings/mariadb-keyring.pgp

您现在可以通过以下方式从 MariaDB 存储库安装 MariaDB 10.11:

sudo apt-get update
sudo apt-get install mariadb-server

手动启动mysql(MariaDB)

mysqld_safe  --user=mysql &

启动成功,后测试如下:
在这里插入图片描述

安装redis

apt install redis

因为我们是在docker容器中搞的,所以systemctl start redis是无法成功启动的。

手动启动redis服务

/usr/bin/redis-server /etc/redis/redis.conf

编译ZLMediaKit

参考ZLMediaKitWIKI,截取一下关键步骤:

# 国内用户推荐从同步镜像网站gitee下载 
git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
cd ZLMediaKit
# 千万不要忘记执行这句命令
git submodule update --init

ubuntu一般自带的gcc版本够新,你可以这样安装gcc编译器:

sudo apt-get install build-essential

ZLMediaKit采用cmake来构建项目,通过cmake才能生成Makefile(或Xcode/VS工程),所以必须先安装cmake才能完成后续步骤。

如果你是debian系操作系统(包括ubuntu系用户),一般自带的cmake版本够新,你可以这样安装cmake

sudo apt-get install cmake

Debian系(包括ubuntu)系统下安装依赖的方法:

除了openssl,其他其实都可以不安装

sudo apt-get install libssl-dev
sudo apt-get install libsdl-dev
sudo apt-get install libavcodec-dev
sudo apt-get install libavutil-dev
sudo apt-get install ffmpeg

编译:

cd ZLMediaKit
mkdir build
cd build
cmake ..
make -j4

在linux下启动:

cd ZLMediaKit/release/linux/Debug
#通过-h可以了解启动参数
./MediaServer -h
#以守护进程模式启动
./MediaServer -d &

编译WVP-PRO

上面忙活了半天,终于到了正文。

从gitee克隆

git clone https://gitee.com/pan648540858/wvp-GB28181-pro.git

从github克隆

git clone https://github.com/648540858/wvp-GB28181-pro.git

这里我是从github中克隆的。

编译前端页面

cd wvp-GB28181-pro/web_src/
npm --registry=https://registry.npmmirror.com install
npm run build

编译如果报错, 一般都是网络问题, 导致的依赖包下载失败。
实在不行,用自己可以编译成功的电脑,编译一下。
在这里插入图片描述

我这里的docker中npm install没有成功,不想浪费时间。我是在mac中编译完copy过来的。

PS: 可以这样使用taobao的源 npx nrm use taobao

生成可执行jar

cd wvp-GB28181-pro
mvn package

数据库初始化

配置WVP-PRO
wvp支持多种数据库,包括Mysql,Postgresql,金仓等,配置任选一种即可。

初始化数据库

首先使用创建数据库,然后使用sql/初始化.sql初始化数据库,如果是从旧版升级上来的,使用升级sql更新。

Mysql数据库配置
数据库名称以wvp为例,
yml的配置文件如下:

 spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/wvp?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=true
    username: root
    password: 12345678

mybatis:
  configuration:
    map-underscore-to-camel-case: true

这个我们稍后有用。这边供大家看,后续要放进配置文件中。

设置root密码

这里我们就以设置成12345678为例吧。
命令行中输入mysql,进入mysql的命令行。
然后执行以下命令:

use mysql;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '12345678';

在这里插入图片描述
因为我们设置了密码,下次进入mysql命令行就要带上密码了

mysql -uroot -p12345678

创建数据库

首先进入mysql的命令行:

mysql -uroot -p12345678

然后输入以下命令创建用户。

CREATE DATABASE `wvp` CHARACTER SET UTF8;
use wvp;
set character_set_client=utf8;
set character_set_connection=utf8;
set character_set_database=utf8;
set character_set_results=utf8;
source /root/wvp-GB28181-pro/sql/初始化.sql;

在这里插入图片描述
脚本会创建如下的表结构。

MySQL [wvp]> show tables;
+----------------------------+
| Tables_in_wvp              |
+----------------------------+
| wvp_device                 |
| wvp_device_alarm           |
| wvp_device_channel         |
| wvp_device_mobile_position |
| wvp_gb_stream              |
| wvp_log                    |
| wvp_media_server           |
| wvp_platform               |
| wvp_platform_catalog       |
| wvp_platform_gb_channel    |
| wvp_platform_gb_stream     |
| wvp_stream_proxy           |
| wvp_stream_push            |
| wvp_user                   |
| wvp_user_role              |
+----------------------------+
15 rows in set (0.002 sec)

修改yml配置文件

我们直接复制wvp-GB28181-pro/src/main/resources/application-dev.yml
wvp-GB28181-pro/src/main/resources/application-local.yml
命令如下:

cd ~/wvp-GB28181-pro/src/main/resources
cp application-dev.yml application-local.yml

然后我们编辑application-local.yml就可以了。
我这里编辑了如下内容:

mysql数据源

url: jdbc:mysql://127.0.0.1:3306/wvp?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true
    username: root
    password: 12345678

redis
因为我们没有设置密码,直接把这行用#注释。

#password: face2020

修改完配置文件,我们可以用以下命令运行一下项目,看看是否有报错。

cd /root/wvp-GB28181-pro
mvn spring-boot:run

其他的地方基本就按作者的默认配置来了。

ZLMediaKit配置

cd ZLMediaKit/release/linux/Debug
vim config.ini

这里修改的主要是与上面yml对应的内容:

http端口

在[http]配置中把
port=8091

mediaServerId

[general]

mediaServerId=FQ3TF8yT83wh5Wvz

启动服务

cd ZLMediaKit/release/linux/Debug
#以守护进程模式启动
./MediaServer -d &

运行

上面都配置完了,运行也都提到过了。单独提出来在说一下遍。因为配置通常只有一次。配置完就结束了。而运行要经常做的。

手动启动mysql(MariaDB)

mysqld_safe  --user=mysql &

手动启动redis服务

/usr/bin/redis-server /etc/redis/redis.conf

启动ZLMediaKit

cd ZLMediaKit/release/linux/Debug
./MediaServer -d &

启动WVP

启动方法有很多,我这种是直接启动。不打成jar包。

cd /root/wvp-GB28181-pro
mvn spring-boot:run

优点:方便修改配置。
缺点:启动略慢一些。理论上不影响性能。
喜欢其他方式可以参考官方的文档:
https://doc.wvp-pro.cn/#/_content/introduction/config
jar包可以这样启动:

java -jar wvp-pro-*.jar 

以上都完成了,而且没有报错的话。可以通过浏览器访问IP:18080来访问了。

遗留问题

不清楚为什么docker容器重启后,redis连接总是会有问题的。
可以使用redis-cli执行以下命令。解决这个问题d。

FLUSHDB ASYNC

我的配置分享

https://download.csdn.net/download/lxyoucan/87933896

总结

这个项目的部署,难度不大。但是有点麻烦。关键是官方的文档写的不全面,有些地方一笔带过。对不会java的同学们会有一些难度。

参考

  • 《wvp-GB28181-pro 编译部署ubuntu系统-新手向》
    https://blog.51cto.com/u_16085888/6218862

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/678290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPGA-DFPGL22学习2-开发平台学习

文章目录 前言一、Pango Design Suite软件的使用流程二、使用步骤1.新建一个工程2.设计输入3.配置工程4.分析与综合(编译检查)5.约束输入6.编译工程7.下载程序 总结 前言 和原子哥一起学习FPGA 开发环境:正点原子 ATK-DFPGL22G 开发板 参考…

5.2.2如何改变文件属性与权限

常用于群组、拥有者、各种身份的权限之修改的指令,如下所示: 改变一个文件的群组很简单,直接chgrp来改变,指令就是change group。要被改变的群组名称必须要在/etc/group文件内存在才行,否则就会显示错误。 假设你已经…

构造中序线索二叉树和先序线索二叉树,中序线索二叉树找寻前驱结点和后继结点,包含完整代码

一.线索二叉树的结点结构: lchildltagdatartagrchild ltag 0, lchild域指示结点的左孩子 ltag 1, lchild域指示结点的前驱 rtag 0, rchild域指示结点的右孩子 rtag 1, rchild域指示结点的后继 这里用char型作为树的数据域类型 //定义线索二叉树的结…

chatgpt赋能python:Python用于股票:掌握数据、分析趋势

Python用于股票:掌握数据、分析趋势 在当今数字化时代,投资者使用数据分析技术作出投资决策变得越来越重要,而Python正是一种无形中帮助投资者进行数据分析的强有力工具。Python是一种高级数据分析语言,具有易读易懂的语法和强大…

牛客网专项练习——C语言错题集(9)

文章目录 字符常量\0 与 逻辑假的关系不同类型变量所占空间大小运行多个 fork容易造成缓冲区溢出的字符串操作函数函数原型格式指针变量的关系运算,空指针访问存储单元BSS 段二维数组初始化 字符常量 ‘a’ 是一个字符常量,占用 1 个字节空间。 ‘\0’ …

数据结构期末复习【更新】

数据结构期末复习【更新】 1.模式匹配2.画二叉树(根据中序和后序,前序和中序)及其线索二叉树3.求叶子结点个数4.建立二叉排序树5.广义表6.求存储地址7.代码设计8.哈夫曼树9.最小生成树10.深度遍历、广度遍历、邻接表建立11.哈希表&#xff08…

【Leetcode60天带刷】day28回溯算法——93.复原IP地址 ,78.子集 , 90.子集II

​ 题目: 地址 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 . 分隔。 例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址&#xf…

【Leetcode60天带刷】day22二叉树—— 235. 二叉搜索树的最近公共祖先 ,701.二叉搜索树中的插入操作 ,450.删除二叉搜索树中的节点

​ 题目: 235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先…

【Leetcode60天带刷】day23二叉树—— 669. 修剪二叉搜索树 ,108.将有序数组转换为二叉搜索树 , 538.把二叉搜索树转换为累加树

​ 题目: 669. 修剪二叉搜索树 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除&…

高速板材应用案例

要求如下: 高速信号部分有12.5Gbps Interlaken信号、QPI、PCIe3.0信号(后面有兼容PCIe4.0的要求),另外还有10.3125Gbps到光口信号;高速信号损耗要求: -0.8dB/inch@4GHz,-1.6dB/inch@8GHz差分信号阻抗控制有85ohm、90ohm和100ohm,单端按照50ohm控制,阻抗及线宽控制表如下…

【Leetcode60天带刷】day29回溯算法——491.递增子序列, 46.全排列, 47.全排列 II

​ 题目: 491. 递增子序列 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素,如出现两个整数相等,也可以视作递…

基于免疫优化算法的线性规划问题求解(matlab程序)

0.代码链接 基于免疫优化算法的线性规划问题求解(matlab程序)资源-CSDN文库 1.简述 免疫算法(Immune Algorithm,IA):是指以在人工免疫系统的理论为基础,实现了类似于生物免疫系统的抗原识别…

【LeetCode】动态规划 刷题训练(二)

文章目录 62. 不同路径题目解析状态转移方程完整代码 63. 不同路径 II题目解析状态转移方程完整代码 剑指 Offer 47. 礼物的最大价值题目解析状态转移方程完整代码 62. 不同路径 点击查看:不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图…

树莓派与STM32之间串口通信

目录 一、树莓派串口通信模块介绍 二、树莓派蓝牙、串口引脚映射对换步骤 1.启动串口 2. 禁用蓝牙(硬件串口与mini串口映射对换) 3.验证是否交换成功 三、树莓派安装mini串口调试助手 四、树莓派与电脑串口调试 五、树莓派与STM32串口调试 一、树…

Stable-Diffusion-webui mac m1安装

Stable-Diffusion-webui mac m1安装 推荐下载器:neat download manager 安装git python 3.10 下载地址:https://github.com/AUTOMATIC1111/stable-diffusion-webui 我这边是通过pycharm 通过git直接拉取到本地的,下载的,最好先建…

使用AI轻松搞定UI设计;a16z:快速高效使用LLM构建应用程序;AI时代99%软件都会消失;豆瓣9.3的经典Python入门书 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 Indeed:美国5月份生成式AI职位发布量增长 20% Indeed 是美国就业门户网站,根据其最新发布的数据显示&#xff…

Golang -> Golang 的概述

Golang 的概述 Golang 的语言的特点Golang 的开发工具Golang 的版本 Golang 的语言的特点 简介: Go 语言保证了既能到达静态编译语言的安全和性能,又达到了动态语言开发维护的高效率 使用一个表达式来形容 Go 语言:Go C Python 说明 Go …

书虫“Bookworm”出山:Debian 版本代号与《玩具总动员》

作为最受欢迎的 Linux 发行版之一,Debian 是许多其他发行版的基础,许多非常受欢迎的 Linux 发行版,例如 Ubuntu、Knoppix、PureOS 、Tails、Armbian 以及 Raspbian,都基于 Debian。 经过近 20 个月的开发,2023 年 6 月…

VMware vCenter Server 8.0U1b 发布下载(重要安全更新)

VMware vCenter Server 8.0U1b 发布下载(重要安全更新) 请访问原文链接:https://sysin.org/blog/vmware-vcenter-8-u1/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org VMware vCenter Serve…

【数据网格架构】数据网格架构模式

企业数据网格正在彻底改变企业管理数据的方式。什么是基础数据网格模式? 数据网格模式 企业数据网格正在成为一种独特且引人注目的方式来管理企业内的数据。它将“产品思维”引入企业数据管理,同时在企业中实现更高水平的敏捷性和数据治理。它创造了一种…