Mac wvp-GB28181-pro 本地开发部署环境记录

Mac 本地开发部署环境记录

本文档记录在 Mac 本机运行 wvp-GB28181-pro 的环境配置。当前目标是:

  • MySQL 使用 Mac 本机已有服务。
  • Redis 使用 Docker 容器。
  • ZLMediaKit 使用 Mac 本地编译运行的 MediaServer
  • WVP 后端使用 IDEA 启动。
  • 前端使用本机 Node/NPM 启动。

1. 项目信息

项目
项目目录 /Users/lizhenglee/Documents/swzj/sp/wvp-GB28181-pro
后端版本 2.7.4
后端 Java 版本 21
后端 Profile dev
后端端口 18080
前端目录 /Users/lizhenglee/Documents/swzj/sp/wvp-GB28181-pro/web
前端端口 9528

2. Java 和 IDEA

后端需要 JDK 21。

IDEA 项目 JDK 使用:

text 复制代码
ms-21

当前项目 pom.xml 中要求:

xml 复制代码
<java.version>21</java.version>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>

IDEA 后端启动配置:

text 复制代码
Run/Debug Configurations
  Type: Application
  Main class: com.genersoft.iot.vmp.VManageBootstrap
  JDK: 21
  Working directory: /Users/lizhenglee/Documents/swzj/sp/wvp-GB28181-pro
  Active profiles: dev

如果没有 Active profiles 输入框,可以在 VM options 中配置:

text 复制代码
-Dspring.profiles.active=dev

当前 src/main/resources/application.yml 已配置:

yaml 复制代码
spring:
  profiles:
    active: dev

3. MySQL 本地配置

本机 MySQL 使用已有服务。

当前后端配置:

yaml 复制代码
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/wvp2?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=true
    username: root
    password: 12345678

数据库名:

text 复制代码
wvp2

全新初始化数据库:

bash 复制代码
cd /Users/lizhenglee/Documents/swzj/sp/wvp-GB28181-pro

mysql -uroot -p -e "DROP DATABASE IF EXISTS wvp2;"
mysql -uroot -p -e "CREATE DATABASE wvp2 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
mysql -uroot -p wvp2 < 数据库/2.7.4/初始化-mysql-2.7.4.sql

注意:

  • 全新库只执行 数据库/2.7.4/初始化-mysql-2.7.4.sql
  • 不要对全新库执行 数据库/2.7.4/更新-mysql-2.7.4.sql
  • wvp_device_mobile_position 在 2.7.4 中已经改为 wvp_mobile_position

检查默认用户:

bash 复制代码
mysql -uroot -p wvp2 -e "select id, username, password from wvp_user;"

默认 WVP 登录账号:

text 复制代码
账号:admin
密码:admin

4. Redis Docker 配置

Redis 使用 Docker 容器,容器名:

text 复制代码
local-redis

首次创建:

bash 复制代码
docker run -d \
  --name local-redis \
  -p 6379:6379 \
  redis:7 \
  redis-server --requirepass root

以后启动:

bash 复制代码
docker start local-redis

查看状态:

bash 复制代码
docker ps -a --filter name=local-redis

验证 Redis:

bash 复制代码
docker exec -it local-redis redis-cli -a root ping

正常返回:

text 复制代码
PONG

当前后端 Redis 配置:

yaml 复制代码
spring:
  data:
    redis:
      host: 127.0.0.1
      port: 6379
      database: 6
      password: root
      timeout: 10000

5. ZLMediaKit 本地配置

ZLMediaKit 使用 Mac 本地编译的 MediaServer

启动路径示例:

text 复制代码
/Users/lizhenglee/CLionProjects/ZLMediaKit/release/darwin/Debug/MediaServer

启动后需要确认监听端口:

text 复制代码
HTTP: 80
RTSP: 554
RTMP: 1935
RTP: 10000

WVP 当前媒体配置:

yaml 复制代码
media:
  id: your_server_id
  ip: 127.0.0.1
  http-port: 80
  secret: qCJU77A6LJOeldE56QU5rUwbgreGLH0y
  sdp-ip: 192.168.0.12
  stream-ip: 192.168.0.12
  rtp:
    enable: true
    port-range: 40000,45000
    send-port-range: 50000,55000

说明:

  • media.ip=127.0.0.1 表示 WVP 本机访问 ZLM HTTP API。
  • media.http-port=80 必须和 ZLM 实际 HTTP 端口一致。
  • media.id 必须和 ZLM 的 general.mediaServerId 一致。当前 ZLM hook 上报的是 your_server_id
  • media.secret 必须和 ZLM 配置中的 api.secret / hook.admin_params 对应。
  • sdp-ipstream-ip 必须填写摄像机能访问到的 Mac 局域网 IP,当前是 192.168.0.12

如果 WVP 日志出现:

text 复制代码
[ZLM HOOK] 此zlm未接入 your_server_id

说明 WVP 的 media.id 和 ZLM 的 general.mediaServerId 不一致。

如果 WVP 日志出现:

text 复制代码
Failed to connect to /127.0.0.1:80

说明 WVP 连接不到本地 ZLM,先确认 ZLM 已启动并监听 80:

bash 复制代码
lsof -nP -iTCP:80 -sTCP:LISTEN

6. WVP SIP 配置

当前 SIP 配置:

yaml 复制代码
sip:
  port: 8116
  domain: 4101050000
  id: 41010500002000000001
  password: 12345678
  alarm: false

设备接入 WVP 时常用参数:

text 复制代码
SIP服务器IP:192.168.0.12
SIP服务器端口:8116
SIP服务器ID:41010500002000000001
SIP服务器域:4101050000
认证密码:12345678
传输协议:UDP

测试设备国标编号示例:

text 复制代码
44010200491320000001

如果设备已经在数据库 wvp_device 中存在,并且该设备记录有单独密码,则设备密码会优先于 sip.password

检查设备密码:

bash 复制代码
mysql -uroot -p wvp2 -e "select id, device_id, password from wvp_device where device_id='44010200491320000001';"

7. WVP 后端启动顺序

推荐启动顺序:

text 复制代码
1. 启动 MySQL
2. 启动 Redis Docker 容器
3. 启动 ZLMediaKit MediaServer
4. 在 IDEA 中启动 WVP 后端
5. 启动前端

Redis:

bash 复制代码
docker start local-redis
docker exec -it local-redis redis-cli -a root ping

ZLMediaKit:

bash 复制代码
/Users/lizhenglee/CLionProjects/ZLMediaKit/release/darwin/Debug/MediaServer

IDEA 启动:

text 复制代码
Main class: com.genersoft.iot.vmp.VManageBootstrap
Active profile: dev

启动成功后后端地址:

text 复制代码
http://localhost:18080

如果 SIP 端口被占用:

bash 复制代码
lsof -nP -iTCP:8116 -sTCP:LISTEN
lsof -nP -iUDP:8116

结束占用进程:

bash 复制代码
kill <PID>

必要时:

bash 复制代码
kill -9 <PID>

8. 前端 Node 环境

前端是 Vue 2 + Vue CLI 4:

json 复制代码
"vue": "2.6.10",
"@vue/cli-service": "4.4.4"

推荐 Node:

text 复制代码
Node.js 16.20.2
npm 8.19.4

使用 nvm:

bash 复制代码
nvm use 16.20.2
node -v
npm -v

如果 Apple Silicon 下安装依赖遇到 deasync / node-gyp 编译错误,可以使用 Rosetta x64 shell:

bash 复制代码
softwareupdate --install-rosetta --agree-to-license
arch -x86_64 zsh
export NVM_ARCH=x64
nvm install 16.20.2
nvm use 16.20.2
node -p "process.arch"

期望输出:

text 复制代码
x64

安装依赖:

bash 复制代码
cd /Users/lizhenglee/Documents/swzj/sp/wvp-GB28181-pro/web
rm -rf node_modules package-lock.json
npm install --legacy-peer-deps

本地启动前端:

bash 复制代码
cd /Users/lizhenglee/Documents/swzj/sp/wvp-GB28181-pro/web
nvm use 16.20.2
npm run dev

访问:

text 复制代码
http://localhost:9528

生产打包:

bash 复制代码
npm run build:prod

构建产物:

text 复制代码
web/dist

9. 点播问题排查

如果设备注册成功,但点播失败,重点看 WVP 日志中的收流地址。

错误示例:

text 复制代码
收流地址:127.0.0.1:xxxxx
rtpServer收流超时

原因:

text 复制代码
127.0.0.1 对摄像机来说是摄像机自己,不是 Mac。

正确情况:

text 复制代码
收流地址:192.168.0.12:xxxxx

需要确认:

  • media.sdp-ip 是 Mac 局域网 IP。
  • media.stream-ip 是 Mac 局域网 IP。
  • 摄像机能访问 Mac。
  • Mac 防火墙没有拦截 ZLM/WVP。
  • ZLM 的 RTP 端口范围可用。

当前配置:

yaml 复制代码
media:
  sdp-ip: 192.168.0.12
  stream-ip: 192.168.0.12

查看 Mac 局域网 IP:

bash 复制代码
ifconfig | grep "inet 192.168"

如果 Mac IP 变化,需要同步修改 application-dev.yml 中的:

yaml 复制代码
media:
  sdp-ip: 新的Mac局域网IP
  stream-ip: 新的Mac局域网IP

10. 常用检查命令

检查 Redis:

bash 复制代码
docker ps -a --filter name=local-redis
docker exec -it local-redis redis-cli -a root ping

检查 MySQL:

bash 复制代码
mysql -uroot -p -e "show databases;"
mysql -uroot -p wvp2 -e "show tables;"

检查后端端口:

bash 复制代码
lsof -nP -iTCP:18080 -sTCP:LISTEN

检查 SIP 端口:

bash 复制代码
lsof -nP -iTCP:8116 -sTCP:LISTEN
lsof -nP -iUDP:8116

检查 ZLM HTTP 端口:

bash 复制代码
lsof -nP -iTCP:80 -sTCP:LISTEN

检查 Mac 局域网 IP:

bash 复制代码
ifconfig | grep "inet 192.168"

11. 当前关键账号和密码

类型
WVP 登录账号 admin
WVP 登录密码 admin
MySQL 数据库 wvp2
MySQL 用户 root
MySQL 密码 12345678
Redis 密码 root
SIP 认证密码 12345678
ZLM secret qCJU77A6LJOeldE56QU5rUwbgreGLH0y

12. 当前本地启动清单

每次本地开发前按顺序确认:

bash 复制代码
# 1. Redis
docker start local-redis
docker exec -it local-redis redis-cli -a root ping

# 2. ZLM
/Users/lizhenglee/CLionProjects/ZLMediaKit/release/darwin/Debug/MediaServer

# 3. IDEA 启动 WVP
# Main class: com.genersoft.iot.vmp.VManageBootstrap
# Profile: dev

# 4. 前端
cd /Users/lizhenglee/Documents/swzj/sp/wvp-GB28181-pro/web
nvm use 16.20.2
npm run dev