简介:SkeyeVSS-3.2.0是一款面向视频监控与安防领域的GB28181标准测试平台软件,重点提供中心信令管理服务,适用于需要验证设备接入、信令交互及视频融合云平台功能的开发、测试与运维人员。软件解决了GB28181协议下不同厂商设备难以互联互通的问题,从而提升整体监控网络的兼容性与可靠性,支持设备注册、心跳检测、视频流调度、事件通知和会话控制等关键能力。资源包共458个文件,以dll/so动态库、js/css前端资源及exe/bat可执行脚本为主体,同时包含配置文件、Web管理页面、依赖组件以及安装/卸载批处理脚本,压缩包大小160.62MB,可满足Windows环境下的快速部署与功能验证。目前已有246人学习使用,适合作为GB28181平台搭建、信令调试及安防系统集成的参考工具,帮助使用者深入理解视频融合云平台的运行机制。 算起来,我在视频监控这个行当里摸爬滚打也有好几年了。从最早的模拟摄像头加DVR,到后来的网络摄像机配NVR,再到现在的纯软件视频监控平台,整个技术栈换了一茬又一茬。前阵子因为一个园区安防项目,我仔细研究了一下 SkeyeVSS 这个开源视频综合安防管理平台,正好赶上 3.2.0 版本发布,上手部署测试用了两周多,踩了一些坑,也摸出了一些门道。今天就把我对 SkeyeVSS-3.2.0 这个版本的理解、部署过程和一些实战心得整理出来,给正在做视频接入、流媒体转发、安防平台集成的朋友一个参考。
先说这东西能干什么。SkeyeVSS 本质上是一套完整的视频能力中台,它能把不同厂家、不同协议的摄像头、NVR、DVR 统一接入进来,对外提供统一的直播、回放、云台控制、录像计划、报警联动等接口。如果你们项目里有海康、大华、宇视的摄像头,又不想每个厂家单独买一套平台,那这东西就派上用场了。它支持和国标 GB/T 28181 的设备对接,也支持 ONVIF、RTSP 等常见协议,还可以和上级平台做级联。3.2.0 这个版本我实测下来,在设备接入稳定性、WebRTC 低延迟播放、电子地图联动这几个方面都有明显提升,做中小型安防项目足够了,架构上撑到几千路摄像头也没问题。
1. 项目整体设计与功能拆解
1.1 为什么需要一个独立视频平台,而不是直接看摄像头
很多刚接触安防项目的朋友会问:摄像头自己带 Web 页面,海康也有自己的 iVMS,大华也有 DSS,为什么还要部署 SkeyeVSS 这类平台?我用一次实际经历来解释。
去年有个连锁超市的项目,要求把三个城市、四十七个门店的摄像头统一到总部大屏上查看。每个门店用的摄像头还不一样——有一批是海康的老款,有一批是大华的,还有几个门店用的是杂牌 IPC。如果按传统方式,总部得装三套软件,每套软件只能看对应品牌的设备,运营人员要来回切换,更麻烦的是要做录像集中存储、报警统一管理的时候,厂商自带平台基本做不到。SkeyeVSS 这类平台做的事,就是把底层那些乱七八糟的协议差异“抹平”,对上层提供统一标准的能力接口。
架构上它分了几层:
- 设备接入层:负责用 GB/T 28181、ONVIF、RTSP、RTMP 等协议对接各种前端设备,这个层解决的是“怎么把设备连上来”的问题。
- 流媒体服务层:这是核心,负责从设备取流、转码(如果需要的话)、分发,对外输出 RTMP、HLS、HTTP-FLV、WebRTC 等格式的流。
- 业务管理层:负责设备管理、录像计划、用户权限、报警联动、电子地图等业务功能。
- 接口层:对外提供 RESTful API,方便和客户的业务系统对接。
这四层架构其实是借鉴了互联网视频平台(比如直播平台)的思路。摄像头从设备接入层进来,流媒体服务层负责把一路视频流转成多路分发给不同客户端,业务管理层管的是“谁可以看哪一路”和“录像怎么存”。理解了这个分层逻辑,后面部署和调参的时候你就不会一头雾水。
1.2 SkeyeVSS 3.2.0 的核心能力与版本升级点
我拿 3.2.0 和之前用过的一些版本对比,有几个比较明显的变化值得说一下。
第一是设备接入能力增强。3.2.0 对 GB/T 28181 协议的兼容做了不少优化,尤其是对海康、大华通过国标方式注册时的暗坑做了处理。以前国标接入经常碰到设备能注册上但拉流失败的情况,3.2.0 在 SIP 信令处理上更稳定了,我这边同时挂了一百多路国标设备,跑了三天没有掉线的情况。
第二是 WebRTC 播放正式可用。低延迟播放一直是安防平台的痛点。传统的 HLS 播放延迟十几秒到几十秒,HTTP-FLV 延迟在几秒左右。3.2.0 把 WebRTC 播放做了优化,实测在局域网内端到端延迟可以压到 300-500 毫秒,这已经非常接近直接看摄像头画面了。如果你做的是需要实时调度的场景,比如园区巡逻、交通疏导,这个功能非常有价值。
第三是电子地图模块做了重构。现在支持接入 GeoJSON 格式的地图数据,可以把摄像头以图层方式叠加在地图上,点击图标直接弹出实时画面。这个对做集成项目的朋友很友好,因为不需要再自己开发一套地图点位管理。
我整理了一个功能清单,方便你对照自己的项目需求:
| 功能模块 | 3.2.0 支持情况 | 适用场景 |
|---|---|---|
| 国标 GB/T 28181 接入 | 支持,稳定性增强 | 大型项目、公安/政府平台对接 |
| ONVIF 协议接入 | 支持 | 跨品牌设备统一接入 |
| RTSP 拉流 | 支持,可配置拉流策略 | 局域网直连场景 |
| 直播输出 | RTMP / HLS / HTTP-FLV / WebRTC | Web端、移动端、大屏展示 |
| 录像回放 | 支持,按时间轴拖拽 | 事后追溯、证据留存 |
| 云台控制 | 支持(PTZ 指令) | 球机、半球机控制 |
| 电子地图 | 重构升级,支持 GeoJSON | 大范围设备点位管理 |
| 报警联动 | 支持,可自定义联动动作 | 周界入侵、越界检测等工作 |
2. 部署环境与核心配置解析
2.1 服务器选型与依赖环境
SkeyeVSS 是基于 Java 技术栈开发的,后端主体是 Spring Boot,依赖了 MySQL 存储业务数据、Redis 做缓存,还需要 Zookeeper 做服务协调。3.2.0 版本在服务模块上做了一些调整,建议部署前仔细看一下官方文档里的部署要求。
我这边的测试环境配置如下:
- 操作系统:CentOS 7.9(生产环境建议用 Ubuntu 20.04 LTS 或 CentOS 7.9 都行,64 位)
- CPU:8 核(实测 16 路 1080P 接入转发,CPU 占用在 30% 左右)
- 内存:16GB(其中 JVM 堆内存分配了 8GB)
- 硬盘:系统盘 100GB,录像存储盘另行挂载(建议用 SAS 盘或 SSD)
- 网络:千兆内网
依赖的中间件版本要注意一下,MySQL 建议 5.7 以上,Redis 建议 5.x 以上,Zookeeper 用的 3.4.14 版本,版本不匹配会报一些莫名其妙的错。
提示:如果你只是测试,可以在一台服务器上全部装完。但如果要上生产,建议至少把 MySQL、Redis、Zookeeper 和 SkeyeVSS 主程序分开部署,避免相互影响。
部署前需要先安装 JDK。3.2.0 要求 JDK 1.8 及以上,我装的是 OpenJDK 1.8。这里有个坑需要提醒:安装完成后一定要检查 JAVA_HOME 环境变量是否配置正确,很多启动失败的问题都是环境变量没配好导致的。
2.2 关键配置项解读
SkeyeVSS 的主配置文件里有几个参数决定了整套系统的行为,我挑几个重点说一下。
第一个是服务端口配置。默认情况下它监听 8080 端口提供 API 服务,18080 端口做流媒体服务。如果你服务器上跑了其他 Web 服务,要提前规划好端口,避免冲突。另外流媒体服务涉及端口范围的问题,3.2.0 支持配置端口复用(默认是关闭的),如果摄像头数量多,建议开启端口复用,否则每路流要占用一个端口,端口很快就耗尽了。
第二个是 Zookeeper 和 Redis 连接配置。这个比较简单,把地址和端口改成你自己的就行,但要注意密码配置。Redis 一定要设置密码,并且不要用弱密码,否则服务器容易被入侵。我之前做测试的时候偷懒没设密码,结果 Redis 被挖矿程序攻击了,整个服务器卡死,后来花了好几个小时清理,这个教训一定要记住。
第三个是录像存储路径配置。3.2.0 支持按天/按周自动切片存储录像文件,路径可以配置成挂载的独立硬盘目录。如果你打算做长时间录像留存,建议把录像目录放到单独的磁盘分区,并且做磁盘空间监控,一旦空间不足要能自动清理最老的录像文件,避免磁盘写满导致整个平台崩溃。
下面是我整理的一个常用配置参考:
| 配置项 | 推荐值 | 说明 |
|---|---|---|
| JVM 堆内存 | 8GB(按服务器内存调整) | 太小会导致大并发下频繁 GC |
| 流媒体端口复用 | 开启 | 节省端口资源,支持更大规模接入 |
| 录像磁盘预警阈值 | 85% | 达到阈值自动清理最早录像 |
| 国标注册有效期 | 3600秒 | 和摄像头注册心跳保持一致 |
| 播放鉴权开关 | 开启 | 生产环境务必开启,防止流量盗用 |
3. 实操部署与设备接入全流程
3.1 一步步搭建主服务
我以 CentOS 7.9 为例,把从零到摄像头成功出画面的过程过一遍。这套流程我跑了好几遍,按照这个顺序操作基本不会出大问题。
先装基础环境。依赖包用 yum 装就行,JDK 用 tar 包解压方式安装,这样版本可控:
# 安装基础工具 yum install -y wget net-tools telnet # 解压 JDK 到 /usr/local/java mkdir -p /usr/local/java tar -zxvf jdk-8u202-linux-x64.tar.gz -C /usr/local/java/ # 配置环境变量 cat >> /etc/profile <<'EOF' export JAVA_HOME=/usr/local/java/jdk1.8.0_202 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar EOF source /etc/profile # 验证 java -version然后是 MySQL。我直接用了 yum 安装的 MySQL 5.7,装完要初始化数据库并创建 SkeyeVSS 所需的数据库和用户。这里要注意数据库的字符集设置,建议用 utf8mb4,不然设备名称里有中文或特殊字符时可能乱码。
Redis 安装比较简单,编译安装或者直接用 yum 都行。装完记得修改 redis.conf,把 daemonize 改为 yes,设置 requirepass 密码,然后把 bind 改成内网 IP 或 127.0.0.1(如果 Redis 和主程序在同一台机器上)。
Zookeeper 解压后,复制 zoo_sample.cfg 为 zoo.cfg,修改 dataDir 路径,用zkServer.sh start启动即可。
中间件都就绪后,把 SkeyeVSS 安装包上传到服务器,解压。进入 bin 目录,有一个 startup.sh 启动脚本。启动前先把 conf 目录下的 application.yml 改好,主要是数据库连接、Redis 连接和 Zookeeper 地址:
spring: datasource: url: jdbc:mysql://127.0.0.1:3306/skeyevss?useUnicode=true&characterEncoding=utf8mb4&useSSL=false username: skeyevss password: 你的密码 redis: host: 127.0.0.1 port: 6379 password: 你的redis密码 timeout: 10000 skeyevss: zookeeper: addr: 127.0.0.1:2181 media: port: 18080 use-port-range: true启动服务:
cd /opt/skeyevss/bin ./startup.sh第一次启动会初始化数据库表结构,日志里看到Started SkeyeVSSApplication字样就说明启动成功了。然后访问http://服务器IP:8080,用默认账号密码登录后台。
3.2 接入一台海康摄像头(国标方式)
接下来我以海康摄像头通过 GB/T 28181 方式接入为例,这是最常用的接入方式。在摄像头 Web 管理后台找到“平台接入”或“GB28181”配置页,需要填几个关键参数:
- SIP 服务器 ID:SkeyeVSS 平台的国标 ID,一般是 34020000002000000001 这种 20 位数字
- SIP 服务器地址:SkeyeVSS 所在服务器的 IP
- SIP 服务器端口:默认 5060
- 设备 ID:给这个摄像头分配的国标编号,一般是 34020000001310000001 这种格式
- 密码:注册密码,要和平台侧配置一致
在 SkeyeVSS 后台,进入“国标设备”页面,添加一个国标域,填入 SIP 服务器 ID 和密码。添加完成后,摄像头主动向平台发起注册。这个时候可以在后台看到设备的注册状态。如果状态是“在线”,说明注册成功了。接下来在设备列表里找到这路摄像头,点击“播放”测试,如果能出画面,接入流程就走通了。
我第一次配置的时候遇到的问题是摄像头注册不上。排查发现是摄像头和平台的 SIP 服务器 ID 不一致——摄像头的 ID 填错了,平台侧解析不通过。这个 ID 要严格用 20 位数字,而且摄像头侧填的和平台侧创建的要完全一致,不能多一位少一位。
3.3 通过 ONVIF 接入第三方摄像头
如果你的摄像头不支持国标,也没关系,3.2.0 支持 ONVIF 方式接入。ONVIF 是网络摄像机的通用标准,大部分 IPC 都支持。
操作路径是:后台“设备管理”->“添加设备”,选择“ONVIF 接入”,填写摄像头的 IP 地址、ONVIF 端口(默认 80 或 8000)、账号密码。平台会自动探测设备的流媒体地址,然后尝试拉流。如果摄像头开启了 RTSP 认证,需要把 RTSP 账号密码也填上。
ONVIF 方式的关键在于摄像机必须开启 ONVIF 功能。海康的摄像头默认是关闭 ONVIF 的,需要在 Web 后台“安全”->“ONVIF”里先勾选启用。大华的摄像头则默认启用。这个是很多新手容易忽视的环节,设备添加不上先检查这一项。
3.4 前端播放集成
设备接入后,真正要让业务系统用起来,还要在页面里集成播放器。3.2.0 提供了一套标准的取流接口,前端通过 WebSocket 或者 HTTP 获取播放地址,然后交给播放器渲染。
我这边前端用的是 Vue 3 加西瓜播放器(xgplayer)播放 HTTP-FLV 流,效果比较理想。核心流程是:
- 调用 API 创建“会话票据”,拿到一个 playToken。
- 用 playToken 拼接出播放地址,格式类似:
http://服务器IP:18080/live/{deviceId}.flv?token=xxx - 前台播放器加载这个地址。
如果是低延迟场景,用 WebRTC 播放更合适。3.2.0 的 WebRTC 播放地址也是一样格式,把扩展名换成.webrtc就行。浏览器要支持 WebRTC,现在 Chrome、Edge、Firefox 都默认支持,不需要额外安装插件,这一点比老式的 ActiveX 播放控件要友好太多了。
4. 常见问题与排障实战记录
4.1 设备能注册但拉流失败
这个是我在部署中最常遇到的问题,几乎每次项目都会碰到。现象是国标设备在后台显示“在线”,但点击播放一直转圈不出画面。
排查思路按顺序来:第一,检查流媒体服务日志,看是否有 SIP 信令交互记录。如果只有注册消息没有 INVITE 消息,说明是拉流信令没发出去或者被卡住了。这种情况通常是网络问题,检查防火墙是否放行了 UDP 的 5060 端口,以及流媒体服务所用的 RTP 端口范围。
第二,如果 INVITE 消息发出了,但摄像头没响应,很可能是摄像头侧的 SIP 密码和平台不一致,或者摄像头的国标配置里“视频通道 ID”和“设备 ID”混淆了。海康摄像头有些型号要求填“本地 SIP 端口”,和平台的端口不一致时也会拉流失败。
第三,检查是否有防火墙拦截了 RTP 流。GB/T 28181 拉流成功后,视频流通过 RTP 传输,如果防火墙只放行了 TCP 而拦截了 UDP,就会出现“有信令、没有画面”的情况。我在测试环境把防火墙直接关闭后,问题就消失了。生产环境不能用这种粗暴方式,要精确放行端口。
4.2 播放卡顿和花屏
播放卡顿的问题要分内网和外网两个场景来看。
内网卡顿,先看是不是摄像头本身码流太大。有些 400 万像素摄像头默认的主码流码率高达 8Mbps,如果平台服务器硬盘读写速度跟不上,或者网络带宽不够,分发的流就会卡顿。解决办法是在摄像头后台把主码流码率降到 4Mbps 左右,或者平台侧开启转码功能,将原码流转成低码率的分发流。
外网卡顿,重点看服务器的上行带宽。一路 1080P 视频,如果想流畅播放,建议分配 2-3Mbps 的上行带宽。如果同时有 10 路外网播放,就要预留 30Mbps 的带宽。在项目规划阶段,这个带宽预算是必须提前和运营商确认的,否则上线后就会被打措手不及。
花屏问题多数是传输过程中丢包导致的。排查方法是用 ping 测试摄像头到平台的网络丢包率,如果丢包率超过 1%,需要检查交换机端口、网线质量。有一个经验是:不要用劣质网线接摄像头,我有一次花屏查了好几天,最后发现是水晶头松动导致信号异常,换了一根线就好了。
4.3 录像回放找不到文件
录像文件缺失的原因主要有三个。
一是录像计划没配置。SkeyeVSS 默认不会给所有设备开启录像,需要在后台的“录像计划”里为设备指定录像时间段。我习惯的做法是配置成全天候录像,然后根据实际需求再缩减时间。首次配置时很容易漏掉这一步,导致事发后查录像发现什么都没有。
二是存储空间不够。如果磁盘满了,录像写入失败但平台不一定有明确提示。建议在服务器上写一个 crontab 定时任务,每天检查磁盘空间使用率,超过 85% 就自动清理最早一天的录像文件。
三是系统时间和摄像头时间不同步。录像文件的时间戳是由平台系统时间决定的,如果服务器时间不准,回放时候按时间轴拖拽会找不到对应的片段。解决方式是配置 NTP 时间同步服务,让服务器、摄像头都统一时间源。
| 问题现象 | 可能原因 | 排查方法 |
|---|---|---|
| 设备状态显示离线 | 注册超时/网络不通 | 检查 5060 端口、设备 IP 连通性 |
| 显示在线但播放失败 | SIP 密码错误/防火墙拦截 UDP | 查看流媒体日志、检查防火墙规则 |
| 播放画面卡顿 | 码流过大/上行带宽不足 | 压缩码率、调整播放协议 |
| 录像缺失 | 录像计划未配置/磁盘不足 | 检查录像计划、监控磁盘空间 |
| 回放时间轴错乱 | 设备与服务器时间不同步 | 配置 NTP 统一时间 |
4.4 几个容易忽略的细节坑
再分享几个使用 SkeyeVSS 时容易踩的坑,都是我自己亲历过的。
第一,默认密码必须改。SkeyeVSS 后台默认账号是 admin,初始密码是 admin123。上线前一定要改掉,否则平台暴露到公网后,别人可以直接看到你的摄像头画面。这个问题在安全自查时属于高危漏洞,务必要引起重视。
第二,摄像头密码建议设置为强密码。很多摄像头被攻击后成为僵尸网络的一部分,就是因为出厂密码没有修改。项目上曾经有个摄像头被入侵,被用来对外发起 DNS 攻击,导致整个监控网段被运营商封禁,严重影响了项目交付。
第三,升级版本前先备份数据库和配置文件。我做过一次不严谨的升级,把新包直接覆盖到旧目录,结果配置文件被新版本默认配置覆盖,数据库表结构不兼容,折腾了大半天才恢复。升级前把 MySQL 数据目录、application.yml 文件、录像目录都做好备份,再动升级的动作,这是最基本的操作素养。
第四,摄像头时间同步很重要。不仅影响录像回放,还影响报警信息的准确性。如果有报警联动的需求,平台服务器和所有摄像头必须保持时间一致。用 NTP 统一同步是效率最高的方式,手工一个个去配置摄像头时间不现实。
5. 项目落地效果与实际应用心得
部署 SkeyeVSS 3.2.0 这两周,我最大的感受是这个版本在工程化程度上比之前成熟了很多。从设备接入的稳定性、流媒体分发的效率,到 Web 端低延迟播放的体验,都能满足实际项目的要求。我拿 16 路 1080P 摄像头做压力测试,同时在线观看 20 个客户端,CPU 占用没有明显飙升,内存稳定在 6-7GB,整体表现让我比较放心。
实际应用场景里,SkeyeVSS 3.2.0 最有价值的地方是能快速把各品牌的摄像头统一纳管。这次部署的测试环境里接入了海康、大华、宇视三个品牌的设备,加上两台通过 ONVIF 接入的第三方摄像头,全部在一个平台里完成预览、回放、云台控制,省去了多套厂商软件切换的麻烦。对做集成项目的团队来说,这意味着少很多对接成本。
我建议如果你正打算搭建一套中小规模的视频监控平台,或者需要把不同品牌的摄像头统一到一个平台里管理,可以重点考虑 SkeyeVSS 3.2.0。部署前把服务器环境、依赖中间件版本、网络端口规划好,基本上两天内能完成从部署到设备接入的全部流程。如果你们项目对低延迟播放有硬性要求,3.2.0 的 WebRTC 播放能力值得期待。
最后再分享一个我在测试中用得很顺手的技巧:SkeyeVSS 的后台支持 RESTful API,你可以用 Postman 批量导入设备,不用一台一台手动添加。把设备信息整理成 JSON 格式,调用设备管理接口批量录入,几百台设备几分钟就能完成配置,比在后台逐个点快太多。这个技巧在真正做项目时会帮你省下大量时间,尤其是那种几十上百路摄像头的接入场景,效率差距非常明显。
本文还有配套的精品资源,点击获取