SkeyeVSS 3.2.0视频监控平台部署实战:从设备接入到流媒体分发
简介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 / WebRTCWeb端、移动端、大屏展示录像回放支持按时间轴拖拽事后追溯、证据留存云台控制支持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 位CPU8 核实测 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?useUnicodetruecharacterEncodingutf8mb4useSSLfalse 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 服务器 IDSkeyeVSS 平台的国标 ID一般是 34020000002000000001 这种 20 位数字SIP 服务器地址SkeyeVSS 所在服务器的 IPSIP 服务器端口默认 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?tokenxxx前台播放器加载这个地址。如果是低延迟场景用 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 格式调用设备管理接口批量录入几百台设备几分钟就能完成配置比在后台逐个点快太多。这个技巧在真正做项目时会帮你省下大量时间尤其是那种几十上百路摄像头的接入场景效率差距非常明显。本文还有配套的精品资源点击获取
