从监控到直播:用WVP-PRO+ZLMediaKit打造私有视频平台全栈指南
在数字化转型浪潮中,视频监控与互联网直播技术的融合正催生全新的应用场景。无论是企业需要将传统安防摄像头内容实时分享给远程团队,还是教育机构希望将教学现场转为低延迟互动直播,基于GB/T 28181协议构建的私有视频平台都能提供专业级解决方案。本文将深入解析如何通过Docker Compose编排WVP-PRO和ZLMediaKit两大核心组件,实现从RTSP摄像头流采集到多协议分发的完整技术链路。
1. 技术栈选型与架构设计
1.1 核心组件功能解析
WVP-PRO作为GB/T 28181协议的服务端实现,承担着设备管理、信令控制和业务逻辑处理的关键角色。其核心能力包括:
- 国标设备自动注册与鉴权
- 视频流调度与级联管理
- 云端录像与检索回放
- 报警事件处理机制
ZLMediaKit则是高性能流媒体服务器,负责:
- 多协议接入(RTSP/RTMP/GB28181)
- 实时转码与协议转换
- 低延迟分发(HTTP-FLV/HLS/WebRTC)
- 动态负载均衡
两者协同工作时,数据流向表现为:
设备端 → WVP-PRO(信令控制) → ZLMediaKit(媒体处理) → 终端用户1.2 系统拓扑规划
典型生产环境部署建议采用三层架构:
| 层级 | 组件 | 硬件配置建议 |
|---|---|---|
| 接入层 | 摄像头/NVR | 根据摄像头数量调整 |
| 服务层 | WVP-PRO+ZLMediaKit | 4核CPU/8GB内存 |
| 分发层 | CDN/边缘节点 | 带宽≥100Mbps |
提示:测试环境可使用单节点部署,但需确保开放30000-30500端口范围用于RTP传输
2. Docker Compose全栈部署
2.1 基础环境准备
确保宿主机已安装:
- Docker 20.10+
- Docker Compose 2.0+
- 至少4GB可用内存
- 50GB存储空间(用于录像存储)
创建项目目录结构:
mkdir -p wvp-pro/{conf,record} zlm/{conf,www}2.2 ZLMediaKit容器配置
docker-compose.yml关键配置解析:
services: zlmediakit: image: zlmediakit/zlmediakit:master ports: - "1935:1935" # RTMP - "8080:80" # HTTP-FLV/HLS - "554:554" # RTSP - "30000-30500:30000-30500/udp" # RTP端口范围 volumes: - ./zlm/conf/config.ini:/opt/media/conf/config.ini environment: TZ: Asia/Shanghaiconfig.ini必须修改的Hook配置:
[hook] enable=1 on_play=http://wvp-pro:18080/index/hook/on_play on_publish=http://wvp-pro:18080/index/hook/on_publish secret=P2e79rwEjXjAxr4YsjMvTo333qOMQxww2.3 WVP-PRO服务集成
数据库初始化命令:
CREATE DATABASE wvp CHARACTER SET utf8mb4; mysql -u root -p wvp < ./sql/wvp.sql关键Spring Boot配置项:
media: id: WBvVnKFH7nbq1LVX # 必须与ZLMediaKit的mediaServerId一致 ip: zlmediakit # Docker服务名 http-port: 8080 # 映射后的HTTP端口 secret: P2e79rwEjXjAxr4YsjMvTo333qOMQxww3. 国标设备接入实战
3.1 摄像头注册流程
- 登录WVP-PRO管理界面(默认admin/admin)
- 进入"网络配置"→"SIP配置"
- 填写设备所属域、SIP ID和密码
- 在摄像头配置页面填入WVP的SIP信息
常见注册失败排查步骤:
- 检查SIP域是否匹配
- 确认NAT穿越配置
- 抓包分析SIP信令流程
3.2 多协议直播配置
通过API获取播放地址:
GET /api/v1/stream/proxy_play?deviceId={设备ID}&channelId={通道ID} Accept: application/json响应示例:
{ "hls": "http://your-domain:8080/hls/stream.m3u8", "flv": "http://your-domain:8080/live/stream.flv", "rtmp": "rtmp://your-domain:1935/live/stream" }4. 高级功能实现
4.1 云端录像管理
启用自动录像需配置:
record: appName: record fileRepeat: 1 # 开启文件循环存储录像检索API调用示例:
import requests params = { 'deviceId': '设备ID', 'startTime': '2024-01-01 00:00:00', 'endTime': '2024-01-02 00:00:00' } response = requests.get('http://wvp-pro:18080/api/v1/record/list', params=params)4.2 性能优化策略
针对高并发场景建议:
- 调整ZLMediaKit线程池大小
[general] threadNum=16 # CPU核心数×2- 开启TCP_NODELAY降低延迟
[rtsp] lowLatency=1- 使用硬件加速转码
docker run --device /dev/dri/renderD128 zlmediakit