三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

别再折腾了!Windows下用WVP-Pro+ZLM搭建国标监控平台,保姆级避坑指南

别再折腾了!Windows下用WVP-Pro+ZLM搭建国标监控平台,保姆级避坑指南

Windows下WVP-Pro+ZLM国标监控平台搭建实战:从踩坑到避坑全指南

第一次在Windows环境搭建GB28181监控平台时,我对着满屏的编译错误和配置参数发呆了整整两小时。现在回想起来,那些看似复杂的问题其实都有明确的解决路径。本文将带你用最短的时间走完我半年的踩坑历程,特别针对Windows平台特有的环境依赖和配置陷阱。

1. 环境准备:避开90%的初学者陷阱

在Windows上搭建流媒体服务,环境配置的复杂度远超Linux。我见过太多人在第一步就卡住——不是Visual Studio版本不对,就是第三方库缺失。以下是经过验证的可靠方案:

必备工具清单

  • Visual Studio 2019(社区版即可,但必须安装C++桌面开发组件)
  • Git for Windows(建议勾选"Use Windows' default console window")
  • MySQL 5.7+(8.0需注意密码加密方式)
  • Node.js LTS版本(前端编译用)

注意:切勿使用VS2022!ZLMediaKit的第三方库ZLToolKit存在已知兼容性问题,会导致编译失败。

安装VS2019时,务必勾选以下组件:

# 使用VS Installer添加这些工作负载 - MSVC v142 - VS2019 C++ x64/x86生成工具 - Windows 10 SDK (10.0.19041.0) - C++ CMake工具

常见问题解决方案:

  1. 第三方库拉取失败:手动执行以下命令
    cd ZLMediaKit/3rdpart git clone https://github.com/ZLMediaKit/ZLToolKit.git git clone https://github.com/ZLMediaKit/media-server.git
  2. CMake生成错误:删除项目根目录下的build文件夹重新生成
  3. 内存不足:关闭Chrome等内存大户,32GB内存机器建议设置虚拟内存

2. ZLMediaKit编译实战:那些文档没告诉你的细节

官方文档不会告诉你,Windows平台编译有这些隐藏关卡:

2.1 编译配置黄金参数

在CMake设置编辑器中,这些参数能显著提升稳定性:

# 添加到CMakeSettings.json { "buildRoot": "${projectDir}\\build\\${name}", "cacheRoot": "${projectDir}\\out\\${name}", "configurationType": "Release", "environments": [ { "name": "CMAKE_CONFIGURATION_TYPES", "value": "Release;Debug;MinSizeRel;RelWithDebInfo" } ] }

2.2 端口冲突终极解决方案

Windows系统服务常占用80/443端口,修改config.ini时注意:

[http] port=9980 # 改用非特权端口 sslport=4443 # 避免与IIS冲突 [rtmp] port=1936 # 1935常被Adobe服务占用

关键提示:修改端口后必须同步调整WVP的media.http-port配置,否则会导致视频流无法传输。

3. WVP-Pro配置精要:让国标设备秒级上线

数据库配置是第一个拦路虎。MySQL 8.0用户务必执行:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';

关键配置项对照表

配置项推荐值注意事项
sip.ip本机内网IP不能用127.0.0.1
media.ip流媒体服务器IP需与ZLM一致
rtp.enabletrue多端口模式更稳定
rtp.port-range30000,30500避开知名端口范围

实战案例:当设备注册失败时,按此流程排查:

  1. 检查WVP日志logs/wvp.log中的SIP信令交互
  2. 确认设备端填写的SIP服务器IP和端口正确
  3. 使用Wireshark抓包分析SIP协议交互

4. 前端调试技巧:快速定位界面问题

前端项目web_src常见问题及解决方案:

# 当npm install报错时 rm -rf node_modules package-lock.json npm cache clean --force npm install --registry=https://registry.npmmirror.com

跨域问题解决方案: 在vue.config.js中添加:

devServer: { proxy: { '/api': { target: 'http://localhost:9970', changeOrigin: true } } }

性能优化配置:

# nginx生产环境配置示例 location / { gzip on; gzip_min_length 1k; gzip_types text/plain application/javascript; try_files $uri $uri/ /index.html; }

5. 实战问题集:我遇到过的7个典型故障

  1. 设备在线但无视频流

    • 检查ZLM的config.ini[http]port与WVP配置一致性
    • 确认防火墙放行了RTP端口范围
  2. 前端频繁断开连接

    // 在src/utils/request.js中增加超时设置 axios.defaults.timeout = 30000
  3. 录像文件无法播放

    # 检查ffmpeg路径配置 ffmpeg.bin=C:\\ffmpeg\\bin\\ffmpeg.exe
  4. 级联注册失败

    • 上级平台需配置domainid符合GB/T 28181规范
    • 下级平台需填写正确的realm字段
  5. 高并发时服务崩溃

    # 调整ZLM内存配置 [general] maxStreamWaitMS=30000 streamNoneReaderDelayMS=30000
  6. 时间戳不同步问题

    -- 执行时间同步 SET GLOBAL time_zone = '+8:00';
  7. 移动端播放卡顿

    # 在ZLM启用HLS低延迟配置 [hls] segDur=1 segNum=3

6. 性能调优:让平台稳定支撑100+路监控

经过压力测试,这些参数组合效果最佳:

ZLM性能配置表

参数推荐值说明
flowThreshold2048流量阈值(KB)
unready_frame_cache200帧缓存数量
wait_add_track_ms5000音轨等待时间
mergeWriteMS50写合并间隔

MySQL优化参数

# 在WVP的application.yml中添加 spring: datasource: hikari: maximum-pool-size: 20 connection-timeout: 30000

内存管理技巧:

  • 定期重启ZLM服务(建议使用任务计划程序)
  • 为MediaServer.exe创建批处理脚本:
@echo off :loop MediaServer.exe timeout /t 86400 /nobreak goto loop

当所有配置就绪后,最终的平台架构应该呈现这样的数据流:

[IPC设备] → [SIP信令(WVP)] → [媒体流(ZLM)] → [存储/转发] ↑ [管理平台] ← [Web前端]
← 返回列表