WVP-PRO视频服务器jar包部署(单独部署zlm)
WVP-PRO 部署实践:已有 MySQL/Redis,Docker 安装 ZLM,启动国标视频平台
环境:CentOS 8 云服务器(下文以
YOUR_SERVER_IP表示,请替换为实际地址)
组件:MySQL · Redis · ZLMediaKit(Docker)· WVP-PRO(Java)
场景:海康 NVR 等国标设备接入、Web 管理预览说明: 文中 IP、数据库密码、Redis 密码、ZLM
secret、SIP 密码均为占位符。
一、架构一览
国标视频监控平台不是「一个 Jar 包」就完事,至少涉及四类服务:
| 组件 | 作用 | 是否单独安装 |
|---|---|---|
| MySQL | 设备、通道、用户、节点等持久化 | 已有 |
| Redis | 缓存、会话、消息通道 | 已有 |
| ZLMediaKit | 收 RTP、转 FLV/HLS/RTSP 等 | Docker 安装 |
| WVP-PRO | 国标信令 + 管理后台 API | Java 启动(内置 SIP) |
| Vue 前端 | 管理界面 | 开发:npm run dev;生产:打包进 Jar |
要点: SIP 信令在 WVP 进程内,不需要再装 FreeSWITCH 等;视频流走 ZLM。
二、前置条件(环境已具备)
2.1 MySQL
- 地址:
YOUR_SERVER_IP:3315 - 库名:
wvp-pro(按实际库名) - 执行 WVP 初始化脚本:
数据库/2.7.4/初始化-mysql-2.7.4.sql(全新库) - 从旧版升级再执行:
数据库/2.7.4/更新-mysql-2.7.4.sql
2.2 Redis
- 地址:
YOUR_SERVER_IP:6379 - 建议单独使用一个
database编号(如7),避免与其它业务冲突
2.3 端口规划(防火墙 / 安全组需放行)
WVP 服务端口
SIP 信令接入端口必须同时开TCP和UDP,否则会导致TCP/UDP的设备无法注册
| 端口 | 协议 | 用途 | 开放范围 |
|---|---|---|---|
18080 |
TCP | WVP Web 管理平台 | 必须 公网 |
8116 |
TCP和UDP(必须都开) | GB28181 SIP 信令(设备/平台接入) | 必须 公网 |
ZLMediaKit 流媒体端口
| 端口 | 协议 | 用途 | 开放范围 |
|---|---|---|---|
9092 |
TCP | ZLM HTTP API(WebSocket/FLV 播放) | 必须 公网 |
554 |
TCP | RTSP 播放(标准协议拉流) | 必须 公网 |
1935 |
TCP | RTMP 推流(可选,NVR 推流用) | 按需 公网 |
40000~45000 |
UDP+TCP | ZLM 接收 RTP 流(国标设备推流) | 必须 公网 |
50000~55000 |
UDP+TCP | ZLM 发送 RTP 流(WVP 主动发流给设备/平台) | 必须 公网 |
数据库/缓存(同机运行,无需额外开放)
| 端口 | 用途 |
|---|---|
6379 |
Redis |
3315 |
MySQL |
端口清单
# ===== WVP =====
18080/tcp # Web 管理界面
8116/udp # GB28181 SIP 信令
# ===== ZLMediaKit =====
9092/tcp # HTTP API / WebSocket-FLV 播放
554/tcp # RTSP 播放
# 1935/tcp # RTMP 推流(按需开启)
40000-45000/tcp # RTP 收流
40000-45000/udp # RTP 收流
50000-55000/tcp # RTP 发流
50000-55000/udp # RTP 发流
防火墙命令(CentOS firewalld)
sudo firewall-cmd --permanent --add-port=18080/tcp
sudo firewall-cmd --permanent --add-port=8116/udp
sudo firewall-cmd --permanent --add-port=9092/tcp
sudo firewall-cmd --permanent --add-port=554/tcp
sudo firewall-cmd --permanent --add-port=1935/tcp
sudo firewall-cmd --permanent --add-port=40000-45000/tcp
sudo firewall-cmd --permanent --add-port=40000-45000/udp
sudo firewall-cmd --permanent --add-port=50000-55000/tcp
sudo firewall-cmd --permanent --add-port=50000-55000/udp
sudo firewall-cmd --reload
云服务器安全组也需要同步放行上述端口。
说明
1935(RTMP)如果 NVR/设备不用 RTMP 推流,可以不开放40000-45000和50000-55000是国标通信的核心端口,必须全部开放- ZLM 的
[srt]、[rtc]、[shell]端口都已设为0(禁用),无需开放
三、Docker 安装 ZLMediaKit
3.1 安装 Docker(CentOS 8)
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo systemctl enable --now docker
3.2 部署目录
zlm独立docker编排目录,上传到服务器:
sudo mkdir -p /opt/zlm-standalone
# 上传 docker/zlm-standalone/ 下全部文件
cd /opt/zlm-standalone
sudo mkdir -p data/record data/log
目录结构:
/opt/zlm-standalone/
├── docker-compose.yml
├── config.ini
└── data/
├── record/
└── log/
3.3 核心配置说明(config.ini)
与 WVP 的 media 段必须对齐:
主要是mediaServerId、secret、port、port_range、hook的on_*回调接口
[api]
secret=YOUR_ZLM_SECRET # 与 WVP application.yml配置的 media.secret 一致
[general]
mediaServerId=zlmediakit-local # 与 WVP media.id 一致
[http]
port=9092
allow_ip_range= # 空=允许所有 IP 访问 API
[rtp_proxy]
port_range=40000-45000 # 与 WVP media.rtp.port-range 一致
[hook]
enable=1
on_server_started=http://YOUR_SERVER_IP:18080/index/hook/on_server_started
# ... 其余 on_* 均指向 WVP视频服务器 18080 的 /index/hook/... (YOUR_SERVER_IP得是公网IP)
# 重要:关闭占用 9000 的服务,避免启动失败
[shell]
port=0
[srt]
port=0
3.4 启动 ZLM
cd /opt/zlm-standalone
sudo docker compose pull
sudo docker compose up -d
sudo docker compose logs -f zlm
docker-compose.yml 使用 network_mode: host,容器端口即宿主机端口,国标多端口 RTP 更简单。
3.5 测试 ZLM 服务
浏览器直接打开9092端口

curl "http://127.0.0.1:9092/index/api/getServerConfig?secret=YOUR_ZLM_SECRET"

成功标志: 返回 JSON,且 "code": 0,例如:
{
"code": 0,
"data": [
{
"http.port": "9092",
"general.mediaServerId": "zlmediakit-local",
"api.secret": "YOUR_ZLM_SECRET",
"rtp_proxy.port_range": "40000-45000"
}
]
}
3.6 常见 ZLM 故障
| 日志 | 原因 | 处理 |
|---|---|---|
Listen on 0.0.0.0 9000 failed: address already in use |
shell/srt 默认占 9000 | config.ini 设 [shell] port=0、[srt] port=0 |
Your ip is not allowed to access the service |
HTTP 仅允许内网 | [http] allow_ip_range= 置空 |
| 容器反复重启 | 端口冲突未解决 | docker compose down → 改配置 → 再 up -d |
四、配置并启动 WVP-PRO
4.1 配置文件
主配置:src/main/resources/application.yml 指定 Profile:
spring:
profiles:
active: 274-dev
环境配置:src/main/resources/application-274-dev.yml(该文件通常在 .gitignore,需本地维护)。
数据库与 Redis 示例:
spring:
data:
redis:
host: YOUR_SERVER_IP
port: 6379
database: 7
password: <你的 Redis 密码>
datasource:
url: jdbc:mysql://YOUR_SERVER_IP:3315/wvp-pro?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=true
username: <数据库用户>
password: <数据库密码>
server:
port: 18080
国标 SIP(扬州示例):
sip:
show-ip: YOUR_SERVER_IP
port: 8116
domain: 3210000049
id: 32100000492000000001
password: <设备注册密码>
对接 ZLM:
media:
id: zlmediakit-local
ip: YOUR_SERVER_IP
http-port: 9092
secret: YOUR_ZLM_SECRET
hook-ip: YOUR_SERVER_IP
stream-ip: YOUR_SERVER_IP
sdp-ip: YOUR_SERVER_IP
rtp:
enable: true
port-range: 40000,45000
send-port-range: 50000,55000
4.2 编译与启动(本地开发)
环境要求: JDK 21(项目 pom.xml 指定,JDK 8 无法运行)。
# 后端
export JAVA_HOME=/path/to/jdk-21
cd wvp-GB28181-pro
mvn spring-boot:run -DskipTests
看到日志:
Started VManageBootstrap
[SIP SERVER] tcp://x.x.x.x:8116 启动成功
Tomcat started on port 18080
前端(开发模式,二选一):
cd web
npm install --registry=https://registry.npmmirror.com
npm run dev
# 浏览器访问 http://localhost:9528
或生产打包(只需访问 18080):
cd web
npm run build:prod # 输出到 src/main/resources/static
mvn package -DskipTests
java -jar target/wvp-pro-*.jar
4.3 测试 WVP
| 步骤 | 操作 | 预期 |
|---|---|---|
| 1 | 打开 http://localhost:9528 或 http://服务器IP:18080 | 出现登录页 |
| 2 | 登录 admin / admin(默认,首次部署后建议修改) |
进入首页 |
| 3 | 节点管理 | 出现 zlmediakit-local,状态在线 |
| 4 | 配置海康 NVR 国标上级(见下文) | 国标设备 列表设备在线 |
| 5 | 点击通道播放 | 能出画面(依赖 ZLM + RTP 端口) |
海康 NVR 配置详见项目文档:doc/海康NVR接入WVP配置对照.md。
五、配置对照速查(ZLM ↔ WVP)
| 配置项 | ZLM config.ini |
WVP application-274-dev.yml |
|---|---|---|
| API 密钥 | [api] secret |
media.secret |
| HTTP 端口 | [http] port |
media.http-port |
| 节点 ID | [general] mediaServerId |
media.id |
| 服务器 IP | — | media.ip |
| RTP 范围 | [rtp_proxy] port_range |
media.rtp.port-range |
| Hook | [hook] on_* |
WVP 地址 :18080/index/hook/... |
任意一项不一致,典型现象:
- 节点不在线 → secret / Hook / WVP 未启动
- 能注册不能播 → RTP 端口或
stream-ip/sdp-ip错误
六、海康 NVR 配置SIP
上级平台(SIP 服务器)
| NVR 填写字段 | 填写值 | 对应 application.yml |
|---|---|---|
| 启用 | ✅ 勾选 | — |
| 协议版本 | GB/T28181-2016 | — |
| 传输协议 | UDP(优先) | — |
| SIP 服务器地址 | YOUR_SERVER_IP |
sip.show-ip |
| SIP 服务器端口 | 8116 |
sip.port |
| SIP 服务器 ID | 32100000492000000001 |
sip.id |
| SIP 服务器域 | 3210000049 |
sip.domain |
| 密码 | YOUR_SIP_PASSWORD |
sip.password |
| 启用鉴权 | ✅ 必须勾选 | — |
NVR 本机参数
| NVR 填写字段 | 填写值 |
|---|---|
| SIP 用户认证 ID(设备 ID) | 32100000492123456789 |
| 注册有效期 | 3600 |
| 心跳周期 | 60 |
| 注册间隔 | 60 |
设备 ID 不能和 SIP 服务器 ID 相同,必须另行填写。
设备 ID / 通道编码编写规则
规则
20 位国标编码 = 前10位(行政区划+行业码) + 后10位(自定义序号)
前10位(与 sip.domain 一致): 3210000049
后10位(自定义,不重复): xx....xxxx
20位完整ID: 3210000049xxxxxxxxxx
编写示例
NVR 设备 ID(填在「SIP 用户认证 ID」):
32100000492123456789
↑ 前10位 ↑ 后10位自定义
摄像头通道编码(每路一个,后10位末尾递增):
通道1: 32100000492123456701
通道2: 32100000492123456702
通道3: 32100000492123456703
通道4: 32100000492123456704
application.yml 对应SIP配置
sip:
show-ip: YOUR_SERVER_IP # ← SIP 服务器地址(NVR 填这里)
port: 8116 # ← SIP 服务器端口
domain: 3210000049 # ← SIP 服务器域(前10位)
id: 32100000492000000001 # ← SIP 服务器 ID(平台唯一)
password: YOUR_SIP_PASSWORD # ← 注册密码
网络要求
NVR 必须能访问:
| 目标 | 地址:端口 | 协议 |
|---|---|---|
| WVP SIP | YOUR_SERVER_IP:8116 |
UDP |
| WVP Web | YOUR_SERVER_IP:18080 |
TCP |
防火墙 / 云安全组需放行
8116/udp,否则无法注册。
六、推荐部署顺序
1. MySQL 建库 + 执行 2.7.4 初始化 SQL
2. 确认 Redis 可连
3. Docker 启动 ZLM → curl 验证 code=0
4. 配置 application-274-dev.yml(MySQL / Redis / sip / media)
5. 启动 WVP → 登录 Web → 看节点是否在线
6. 海康 NVR 填国标参数 → 设备注册 → 点播测试
7. 防火墙放行 8116、9092、40000-45000 等
七、个人踩坑记录
-
ZLM 9000 端口冲突
新版镜像默认开 shell/srt,占 9000,导致Start server failed,容器无限重启。关闭[shell]、[srt]后正常。 -
前端未编译
只访问 18080 没有页面时,需npm run dev(9528)或npm run build:prod打进 Jar。 -
海康鉴权
NVR 必须勾选「启用鉴权」才能填密码;平台 ID 与设备 ID 不要填反。
八、相关文件索引
| 文件 | 说明 |
|---|---|
src/main/resources/application-274-dev.yml |
WVP 环境配置 |
数据库/2.7.4/初始化-mysql-2.7.4.sql |
数据库建表 |
| WVP 官方文档 | 功能与协议说明 |
| ZLMediaKit | 流媒体服务 |
九、总结
在 已有 MySQL + Redis 的前提下,国标平台落地关键是补上 ZLMediaKit:
- 用 Docker 部署 ZLM,保证
secret、端口、Hook 与 WVP 一致,并用curl验证 API。 - 配置 WVP 的
datasource、redis、sip、media后启动 Java 服务。 - 前端开发用
9528,上线用npm run build:prod合并到后端。 - 设备侧按国标参数注册,即可在 Web 上管理预览。
十、启动前后端界面




浙公网安备 33010602011771号