WVP-PRO本地部署实战:从零搭建海康摄像头国标接入平台

1. 环境准备:搭建基础服务框架

第一次接触WVP-PRO的朋友可能会被各种组件搞晕,其实核心就三个:数据库、流媒体服务和WVP主程序。我去年在帮某连锁超市部署监控系统时,发现先理清组件关系能避免80%的部署错误。

MySQL和Redis的安装建议

  • 推荐使用Docker快速部署,特别是测试环境。用官方镜像比手动安装省心很多,记得把数据卷挂载出来:
docker run --name mysql -e MYSQL_ROOT_PASSWORD=yourpassword -p 3306:3306 -v /data/mysql:/var/lib/mysql -d mysql:5.7 docker run --name redis -p 6379:6379 -v /data/redis:/data -d redis

ZLMediaKit的部署技巧: 原始文章用了docker-compose,这里分享个实用技巧:第一次启动时先不挂载配置文件,等容器生成默认配置后复制出来修改。这样做有两个好处:

  1. 避免因配置文件格式错误导致服务无法启动
  2. 能保留原始配置作为参考

具体操作:

# 启动临时容器 docker run -d --name zlm_temp zlmediakit/zlmediakit:master # 复制配置文件到宿主机 docker cp zlm_temp:/opt/media/conf /path/to/your/conf # 删除临时容器 docker rm -f zlm_temp

2. 流媒体服务配置:ZLMediaKit深度调优

很多人卡在ZLM和WVP的对接环节,关键是要搞懂这两个参数:

  • mediaServerId:相当于服务指纹,两边必须完全一致
  • secret:相当于握手密码,建议用强密码生成器创建

config.ini关键配置

[general] mediaServerId=zlmediakit-local # 必须与WVP配置一致 secret=RcMfBHDyaozutIsaSXMaAxlXTkytRslR # 建议修改为复杂字符串 [hook] enable=1 admin_params=secret=RcMfBHDyaozutIsaSXMaAxlXTkytRslR # 同上

端口映射避坑指南

  • UDP端口范围建议缩小到50000-50050即可
  • 如果服务器有防火墙,记得放行这些端口:
    • TCP: 1935(RTMP), 8085(HTTP), 554(RTSP)
    • UDP: 10000(SIP), 50000-50050(媒体流)

3. WVP-PRO后端部署:从配置文件到服务启动

application.yaml是WVP的核心,我整理了配置模板供参考:

server: port: 18082 ssl: enabled: false sip: ip: 192.168.1.89 # 本机IP port: 5070 domain: 4401020049 # 行政区划代码 id: 44010200492000000001 password: admin123 # 设备认证密码 media: id: zlmediakit-local # 必须与ZLM配置一致 ip: 192.168.1.73 # ZLM服务器内网IP http-port: 8085 # ZLM的HTTP端口 stream-ip: 192.168.1.73 # 流地址IP sdp-ip: 192.168.1.73 # SDP信令IP secret: RcMfBHDyaozutIsaSXMaAxlXTkytRslR # 与ZLM一致

常见启动问题排查

  1. 端口冲突:用netstat -tunlp检查5070和18082端口
  2. 数据库连接失败:检查MySQL用户权限和字符集设置
  3. SIP服务无法启动:确认IP配置不是127.0.0.1

4. 前端部署与设备接入实战

前端启动看似简单,但有几个隐藏坑点:

  • Node版本建议v14-v16,新版可能兼容性问题
  • 如果修改了后端端口,需要同步修改前端配置:
// src/api/base.js const baseUrl = 'http://192.168.1.89:18082'

海康摄像头接入详解

  1. 登录摄像头Web界面,进入网络->高级配置->平台接入

  2. 启用GB/T28181协议,填写以下参数:

    • SIP服务器ID:44010200492000000001(与WVP配置一致)
    • SIP服务器地址:192.168.1.89(WVP服务器IP)
    • SIP服务器端口:5070
    • 传输协议:TCP
    • 认证ID:摄像头编号(如34020000001320000001)
    • 认证密码:admin123(与WVP配置一致)
  3. 在WVP前端点击"国标设备",应该能看到摄像头自动注册上线

视频调阅异常处理

  • 如果能看到设备但无法播放视频:
    1. 检查ZLM的流媒体端口是否开放
    2. 在摄像头端抓包确认INVITE信令是否到达
    3. 查看ZLM日志确认是否收到媒体流

5. 生产环境优化建议

经过三个月的实际运行,我总结出这些优化点:

性能调优参数

# 在application.yaml增加 spring: datasource: hikari: maximum-pool-size: 20 connection-timeout: 30000 redis: timeout: 5000 lettuce: pool: max-active: 30

安全加固措施

  1. 修改默认密码:包括MySQL root、Redis、SIP密码
  2. 启用HTTPS:申请免费SSL证书配置到Nginx
  3. 限制访问IP:在ZLM配置中设置allow_ips

高可用方案

  • ZLM集群部署:通过多节点+负载均衡实现
  • WVP多实例:共享同一数据库,前端用Nginx做负载
  • 定时备份:数据库每日全量备份+binlog

6. 典型问题解决方案

设备频繁掉线

  1. 检查网络延迟,PING值应<100ms
  2. 调整SIP心跳间隔(默认60秒):
sip: keepalive-timeout: 120 # 单位秒

视频延迟大

  1. 在ZLM中开启TCP_NODELAY:
[rtsp] tcp_nodelay=1
  1. 降低视频码率或分辨率
  2. 检查网络带宽是否充足

历史录像查询慢

  1. 为record表添加时间索引
  2. 配置Redis缓存查询结果
  3. 考虑使用MinIO做分布式存储