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,直播设备等等)设备接入,充分利旧。 支持国标级联。多平台级联。跨网视频预览。 支持跨网网闸平台互联。
官方文档
官方文档写的很清楚。本文也是基于官方文档实现的。
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