Featured image of post WVP-Pro 国标视频流:GB28181 摄像头注册与 ZLMediaKit 流媒体对接

WVP-Pro 国标视频流:GB28181 摄像头注册与 ZLMediaKit 流媒体对接

WVP-Pro 国标视频平台容器化部署、GB28181 摄像头注册、SDP IP / 流 IP 配置、收流端口规划、ZLMediaKit 集成

国内安防/视频监控场景离不开"国标"——GB28181 是公安部推的"安全防范视频监控联网系统信息传输、交换、控制技术要求",海康/大华/宇视等主流厂商的 NVR、IPC 摄像头都支持 SIP 信令注册到平台。WVP-Pro(wvp_pro)是开源的 GB28181 视频平台,把 SIP 信令、流媒体(集成 ZLMediaKit)、Web 管理、API 对接打包到一容器里,最适合"快速把海康摄像头接到自己平台"。这篇文章讲清楚容器化部署、摄像头注册、SDP IP/流 IP 配置、流端口规划。

阅读对象:要给客户/公司搭视频监控平台、要把海康/大华摄像头统一管理的开发或集成商
覆盖范围:WVP-Pro 容器化部署、GB28181 摄像头注册、SDP IP/流 IP 配置、收流端口规划、ZLMediaKit 集成

一、为什么是 WVP-Pro

GB28181 平台选型,对比几个常见方案:

方案特点适用
WVP-ProJava + ZLMediaKit,开源,社区活跃二次开发、对接业务系统
萤石云 / 阿里云视频监控SaaS,按量付费不想运维,但要付费
海康 iVMS / 大华 DSS厂商私有平台单品牌摄像头
GB28181Server另一款开源极简接入
LiveGBS国标 GB28181 视频平台商业 / 开源双版本

When to use:要给客户做 GB28181 视频接入、二次开发、API 集成到自有平台,WVP-Pro 是首选。它把"信令 + 流媒体 + Web 管理"全打包,单容器跑起来就能对接海康/大华摄像头。

二、容器化部署

2.1 拉镜像

1
docker pull 648540858/wvp_pro:latest

2.2 启动

WVP-Pro 涉及多个端口:

  • 18080:Web 管理界面 + API
  • 9980:HTTP 流媒体服务(拉流播放)
  • 5060:SIP 信令端口(摄像头注册)
  • 9554:RTSP 端口(部分流媒体场景)
  • 33010-33020:媒体收流端口(每个摄像头分配一个)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
docker run --name wvp \
  --env WVP_IP="{{PUBLIC_IP}}" \
  -itd \
  --restart=always \
  -p 18080:18080 \
  -p 33010-33020:33010-33020/udp \
  -p 33010-33020:33010-33020/tcp \
  -p 9980:9980 \
  -p 5060:5060 \
  -p 5060:5060/udp \
  -p 9554:9554 \
  648540858/wvp_pro:latest

WVP_IP 必须设为公网 IP:摄像头要从公网注册进来,WVP 注册信令的 IP 必须是公网可达的。

2.3 配置文件位置

WVP-Pro 容器内:

  • /opt/wvp/config/application.yml:WVP 主配置(Spring Boot)
  • /opt/media/config.ini:ZLMediaKit 配置(流媒体)

启动后立即把配置 cp 出来,挂载进容器:

1
2
3
# 第一次启动后导出
docker cp wvp:/opt/media/config.ini /data/wvp/
docker cp wvp:/opt/wvp/config/application.yml /data/wvp/

必须挂出来:WVP 容器升级/重启后会清空容器内配置,不挂出来就回到默认 IP。

2.4 host 网络模式

--net=host 模式让所有端口直接用宿主机 IP,省去端口映射的麻烦

1
2
3
4
5
6
7
8
docker run --name wvp \
  --env WVP_IP="{{PUBLIC_IP}}" \
  -itd \
  --restart=always \
  --net=host \
  -v /data/wvp/application.yml:/opt/wvp/config/application.yml \
  -v /data/wvp/config.ini:/opt/media/config.ini \
  648540858/wvp_pro:latest

三、核心配置

3.1 application.yml(关键段)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
sip:
  ip: {{PUBLIC_IP}}
  port: 5060
  domain: 3402000000
  id: 34020000002000000001
  password: {{REDACTED}}

media:
  # 流 IP(公网 IP,摄像头推流回来用)
  ip: {{PUBLIC_IP}}
  # HTTP 流端口
  http-port: 9980
  # 收流端口范围
  port-range: 33010,33020
  send-port-range: 33010,33020
  sdp-ip: {{PUBLIC_IP}}
  stream-ip: {{PUBLIC_IP}}
  stream-on-demand: false
  record-push-live: false
  auto-apply-play: true

3.2 ZLMediaKit 配置(config.ini)

1
2
3
4
5
6
[http]
port=9980
allow_ip_range=0.0.0.0/0

[rtp]
port=30000-30100

流端口范围:每个摄像头推流回来占一个端口,N 个摄像头至少要 N 个端口。生产环境开 33010-33020 共 11 个端口是基础款。

3.3 修改配置后重启

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 进入容器
docker exec -it wvp bash

# 修改 application.yml
sed -i 's/sdp-ip: .*/sdp-ip: {{PUBLIC_IP}}/' /opt/wvp/config/application.yml
sed -i 's/stream-ip: .*/stream-ip: {{PUBLIC_IP}}/' /opt/wvp/config/application.yml
sed -i 's/port: 5060/port: 5060/' /opt/wvp/config/application.yml

# 改 ZLMediaKit 端口
sed -i '69s/^.*$/port=9980/' /opt/media/config.ini
sed -i '111s/^.*$/port=9554/' /opt/media/config.ini

exit

# 重启 WVP
docker restart wvp

重启后 SDP IP 和流 IP 会还原成 WVP_IP(即启动参数 --env WVP_IP),必须改成公网 IP 后重启,否则摄像头注册后无法推流。

四、添加摄像头

4.1 登录 Web 管理

访问 http://{{PUBLIC_IP}}:18080/#/login

  • 默认账号:admin
  • 默认密码:admin

生产环境:首次登录立即改密码。

4.2 摄像头接入流程

  1. 摄像头端配置(海康威视为例):

    • 平台接入 → 平台管理 → 添加平台
    • 协议类型:GB28181
    • 服务器 IP:{{PUBLIC_IP}}
    • 端口:5060
    • SIP 用户名:34020000001110000009(WVP 配置里的 SIP ID)
    • 认证密码:与 application.yml 一致
  2. WVP 端查看注册

    • 登录 Web → 控制台
    • 信令服务器配置:填 SIP 信息
    • 设备列表:刷新等待注册状态变为"在线"
  3. 通道管理

    • 设备列表 → 选中摄像头 → 通道
    • 视频通道编码 ID:34020000001320000001(每个通道独立)
    • 通道状态变"在线"后即可拉流

4.3 拉取 RTSP 流

在浏览器 F12 网络面板里:

  1. 进入设备列表 → 通道管理
  2. 点击"播放"
  3. F12 切到 Network 标签
  4. 找到带 RTSP 的请求
  5. 复制 URL(格式:rtsp://{{CAM_USER}}:{{CAM_PASS}}@{{CAM_IP}}:554/Streaming/Channels/101

rtsp:// 这个地址是摄像头直连的 RTSP 流,不是 WVP 转发的。要走 WVP 转发,用 WebRTC / HTTP-FLV / HLS(在 Web 管理界面"播放"按钮自动选协议)。

五、典型部署架构

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
[海康/大华 NVR/摄像头]                        [WVP-Pro 服务]
  SIP 5060  ──注册信令──→  {{PUBLIC_IP}}:5060      (WVP 收 SIP)
  RTSP      ──拉/推流──→  {{PUBLIC_IP}}:33010-20   (WVP 收流)
                                    [ZLMediaKit]
                                    [Web 管理 / API]
                              http://{{PUBLIC_IP}}:18080

[客户端]
  Web 浏览器 ──HTTP-FLV/WebRTC──→ {{PUBLIC_IP}}:18080 / 9980

六、踩坑清单

  1. SDP IP/流 IP 还原成内网 IP——重启 WVP 后必须重新 sed 改公网 IP
  2. 33010-33020 端口未开放——UDP/TCP 都要在公网防火墙开放
  3. Nginx 反代 18080——不能用 Nginx 反代 WVP 的 18080 端口,WebRTC/WebSocket 走 18080,Nginx 反代会断流。要么直接暴露 18080,要么用 stream 段
  4. SIP 注册不上——SIP ID 不在 20 位标准格式、密码不对、WVP 端信令配置和摄像头端不一致
  5. 拉流 404——通道未注册成功,或者流端口没开
  6. 状态变红不在线——摄像头到 WVP 的网络不通(防火墙、路由、NAT),抓 SIP 包定位

七、2024+ 视角补充

本文写于 2023-06,2024-2026 期间 WVP-Pro / ZLMediaKit 关键演进:

  • WVP-Pro 4.7+(2024-08):GB/T 28181-2022 协议全面支持(vs 老 2016 协议);国密 SM2/SM4 算法支持(政企合规刚需);WebRTC 推流原生(不再依赖 webrtc-streamer)
  • WVP-Pro 5.x(2025-Q3):K8s 部署模式(Spring Cloud 微服务拆分)、分布式集群(多实例注册中心共享)、AI 事件检测(接入 ONVIF + 移动侦测 / 入侵检测)
  • ZLMediaKit 2024+(持续迭代):WebRTC WHIP / WHEP 标准协议;SRT over WebRTC 互通;AI 推理模块(内置 ONNX Runtime + 主流模型)
  • WVP 替代品(2024+ 视角):
    • 国标 GB28181 商业平台:海康 iVMS / 大华 DSS / 宇视 UNV 仍是政企采购首选
    • 开源LiveGBS 2024+ 社区活跃
    • 云服务:腾讯云 / 阿里云 / 华为云 国标网关(按量计费,无需自建)

实战建议(2025-2026 视角)

  • 纯 GB28181 + Web 播放 → WVP-Pro 4.7+ + ZLMediaKit 仍是开源首选
  • AI 集成(人脸 / 车辆 / 入侵)→ WVP 5.x + ONVIF + 边缘 AI 盒子
  • 政企合规 → 商业平台 / 国密改造 / 等保测评一条龙
  • K8s 部署 → WVP 5.x 微服务模式(注意 Spring Cloud 复杂度)

八、参考资料

  • WVP-Pro 文档:https://doc.wvp-pro.cn/
  • GB28181 协议规范:GB/T 28181-2016 / GB/T 28181-2022
  • ZLMediaKit:https://github.com/ZLMediaKit/ZLMediaKit
  • LiveGBS:github.com/livegbs/GB28181-Server
  • 海康威视 GB28181 配置手册:各型号 NVR/IPC 平台接入章节

下一步

使用 Hugo 构建
主题 StackJimmy 设计