wvp-GB28181-pro这个项目,我在安防行业里见过太多人卡在部署这一步了。它本身是一个基于GB28181国标协议的流媒体网关平台,核心能力是把不同厂商的监控摄像头、NVR、视频平台统一接入到一套系统里,再通过WebRTC、HLS这些方式在网页上直接播放。借助Docker部署,可以把整个环境在十几分钟内搭建起来,特别适合从0到1做原型验证,也适合刚接触国标视频接入的开发者、弱电集成商快速跑通整套流程。
我不止一次看到有人在这个项目上栽跟头,有的是MySQL起不来,有的是SIP端口不通,还有的是ZLM流媒体服务和wvp对不上密钥。其实这些坑大多不是项目本身的问题,而是对GB28181这套体系里各个服务之间的协作关系没理清。这篇文章我就用Docker把这套平台从零搭起来,把每一步的配置逻辑和排查思路都讲明白。
1. 部署前先搞懂wvp-GB28181-pro到底在做什么
1.1 GB28181是什么,wvp在这个体系里的位置
很多刚接触这个项目的人容易懵,上来就急着敲docker命令,结果MySQL、Redis、ZLM、wvp四个容器全起来了,摄像头就是注册不上。要理解为什么这么部署,得先搞清楚这个平台在安防体系里到底扮演什么角色。
GB28181是国内视频监控领域普遍采用的设备接入标准,它解决的问题是:不同厂商的摄像头、NVR、视频平台之间,怎么通过统一的信令协议和媒体传输格式互相对接。它不像海康的SDK或者大华的主动注册那样是厂商私有的,而是一套公开的标准协议。协议里边最核心的两个部分,一个是SIP信令,用来做设备注册、心跳、点播请求、云台控制;另一个是RTP媒体流,用来传输视频和音频数据。
wvp-GB28181-pro就是基于这套协议实现的一个网关服务。它内部承担两个角色:对下,它是SIP服务器,摄像头/NVR作为SIP客户端主动注册进来;对上,它提供HTTP接口和Web页面,你可以通过浏览器实时预览、回放、对讲。但wvp本身不做媒体流的转发和分发,真正的流媒体收发是交给ZLMediaKit(下文简称ZLM)去做的。两者配合的方式是:wvp收到播放请求后,通过HTTP告诉ZLM“帮我拉某路流”,ZLM再通过GB28181协议去摄像头那边拉流,拉回来之后做转封装,然后给web端播放器。
所以整套系统必须有数据库存设备信息和录像索引,必须有缓存存会话状态,必须有流媒体服务处理音视频,还必须有一个核心信令服务把这一切串起来。一个docker-compose文件拉起来多个容器,就是这个原因。
1.2 为什么用Docker而不是直接源码部署
wvp-GB28181-pro是Java项目,本身打包好就是一个jar包,理论上装个JDK加两个中间件就能跑。但实际部署时你会发现坑很多:JDK版本要求17以上,用的是ZGC垃圾回收器;Maven打包时依赖下载慢,尤其在国内网络环境下经常卡住;ZLM是用C++写的,编译安装要装一堆依赖库,如果系统版本不对甚至会编译失败。
Docker把这些环境差异都屏蔽掉了。你不需要在宿主机上装JDK、Maven、GCC、CMake,所有依赖都在镜像里。我在生产环境里维护这套系统,最省心的方式就是固定镜像版本,然后通过环境变量和配置文件去改业务参数,恢复和迁移都非常快。这也是我推荐所有人第一次部署wvp时直接走Docker路线的原因,先把业务跑通,再去研究源码细节,效率高得多。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备:Docker安装、镜像加速、目录与网络规划
2.1 宿主机准备和Docker安装
先在宿主机上把Docker装好。我这边是Linux环境,CentOS和Ubuntu都试过。以Ubuntu 20.04/22.04为例,最稳妥的方式是用官方脚本安装,装完是当前最新的社区版:
bash复制curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo systemctl enable --now docker
sudo usermod -aG docker $USER
如果用的是CentOS 7,需要注意内核版本和存储驱动的问题。CentOS 7自带的3.10内核在跑Docker时,默认的存储驱动可能是overlay2,建议确认一下:
bash复制docker info | grep "Storage Driver"
如果输出不是overlay2,说明系统可能需要升级,或者你需要换一台内核更新的机器。CentOS 7的老内核跑新版本的Docker会有不少边缘问题,特别是之前遇到过容器内时间漂移和网络状态异常的情况。
Windows上部署则用Docker Desktop,安装包官网直接下就行。安装前建议先在控制面板里确认虚拟化功能已开启,否则装完启动时会报“virtualization support wasn't detected”或者“failed to start”。这类报错的原因通常是BIOS里的VT-x/AMD-V没打开,或者Windows的Hyper-V/WSL2功能没启用。打开方式:在“启用或关闭Windows功能”里勾选“Hyper-V”和“适用于Linux的Windows子系统”,重启电脑。Docker Desktop如果装的是新版本,建议用WSL2后端,比Hyper-V后端省内存,启动也快,实测下来资源占用表现更好。
另外我还是建议单独准备一台Linux服务器来跑wvp。因为后面ZLM要开放大量UDP端口给RTP媒体流,Windows的防火墙拦截和网络转发效率都不如Linux,真到了几十路摄像头并发预览的时候,差距会很明显。
2.2 镜像拉不下来怎么办
Docker本身装好只是第一步,国内网络环境下最常见的坑是镜像拉取超时。docker hub在国内访问很不稳定,几GB的镜像经常拉到一半就断。最直接的解决办法是给Docker配置国内镜像加速器。以Linux为例,编辑 /etc/docker/daemon.json:
json复制{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.nju.edu.cn"
]
}
改完以后执行:
bash复制sudo systemctl daemon-reload
sudo systemctl restart docker
Docker Desktop用户直接在Settings -> Docker Engine里编辑JSON配置,同样加上registry-mirrors字段,然后Apply & Restart。
配置好之后建议先拉一个小镜像测试加速效果:
bash复制docker pull hello-world
能很快拉下来说明加速器生效了。需要说明的是,镜像加速器只对Docker Hub官方镜像生效,如果
