这次我们直接看一个目前实战中很常见的国标视频平台:WVP-PRO。
它是完全免费开源的国标 GB28181 视频接入平台,核心功能就是把海康、大华、宇视这类支持国标协议的摄像头或 NVR 接入到统一的 Web 管理界面里,然后通过浏览器直接看直播、回放录像、云台控制、语音对讲,甚至继续向上级平台做国标级联。对做安防集成、系统集成、私有化项目交付的朋友来说,这套平台基本能替代一部分商业流媒体服务器的活。
这篇文章的重点非常明确,就是“通道录像配置”。包括设备怎么接入、通道为什么会离线、录像计划在哪设置、录像文件实际存到哪里、如何通过平台回看录像、以及录像文件怎么清理。同时也会把 WVP-PRO 部署中最容易踩坑的环节,比如数据库配置、ZLMediaKit 流媒体服务启动、端口放通、国标目录订阅,全部过一遍。
读完之后,你可以按文章里的步骤自己搭一套国标监控平台,并把通道录像完整跑通。文章所有操作均基于通用部署架构,没有给定具体公网 IP、端口和数据库密码的位置,请按你自己的环境替换。
1. 核心能力速览
先把 WVP-PRO 的整体能力列出来,方便你判断它是否适合当前项目。
| 能力项 | 说明 |
|---|---|
| 项目类型 | 开源国标 GB28181 视频接入平台,附带 Web 管理界面和流媒体网关能力 |
| 后端框架 | Java Spring Boot,搭配数据库 MySQL / PostgreSQL / SQLite |
| 流媒体服务 | 默认内置并联动 ZLMediaKit,提供 RTSP、RTMP、HLS、HTTP-FLV、WebRTC 等拉流方式 |
| 设备接入 | 支持国标 GB28181 设备/平台接入,同时支持通过开放的 REST API 管理设备与通道 |
| 通道管理 | 支持通道树、通道同步、通道状态查看、通道录像配置、云台控制、语音对讲 |
| 录像能力 | 支持平台录像计划和设备端录像回放;平台录像由流媒体服务按 GB28181 标准拉流后存储 |
| 录像存储 | 录像文件由 ZLMediaKit 写入指定磁盘目录,可配置存储策略和计划周期 |
| 浏览器播放 | 无需安装播放器,支持 Web 页面直接预览,兼容 H5 拉流 |
| 级联扩展 | 支持向上级国标平台级联,适合多级平台部署场景 |
| 部署要求 | 需要 Java 环境、数据库、ZLMediaKit 流媒体服务;资源消耗主要看并发路数和录像码率 |
| 是否支持批量 | 支持;通道数量多时可通过平台批量分配录像计划,也可用数据库脚本批量调整 |
| 是否支持 API | 支持;平台提供 HTTP API,可完成设备查询、通道列表、录像计划配置等常用操作 |
| 适合场景 | 安防集成项目、园区监控、工厂监控、连锁店铺视频汇聚、国标设备统一管理、国标上云网关 |
核心要点:WVP-PRO 本身不是做录像文件的转码工具,它更像是一个国标信令网关加设备管理平台。录像、拉流、推流、转封装由流媒体服务负责。所以我们配置录像前,必须先确认 WVP-PRO 服务和流媒体服务之间的配置是通的。
2. 适用场景与使用边界
从实际项目角度看,WVP-PRO 主要在下面几类场景里价值最大:
- 存量国标设备统一接入。现场已经有几十上百个国标摄像头或 NVR,想用一个平台集中查看和管理。
- 视频监控上云。需要把分散在多个分支机构的监控视频汇聚到总部平台,或继续向上级监管平台上报。
- 私有化安防平台。客户不允许使用公有云监控平台,要求视频数据留在本地或内网。
- 国标协议联调测试。作为国标下级平台去模拟设备,测试上级平台的接入能力。
- 快速给内部系统提供监控视频流。通过 API 把直播流地址输出给第三方业务系统。
同时也要说清楚它的边界,避免踩坑:
- WVP-PRO 是“信令 + 管理”平台,不是专业 NVR,虽然能配置通道录像,但更适合做录像汇聚和回放,若需要长时间、大容量、强检索的录像服务,建议配合专业存储或 NVR 使用。
- 国标设备的录像回放依赖设备端是否支持 GB28181 录像查询。部分低端摄像头没实现历史视频检索接口,这时候只能走平台录像,让流媒体服务持续拉流存储。
- 平台录像会占用大量磁盘 I/O 和网络带宽。多路高清长时间录像时,一定要单独规划存储盘,不要和系统盘混用。
- 涉及人脸、车牌、门禁、行踪等个人信息时,要严格遵循网络安全法、个人信息保护法和当地监控管理规定。测试环境也要使用自己拥有或获得授权的素材,禁止采集未授权区域画面。
- 语音对讲功能涉及现场声音采集,使用前必须告知现场人员并取得合法授权。
3. WVP-PRO 本地部署环境准备
在开始安装前,先把环境准备清楚。下面这套环境是 WVP-PRO 项目常见的部署组合,适用于 Ubuntu 20.04/22.04、CentOS 7/8、Deepin 以及 Windows 开发环境。不同操作系统命令稍有差异,但核心依赖一致。
3.1 硬件配置建议
| 项目 | 最小配置 | 推荐配置 |
|---|---|---|
| CPU | 2 核 | 4 核及以上 |
| 内存 | 4 GB | 8 GB 及以上 |
| 系统盘 | 40 GB | 100 GB SSD |
| 录像盘 | 按录像路数和天数估算 | 单独挂载数据盘,容量越大越好 |
| 网络 | 千兆内网 | 按码率计算上行带宽 |
录像盘空间建议按公式估算:
- 单路 1080P,H.264,平均码率按 4 Mbps 计算。
- 一天录像容量约:4 Mbps × 3600 秒 × 24 小时 ÷ 8 = 约 43 GB。
- 10 路摄像头存 30 天,约 43 × 10 × 30 = 12900 GB,也就是大约 13 TB。
如果你的摄像头编码是 H.265,同样的画质下码率可能下降到一半,容量也会相应减少。这里注意,实际码率取决于摄像头码流配置、画面复杂度和编码参数,最终容量以实际录像文件为准。
3.2 软件依赖清单
| 软件 | 版本建议 | 说明 |
|---|---|---|
| JDK | 1.8 或 11/17,视发布包要求 | WVP-PRO 后端 Java 服务依赖 |
| MySQL | 5.7 或 8.0 | 也可以使用 PostgreSQL / SQLite,生产建议 MySQL |
| Redis | 5.0 及以上 | 部分新版本用于缓存、流媒体会话管理,如未使用可跳过,但建议安装 |
| ZLMediaKit | 最新稳定版 | 流媒体服务,负责拉流、推流、录像写入 |
| FFmpeg | 4.x 及以上,可选 | 主要用于 HLS 切片、拉流转码等辅助能力 |
| Node.js | 16/18/20 | 前端管理界面构建时需要 |
3.3 安装基础依赖
先更新系统,安装常用工具,然后装 JDK 和 Git。
# Ubuntu / Deepin sudo apt update && sudo apt install -y git wget curl unzip tar # CentOS sudo yum install -y git wget curl unzip tar安装 JDK,这里以 OpenJDK 11 为例:
sudo apt install -y openjdk-11-jdk # 或者: sudo yum install -y java-11-openjdk-devel检查 Java 版本:
java -version安装 MySQL 和 Redis:
# Ubuntu / Deepin 安装 MySQL sudo apt install -y mysql-server sudo systemctl enable --now mysql # 安装 Redis sudo apt install -y redis-server sudo systemctl enable --now redisMySQL 初始化完成后,需要创建一个 WVP-PRO 使用的数据库和账号。这里以数据库名wvp、账号wvp、密码wvp123456为例,换成你自己的强密码。
CREATE DATABASE IF NOT EXISTS wvp DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; CREATE USER 'wvp'@'%' IDENTIFIED BY 'wvp123456'; GRANT ALL PRIVILEGES ON wvp.* TO 'wvp'@'%'; FLUSH PRIVILEGES;如果你的 MySQL 只允许本地访问,客户端连接时使用127.0.0.1即可,但后端服务和数据库在同一台机器时,建议使用127.0.0.1连接,避免不必要的网络暴露。
3.4 端口规划
WVP-PRO 与 ZLMediaKit 涉及多个端口,部署前先确定好端口占用情况:
| 服务 | 默认端口 | 用途 |
|---|---|---|
| WVP-PRO Web/API | 18080 | 管理界面和 HTTP API |
| WVP-PRO 国标信令 | 5060(UDP/TCP) | SIP 国标信令 |
| ZLMediaKit RTSP | 554 | RTSP 拉流 |
| ZLMediaKit RTMP | 1935 | RTMP 拉流/推流 |
| ZLMediaKit HTTP-FLV | 8080/80 | HTTP-FLV 流输出 |
| ZLMediaKit WebRTC | 10000 | 浏览器 WebRTC 拉流 |
| MySQL | 3306 | 数据库 |
| Redis | 6379 | 缓存 |
查看端口占用:
sudo lsof -i:18080 sudo ss -lntup | grep -E "18080|5060|554|1935|8080|10000"如果有服务占用,请提前处理或修改配置,否则启动后会出现端口绑定失败。
4. WVP-PRO 安装部署与服务启动
WVP-PRO 的部署方式不只一种,最简单的思路是:编译打包后端 + 构建前端 + 启动 ZLMediaKit。下面给出一套通用流程,所有命令中的版本号、仓库地址请以项目发布的实际信息为准。
4.1 获取项目源码
git clone https://gitee.com/kkkkk5g/wvp-GB28181-pro.git cd wvp-GB28181-pro也可以从 GitHub 或 Gitee 的 release 页面直接下载最新发布包,使用 release 包可以跳过编译环节,直接修改配置启动。
4.2 后端打包
通常使用 Maven 打包:
mvn package -DskipTests打包完成后,在target目录下会生成 jar 包,例如wvp-pro-*.jar。把 jar 包放到部署目录,比如/opt/wvp-pro/。
如果是自定义数据库,需要提前把数据库建好,并确认后端配置中的地址、账号、密码正确。WVP-PRO 首次启动时如果开启自动建表,会自动创建数据表;否则需要手动导入项目中的 SQL 脚本。
4.3 修改后端配置
WVP-PRO 的配置文件通常是application.yml。把配置项中的数据库、Redis、流媒体服务、SIP 信令等相关参数改成你自己的。
server: port: 18080 spring: datasource: url: jdbc:mysql://127.0.0.1:3306/wvp?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8 username: wvp password: wvp123456 redis: host: 127.0.0.1 port: 6379 password: "" database: 0 sip: ip: 127.0.0.1 # 本机内网 IP,可被设备访问 port: 5060 # SIP 信令端口 domain: 34020000002000000001 id: 34020000002000000001 password: 12345678 media: ip: 127.0.0.1 # ZLMediaKit 服务 IP port: 8080 # ZLMediaKit HTTP API 端口 secret: your_media_secret stream-ip: 127.0.0.1 # 流媒体对外访问 IP http-port: 8080 rtmp-port: 1935 rtsp-port: 554 rtp-port: 10000 enable-rtsp: true enable-rtmp: true enable-hls: true enable-fmp4: true注意:这里的sip.ip、media.ip、stream-ip需要设置成摄像头或 NVR 能访问到的地址。如果是内网设备,写机器内网 IP;如果跨公网,要配置公网 IP 或内网穿透,并放通对应端口。
4.4 启动 ZLMediaKit
ZLMediaKit 是独立的流媒体进程。获取源码并编译:
git clone https://gitee.com/zlmediakit/ZLMediaKit.git cd ZLMediaKit git submodule update --init ./build_for_linux.sh编译完成后,进入生成的build或release目录,启动:
cd release/linux/Debug/ ./MediaServer -d -c config.ini如果启动成功,会在日志中输出监听端口。此时确认 8080、554、1935、10000 等端口正常监听。
开发环境也可以直接用已编译的发行包,具体以官方 release 为准。生产环境建议把 MediaServer 注册为 systemd 服务,方便开机自启和守护。
4.5 启动 WVP-PRO 后端
后端 jar 包启动:
cd /opt/wvp-pro nohup java -jar wvp-pro-*.jar --spring.config.location=file:/opt/wvp-pro/application.yml >/opt/wvp-pro/wvp.log 2>&1 &然后查看日志:
tail -f /opt/wvp-pro/wvp.log日志中出现类似“服务启动成功”或 HTTP 端口监听成功的字样,说明后端启动完成。
4.6 启动前端管理界面
WVP-PRO 的前端项目通常是独立仓库,依赖 Node.js。克隆前端项目后执行:
npm install npm run build构建产物会生成在dist目录。把dist目录里的文件发布到 Nginx 静态目录,并配置代理:
server { listen 80; server_name your_domain_or_ip; root /opt/wvp-web/dist; index index.html; location /api/ { proxy_pass http://127.0.0.1:18080/api/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }如果只是内网快速验证,也可以直接用npm run dev启动开发模式,然后通过 Vite/Webpack 代理访问后端。生产环境统一用 Nginx 托管静态文件和反向代理。
4.7 访问管理界面
浏览器访问http://服务器IP:80或http://服务器IP:18080(如果后端直接打开)。
第一次进入需要登录。默认管理员账号和密码以项目说明为准,通常为admin/admin或admin/123456。登录后第一件事是进入系统设置,确认媒体服务配置是否正常。如果媒体服务连接成功,系统里会显示媒体节点在线;如果显示离线,登录 WVP 后先解决媒体服务连接,再继续设备接入。
5. 设备接入与通道管理
WVP-PRO 的核心工作方式是:向下连接国标摄像头/平台,向上给你提供 Web 和 API。
5.1 添加国标设备
在 WVP-PRO 界面中找到“国标设备”或“设备管理”,点击“添加”。
需要填写的信息包括:
- 设备名称,例如“厂区东门”。
- 设备国标编号,例如
34020000001320000001。 - 设备国标域,例如
3402000000。 - 设备 IP 或域名。
- 端口,默认 5060。
- 认证用户名和密码,需要与摄像头/NVR 里的 SIP 设置保持一致。
在摄像头或 NVR 的 GB28181 配置界面里,也用同样的思路填写平台侧的信息:SIP 服务器 IP 填 WVP-PRO 所在服务器 IP,SIP 端口填 5060,SIP 用户 ID 和认证密码与 WVP-PRO 中设备信息一致。
5.2 通道同步
设备添加成功后,WVP-PRO 会向设备发送目录订阅请求,设备返回通道列表。这个过程叫通道同步。
在“国标设备”列表里找到该设备,点击“通道同步”。同步成功后,设备节点下面会列出摄像头通道,每个通道对应一路视频。如果通道数量为 0,可能原因:
- 摄像头/NVR 里的 SIP 配置不正确,没有注册成功。
- 设备没有启用国标目录订阅。
- WVP-PRO 与设备网络不通。
- 设备国标编号重复或不符合规范。
通道同步完成后,在“通道管理”或“设备通道”页面可以看到每一路通道的状态。通道状态显示在线,说明取流和信令链路正常。
5.3 通道详情与直播预览
点击某个通道的“播放”按钮,浏览器会调用 WVP-PRO 获取流地址,再通过 ZLMediaKit 拉流并输出到 Web 前端播放。首次播放时可能会有一两秒延迟,这是国标 INVITE 流程的正常现象。
如果直播画面无法打开,排查顺序:
- 通道是否在线。
- 摄像头码流类型是否设置为子码流或主码流,平台是否支持对应编码。
- ZLMediaKit 端口是否被防火墙拦截。
- 服务器带宽是否足够。
- 摄像头是不是只允许单路预览。
直播成功后,下一步就是通道录像配置。
6. WVP-PRO 通道录像配置全过程
录像配置是这篇文章的核心。很多人装好 WVP-PRO 后直播没问题,但录像不生效,或者录像文件一直不写入磁盘。下面按照从存储规划、录像计划、通道关联到录像验证的完整顺序来讲。
6.1 确定录像实现方式
WVP-PRO 的录像主要有两种路径:
| 录像方式 | 原理 | 优缺点 |
|---|---|---|
| 设备端录像回放 | WVP 通过国标信令查询设备/ NVR 上的历史录像,然后把历史流拉取到平台播放 | 不占用 WVP 平台存储,但依赖设备的国标录像查询能力,不同厂家兼容性有差异 |
| 平台录像 | ZLMediaKit 根据 WVP 下发的指令,实时把通道码流录制成文件保存到服务器磁盘 | 录像不受设备端限制,统一管理,但需要规划存储空间和 I/O 能力 |
本章主要讲“平台录像”的完整配置步骤,因为这是 WVP-PRO 可以完全掌控的录像能力,也是项目交付中最常用、最可控的方案。
6.2 先规划好录像存储目录
在配置录像之前,一定要先确认 ZLMediaKit 的录像保存路径。ZLMediaKit 的配置文件中一般有一个record相关配置,里面指定了录像文件的保存根目录。
例如在 ZLMediaKit 的config.ini中:
[record] # 录像存储根目录 appPath=./record # 录像切片时长, 单位秒 fileBufSize=65536 # 录像文件格式 recordSecond=3600生产环境建议把appPath改为独立数据盘路径,比如/data/record,并且保证该目录有足够空间。
sudo mkdir -p /data/record sudo chmod -R 777 /data/record查看磁盘空间:
df -h /data/record如果根分区空间不足,先把数据盘挂载到/data或/data/record,再做录像配置,否则录像会把系统盘写满,导致服务崩溃。
6.3 在 WVP-PRO 中配置存储策略
登录 WVP-PRO,进入“系统配置”或“存储配置”相关菜单。核心参数一般包括:
- 流媒体服务是否开启录像。
- 录像存储类型,比如“本地存储”。
- 录像存储路径,和 ZLMediaKit 配置的
appPath保持对应。 - 录像切片时长,比如 30 分钟或 60 分钟切片一次,方便检索和清理。
- 是否按通道分目录保存。
如果 WVP-PRO 界面里没有明确的存储策略,那么可以确认 ZLMediaKit 的录像配置已经开启,然后在通道录像计划里写入计划,平台会通过媒体服务接口把录像任务下发到 ZLMediaKit 执行。
注意:WVP-PRO 的录像计划配置最终作用对象是 ZLMediaKit,两者要能正常通信。如果媒体服务配置错误,录像计划下发不成功,那么无论计划怎么填,都不会有录像。
6.4 创建录像计划
通道录像配置的常规路径是:
进入“国标设备”-> 选择设备 -> 找到“通道”或“录像计划” -> 新建计划。
一个录像计划通常包含下面的字段:
| 字段 | 示例值 | 说明 |
|---|---|---|
| 计划名称 | 白天 8 小时录像 | 用于识别计划的名称 |
| 生效时间 | 每天 08:00 - 18:00 | 录像计划的日期和时间范围 |
| 星期 | 周一至周五 | 可重复周期 |
| 通道范围 | 指定通道或全部通道 | 一个计划可以关联多个通道 |
| 码流类型 | 主码流 / 子码流 / 视频流 | 主码流清晰度高,子码流省空间 |
| 录像类型 | 连续录像 / 事件录像 | 取决于平台支持情况 |
创建一个最简单的“全天录像”计划:
- 计划名称填
全天录像。 - 时间范围选择
00:00 - 23:59。 - 星期选“每天”。
- 通道范围选择需要录像的通道,例如通道 1、通道 2、通道 3。
- 码流类型选择主码流,如果摄像头带宽有限,也可以选子码流。
- 保存计划。
如果平台支持“按星期”重复录像,可以创建工作日、非工作日两套计划,避免周六周日空拍。
6.5 将录像计划关联到通道
创建完计划后,在通道列表中勾选要录像的通道,把计划应用到这些通道。
这一步非常容易出现遗漏,因为只建了计划但没有“关联通道”,计划不会生效。操作时注意三个方面:
- 确认通道状态为在线。
- 确认计划生效时间覆盖当前时间。
- 确认关联通道后,界面上能看到通道对应计划的状态,而不是空白。
某些版本下,通道录像计划也可以直接在“通道管理”页面里针对单通道设置,此时你可以选择具体的通道,点击“配置录像”或“编辑计划”来完成关联。
6.6 验证录像是否真正写入磁盘
录像计划保存后,等待超过计划生效时间(比如 2 分钟后),查看 ZLMediaKit 录像目录。
find /data/record -type f | head -n 50 ls -lh /data/record/正常情况会看到按日期和通道生成的目录,里面有.mp4或.flv等录像文件。文件大小会随录像时长增长。
继续验证平台能不能查看到这段录像。在 WVP-PRO 界面中进入“录像查询”,选择通道和时间范围,点击查询。平台应该能列出刚才的录像文件。选择其中一个文件,点击回放,浏览器播放器会开始播放。
如果录像查询查不到文件,但磁盘上已经有文件,说明数据库里录像索引和文件没同步。常见原因是媒体服务配置的 HTTP 回调地址没有正确配置到 WVP-PRO,或者回调接口被防火墙拦截。解决办法是在 ZLMediaKit 的配置里设置on_record_mp4等回调地址为 WVP-PRO 的接口地址,让媒体服务在录像文件生成后通知 WVP-PRO 记录索引。
6.7 计划录像与手动录像
除了按计划录像,WVP-PRO 也支持手动控制某一路通道开始录制/停止录制。
操作思路:在通道详情或通道列表中,找到“开始录像”或“手动录像”按钮。点击后 WVP 向 ZLMediaKit 发送开始录制指令。过几分钟,到录像目录里查看,如果文件出现,说明手动录像链路正常。
手动录像适合临时取证场景,例如突发情况时开启某通道录像,不需要长期占用存储空间。
6.8 录像文件查看和导出
对于平台录像,直接到 ZLMediaKit 的record目录下复制.mp4文件即可导出。也可以使用 WVP-PRO 的录像查询页面,根据通道和时间定位到录像片段,然后下载对应文件。
国标设备录像回放则不同。如果设备端(NVR)本身存了录像,WVP-PRO 通过国标信令向设备发送媒体回放请求,设备把录像流推送到平台上,然后平台转码输出到浏览器。你可以按小时/天查询设备上的录像列表,然后逐段点播回放。这种模式下不需要 WVP-PRO 磁盘存储录像,WVP 只是起信令中转和流分发作用。
7. 录像回放与存储策略
录像不是录完就结束。上线之后,需要持续关注存储空间、录像文件保留周期和回放体验。
7.1 按通道目录管理
推荐在 ZLMediaKit 的录像配置里启用按通道目录保存,这样每个通道每天的录像文件都在独立的目录下,管理方便。
例如:
/data/record/ ├── 34020000001320000001/ │ ├── 2025-06-01/ │ │ ├── 10_00_00.mp4 │ │ ├── 11_00_00.mp4 │ │ └── ... │ └── 2025-06-02/ │ └── ... └── 34020000001320000002/ └── ...这个目录结构可以直接用脚本做定时清理。
7.2 录像清理策略
录像一直在增长,必须设定保留周期。常见策略:
- 保留 7 天,适合临时查证场景。
- 保留 30 天,适合常规安防项目。
- 保留 90 天,适合重要监管区域,但对存储容量要求高。
写一个简单的定时清理脚本,删除指定天数之前的录像文件:
#!/bin/bash RECORD_DIR="/data/record" KEEP_DAYS=30 find ${RECORD_DIR} -type f -name "*.mp4" -mtime +${KEEP_DAYS} -delete find ${RECORD_DIR} -type d -empty -delete加入 crontab,每天凌晨执行一次:
crontab -e 0 3 * * * /usr/local/bin/clean_record.sh也可以使用 WVP-PRO 自带的存储清理功能,如果有的话,优先使用平台能力,脚本只作为兜底。
7.3 录像回放稳定性
回放卡顿的原因通常是磁盘 I/O 不足、带宽不足或录像文件碎片化。保证回放体验的建议:
- 录像盘使用独立机械硬盘或 SSD。
- 如果并发回放人数多,优先使用 SSD 并提升内存。
- 避免在录像盘上同时跑数据库和媒体服务。
- 回放时优先选择子码流。
8. 接口 API 与自动化运维思路
WVP-PRO 提供 HTTP API,可以对接第三方系统或做自动化运维。这里给一个通用调用模板。真实请求地址、参数、鉴权方式需要按你部署版本的接口文档调整。
8.1 登录并获取 Token
通常 API 需要先登录,获取访问凭证。
curl -X POST http://127.0.0.1:18080/api/login \ -H "Content-Type: application/json" \ -d '{ "username": "admin", "password": "admin" }'返回体里会包含 token 或 sessionId。
8.2 查询通道列表
curl -X GET "http://127.0.0.1:18080/api/device/channel/list?page=1&count=100" \ -H "Authorization: Bearer YOUR_TOKEN"8.3 配置通道录像计划
不同版本的接口路径可能不同,这里给出一个“按通道设置录像计划”的 POST 模板:
curl -X POST http://127.0.0.1:18080/api/record/plan \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_TOKEN" \ -d '{ "channelId": "34020000001320000001", "planName": "全天录像", "timeRange": "00:00-23:59", "week": "1,2,3,4,5,6,7", "streamType": "main", "recordType": "continuous" }'8.4 Python 批量配置示例
如果通道数量很大,可以写 Python 脚本从 Excel 读取通道列表,循环调用接口。
import requests import time BASE_URL = "http://127.0.0.1:18080" TOKEN = "YOUR_TOKEN" HEADERS = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"} def set_record_plan(channel_id, plan_name="全天录像"): url = f"{BASE_URL}/api/record/plan" payload = { "channelId": channel_id, "planName": plan_name, "timeRange": "00:00-23:59", "week": "1,2,3,4,5,6,7", "streamType": "main", "recordType": "continuous" } resp = requests.post(url, json=payload, headers=HEADERS, timeout=10) print(channel_id, resp.status_code, resp.text) time.sleep(0.5) channel_list = [ "34020000001320000001", "34020000001320000002", ] for cid in channel_list: set_record_plan(cid)使用脚本批量配置前,先在单个通道上验证接口参数;接口响应结构和字段名不确定时,先在页面上点击一次并打开浏览器开发者工具,查看实际请求路径和方法。
在批量任务设计上,建议加一个简单的失败重试和日志,避免因为某个通道异常导致后面全部跳过。
9. 资源占用与性能观察
WVP-PRO 本身的 Java 进程在通道数量少时占用不高,真正消耗资源的是 ZLMediaKit 和存储 I/O。性能观察可以从四个维度来看。
9.1 观察 CPU 和内存
使用top或htop查看:
top重点看 Java 进程和 MediaServer 进程的 CPU 和内存占用。如果资源占用长期过高,优先确认是不是并发拉流路数过多、HLS 切片过密或者转码导致。
9.2 观察磁盘 I/O
使用iostat查看:
iostat -x 1 5重点看%util和await。当%util长时间接近 100% 时,磁盘压力较大。录像配置多路高清视频时,建议把录像目录和系统目录分开。
9.3 观察网络流量
使用nload或iftop:
sudo apt install -y nload nload若带宽被打满,说明码流过大或并发观看路数过多。此时可以降低录像码流类型,或者限制同时回放的路数。
9.4 如何判断 WVP-PRO 是否正常
- 打开管理界面,确认媒体节点在线。
- 查看 WVP 日志,确认设备注册、通道同步、录像计划下发没有报错。
- 查看 ZLMediaKit 日志,确认没有连接超时、鉴权失败等报错。
- 查看磁盘空间,确认录像目录还有余量。
如果页面能播放直播但录像不写入,优先排查 ZLMediaKit 的录像开关和回调地址,这两点占录像问题的大多数。
10. 常见问题与排查方法
下面整理 WVP-PRO 部署和通道录像配置中最高频的问题。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 摄像头国标注册不上 | SIP 端口未放通、设备 ID/密码配置错误 | 查看 WVP 日志确认 SIP 注册信息 | 检查 WVP-PRO SIP 地址、端口、设备国标编号与设备端一致 |
| 通道状态离线 | 注册成功但目录订阅或心跳超时 | 查看设备通道列表,看设备最近活跃时间 | 检查设备和平台网络,尽量保持网络稳定,重新同步通道 |
| 直播画面黑屏 | 流媒体服务拉流失败、码流编码不受支持、带宽不够 | 查看 ZLMediaKit 日志确认是否成功收流 | 更换码流类型,检查防火墙端口,确认摄像头码流协议 |
| 录像计划保存生效但没录像文件 | 录像开关未开启、计划未关联通道、ZLMediaKit 回调没配 | 查看录像目录和 ZLMediaKit 日志 | 开启录像开关,确认计划关联到在线通道,配置录像回调 |
| 有录像文件但平台查不到 | 回调地址错误导致录像索引未写入数据库 | 查看 WVP 日志确认录像回调请求 | 在 ZLMediaKit 里配置 on_record_mp4 回调到 WVP 接口 |
| 录像回放卡顿 | 磁盘 I/O 不足、带宽不足、回放码流过大 | 用 iostat 和 nload 看资源 | 使用 SSD 盘,降低回放码流,增加带宽 |
| 磁盘被录像写满 | 录像保留策略缺失 | df -h 查看磁盘占用 | 配置录像自动清理脚本,设定保留天数 |
| 后端启动失败,端口被占用 | 18080 或 5060 被其他进程占用 | ss -lntup 查看端口 | 更换端口或停掉占用进程 |
| 媒体服务配置不对,页面显示节点离线 | media ip/secret 配置错误 | 查看 WVP 配置和 ZLMediaKit 日志 | 用正确的 IP 和 secret 修改配置并重启 |
| 数据库连接失败 | MySQL 未启动、账号权限错误、密码错误 | 手动连接数据库测试 | 检查和修正数据库连接配置 |
每遇到一个新问题,首先看日志,这是最可靠的排查手段。WVP-PRO 后端日志一般会打印 SIP 注册、信令交互和设备状态变化;ZLMediaKit 日志会打印取流、断流、录像写入情况。不要只凭管理界面显示的状态判断问题。
11. 最佳实践与工程建议
WVP-PRO 上线到生产环境前,下面这些实践建议值得提前规划好。
11.1 部署结构建议
- 小规模项目(50 路以内):单台服务器部署 WVP-PRO + MySQL + Redis + ZLMediaKit,录像目录挂独立数据盘。
- 中大规模项目:WVP-PRO 和 ZLMediaKit 分开部署。WVP-PRO 作为信令和管理层,ZLMediaKit 作为流媒体层,数据盘独立。
- 如果设备分布在不同网段,需要提前规划好路由,保证 SIP 信令和 RTP 媒体流都能互通。
11.2 安全加固
- WVP-PRO 管理后台不要暴露到公网,必须暴露时加 Nginx 反向代理、HTTPS 和访问认证。
- 设备国标 SIP 密码不要使用空密码或弱密码。
- 命令行和配置文件中不要硬编码数据库密码;生产环境使用环境变量或配置管理工具。
- WVP-PRO 的 API 服务不使用时不要开放到公网。
- 定期检查服务器安全日志,避免被扫描和暴力破解。
11.3 合规使用提醒
监控视频涉及个人信息和隐私安全,一定要强调:
- 部署和使用监控平台前,确认监控区域属于合法监控范围,现场需要有明确告知。
- 录像数据要分级管理,严格控制访问权限,不能随意分享给无权查看的人员。
- 人脸、车辆等敏感数据的存储和调用要符合个人信息保护法及相关规定。
- 测试环境只能使用自己拥有或已获授权的画面,不要对小区、单位、公共场所进行未授权录像测试。
- 平台产生的录像数据如果需要保留,要制定明确的保留周期,到期自动清理。
11.4 运维保障
- 录像目录和数据库目录不要混用。
- 每天检查一次磁盘空间和媒体服务状态。
- 配置录像清理脚本,避免磁盘写满。
- 数据库、服务配置和关键脚本定期备份。
- 服务启动方式建议使用 systemd 托管,保证异常退出后自动重启。
下面给出一个简单的 systemd 启动 WVP-PRO 的示例:
[Unit] Description=WVP-PRO Service After=mysql.service redis.service [Service] Type=simple User=root WorkingDirectory=/opt/wvp-pro ExecStart=/usr/bin/java -jar /opt/wvp-pro/wvp-pro.jar --spring.config.location=file:/opt/wvp-pro/application.yml Restart=on-failure RestartSec=10 StandardOutput=append:/opt/wvp-pro/wvp.log StandardError=append:/opt/wvp-pro/wvp.log [Install] WantedBy=multi-user.target启用:
sudo systemctl daemon-reload sudo systemctl enable wvp-pro sudo systemctl start wvp-pro sudo systemctl status wvp-pro12. 总结与下一步
WVP-PRO 是一套很值得部署的国标视频平台,最值得尝试的点在于它把国标信令、设备管理、直播预览、通道录像、API 输出全部打通了,完全可以作为安防项目的核心视频网关来用。
先验证什么?我的建议是把顺序定为:
- 部署 WVP-PRO 和 ZLMediaKit 并确认媒体节点在线。
- 接入一个摄像头或模拟器,确认通道同步和直播正常。
- 创建一组录像计划,关联到单个通道,验证磁盘写入和历史回放。
- 再用脚本或 API 批量配置其它通道。
最容易踩的坑有四个:一是媒体服务配置不对导致页面显示节点离线;二是录像计划没有关联到通道,计划建了但没效果;三是 ZLMediaKit 录像回调没配置,导致文件录了但平台索引不到;四是磁盘空间规划不足,跑几天就被写满。
如果这套平台你已经跑通了基础录像,下一步可以继续做国标级联,把 WVP-PRO 作为下级平台推送到另一个上级国标平台;也可以把 WVP-PRO 的直播和回放能力接入到企业内部统一视频平台,通过鉴权机制控制访问范围;通道数量特别多时,还可以结合 API 做自动巡检和故障告警。
建议先把文章收藏备用,等动手部署的时候,把带宽、磁盘和端口放通这三件事提前想清楚,后面会顺利很多。