☰
用SmartEyes搭建免费GB28181监控平台,海康设备接入避坑指南
2026/10/2 6:48:25 网站建设 项目流程

做视频监控这行,最怕的不是摄像头坏了,而是设备品牌太杂,平台各自为政。前阵子接了个项目,甲方预算卡得很死,却要求把好几个不同品牌、不同楼栋的摄像头统一接到一个监控平台里集中查看,还要预留后期扩展回放和告警的能力。看了几家商业监控平台,一年授权费就够买好几台摄像机了,后来决定自己动手,用 SmartEyes 搭一套免费的 GB28181 监控平台。

那几天从服务器部署到海康设备接入,注册失败、不出流、语音对讲没声音,各种问题轮着来。踩完坑之后我把整个流程重新梳理了一遍,今天这篇就按“部署-平台配置-设备接入-避坑”的顺序写给你,照着做基本能一次过。不管你是做集成项目的工程师,还是自己店里想统一管理几个摄像头,这篇都能给你省下不少试错时间。

1. 为什么我最终选了SmartEyes

1.1 市面上的GB28181平台,都卡在哪儿了

GB28181全称是《安全防范视频监控联网系统信息传输、交换、控制技术要求》,简单说就是一套让摄像头、NVR、监控平台之间能“互相通话”的国家标准协议。有了它,海康的摄像头可以注册到非海康的平台上,大华的NVR也能把视频流推给第三方平台,设备不再是某个品牌闭环里的“私有品”。

但真到了选型阶段,你会发现市面上的GB28181平台大概分三类:第一类是商业平台,功能全、稳定性好,但按路数收费,几十路摄像头一年下来费用不低;第二类是各厂商自家的平台,比如海康的iVMS、大华的ICC,接自家设备没问题,但要想把其他品牌也纳进来,配置繁琐,而且部分功能只对自家设备开放;第三类就是开源或者免费的GB28181服务,功能上可能没有商业版那么花哨,但核心的注册、取流、直播、录像都齐活,胜在可以自己掌控。

我最终选SmartEyes,原因有三个:一是部署简单,官方提供了Docker镜像,一条docker compose命令就能把整套服务拉起来,不用像部分开源项目那样手动编译几个小时,一度让我怀疑是不是漏了什么步骤;二是文档和社区相对完整,配置界面是中文的,对国内用户友好;三是它把SIP信令和流媒体服务打包在一起,不需要再单独去装ZLM、SRS之类的媒体服务,省去了很多联调工作。对中小型项目来说,这已经足够能打。

1.2 SmartEyes的核心架构

SmartEyes这套平台的核心思想,是把“信令”和“媒体流”分开处理。

信令走SIP协议,负责设备注册、心跳、录像回放控制、云台控制这些“指挥”工作。平台启动时会启动一个SIP服务,默认端口是5060,同时监听UDP和TCP。海康的摄像头、NVR在配置好GB28181参数后,会定时向这个SIP服务发起注册请求,注册成功后在平台端就能看到设备状态变成“在线”。

媒体流走的是另一条通道。当你在平台端点击预览某路通道时,平台会通过SIP信令向设备发起INVITE请求,设备收到后会把RTP音视频流推送到平台指定的媒体服务端口。平台再把这个RTP流转封装成RTSP、HTTP-FLV或者HLS流,推给前端播放器展示。这个过程用一句话概括就是:SIP负责“喊话”,RTP负责“送货”,两者互不干扰。

明白了这一点,后面排查问题就有方向了——注册不上先查信令通道,能注册但不出流就查媒体通道,再往后就是端口和网络的问题了。

1.3 免费方案的成本账

说完优势再说说成本。SmartEyes本身是免费的,但免费不代表零成本。你需要一台能7×24小时运行的服务器,最低配置建议2核4G内存、40G硬盘起步,带宽根据摄像头路数来定。如果只接几路摄像头,家用宽带的公网IP就够用;如果要接几十路,建议上云服务器或专线。

硬盘是另一个成本大头。如果只做实时预览不录像,那硬盘需求不大;但如果要录像回放,就要规划存储。一路1080P摄像头在码率4Mbps的情况下,一天录像大约43GB左右, 这个数字乘上路数再乘上保留天数,就是你需要的存储空间。我建议平台和工作目录放到一块独立的SSD系统盘上,录像存储挂独立机械盘或NAS,避免录像写入拖垮系统盘性能。

把这一套算下来,整体投入也就是一台服务器加几块硬盘的钱,相比商业平台按路数收授权费的模式,长期来看确实划算不少。

2. 搭建前的准备工作

2.1 服务器和系统要求

SmartEyes对服务器的要求不高,但有几个硬性条件必须满足,不然后面调试会很难受。

操作系统建议用Ubuntu 20.04以上或者CentOS 7.9,64位系统。服务器要有固定的IP地址,如果摄像头和平台在同一个局域网,用内网IP就行;如果需要远程接入,平台服务器必须要有公网IP,或者在路由器上做端口映射。我在这里踩过坑:一开始图省事把平台部署在办公室内网,结果海康设备在另一个城市,怎么注册都失败,后来把服务器的SIP端口和媒体端口映射到公网,才正常注册上。

内存方面,2G是下限,4G比较稳。因为SmartEyes的流媒体服务在转码和分发时会占用内存,如果同时预览的路数多,内存不足会导致服务崩溃。我当时用一台2核4G的云主机,接8路海康摄像头,同时预览4路,CPU和内存都还有富余,日常使用没问题。

关于系统端口,你需要提前在防火墙和安全组里放行以下端口,这件事最好在部署前做,否则服务起来了才发现访问不通,还要来回排查:

用途端口协议
SIP信令5060UDP/TCP
Web管理界面8080TCP
API接口8081TCP
HTTP-FLV/RTSP流媒体10000-20000UDP/TCP
HLS流媒体80或自定义TCP

注意,流媒体端口是一段范围而不是单个端口,因为每路视频流都会占用一个临时端口,范围太小会导致同时预览的路数受限。我建议在安全组里直接放行这个段,省得后面为某个端口单独加规则。

2.2 安装Docker环境

SmartEyes推荐用Docker方式部署,这能让整个服务环境保持独立,不污染宿主系统,升级和回滚也方便。Docker的安装过程不复杂,按官方文档来就行。

如果是Ubuntu系统,安装Docker和docker-compose插件一般就是几条命令的事情。装好之后记得验证一下版本:

docker --version docker compose version

如果这两条命令都能正常输出版本号,说明Docker环境已经就绪。

这里有个经验分享:国内服务器拉取Docker Hub镜像经常很慢,甚至超时。我当时的做法是在/etc/docker/daemon.json里配置了镜像加速地址,然后重启Docker服务让它生效。如果你也遇到镜像拉取卡住的问题,优先检查是不是这一步没做。

2.3 下载并一键部署SmartEyes

SmartEyes官方仓库里提供了docker-compose.yml示例文件,把整个服务栈的描述写在一个文件里。部署时在服务器上创建一个目录,比如/opt/smarteye,然后把docker-compose.yml放进去,执行:

docker compose up -d

通常要等一下拉取镜像,镜像包含SIP服务、媒体服务、Web管理界面这几个核心组件。看到所有容器状态为Up,就算部署完成了。整个过程基本属于“一键部署”的范畴,这也是SmartEyes比一些需要手动编译多个模块的开源项目更好上手的原因。

容器起来后,访问http://服务器IP:8080,应该能看到SmartEyes的管理界面。首次登录默认账号密码需要在初始化页面设置,设置好之后进入系统,先别急着添加设备,下面这步配置非常重要,直接决定了海康设备能不能顺利注册进来。

3. 平台侧必须配置好的几个参数

3.1 SIP服务器ID、域、端口

GB28181协议里,每个设备、每个平台都有一个唯一的国标编码,长度是20位数字。编码规则大概是这样的:前8位是行政区划代码,比如340200是安徽某市的区划代码;接着2位是业务类型;剩下10位是序号。平台侧的SIP服务器ID通常会设置成一个固定的值,例如34020000002000000001,其中最后8位以“0000”开头作为平台标识。

在海康设备里配置GB28181时,要填的SIP服务器ID就是你这个平台的编码。SIP服务器域默认可以用ID的前10位作为域,比如3402000000,但有些平台允许自定义域,只要设备侧和平台侧保持一致就行。说白了,ID和域的作用是让设备能准确找到平台并确认这是“自己人”,配置时候的值必须跟平台侧完全一样,多一位少一位都不行。

端口默认是5060,同时监听UDP和TCP。我建议在海康设备里优先选UDP注册,因为海康对TCP的支持在不同固件版本里表现不太一致,UDP相对稳定一点。等注册上了,再测试TCP是否正常也可以。

3.2 组织与设备分组

SmartEyes里添加设备之前,最好先规划一下组织结构和通道分组。这步看着不起眼,但后面摄像头多了以后区别很大。

平台一般支持多级组织,比如“总部-厂区-A栋-1层”这样的树形结构。你可以先创建好各级组织,再把摄像头挂到对应的组织下,这样管理起来一目了然,播放时也能按组织批量选择。

我在实际操作里的做法是:先建“组织架构”,然后在每个组织下创建“通道分组”,最后把设备通道关联到对应的分组。如果一开始不建分组直接把所有通道都挂在根节点,几十路摄像头一多,列表拉起来非常混乱,后续做权限和录像策略也麻烦。

这和整理电脑文件夹是一个道理——设备少的时候随便放都行,设备多了没有结构就是灾难。

3.3 用户与权限配置

如果这个平台只有你自己用,那默认管理员账号就够。但如果要给同事或者甲方开账号,建议在系统里创建操作员用户,并分配不同的权限。

SmartEyes的权限模型一般包含设备查看、播放、云台控制、录像回放、系统设置几个维度。我通常这样分:普通运维人员只给设备查看和播放权限,云台控制和系统设置只留给管理员,避免有人误操作把谁摄像头角度给转了。这些权限在用户管理界面里勾选即可,创建用户时绑定角色,逻辑清晰,没什么难度。

有一点要提醒:默认密码一定要改,且密码强度不要太弱。GB28181平台的SIP注册本身是带密码校验的,但如果你把SIP密码和Web登录密码都设置成123456,那设备基本就是裸奔状态,别人知道你的国标编码后完全可以拉走你的视频流。

4. 海康设备接入实录

4.1 海康设备侧如何配置GB28181

海康摄像机和NVR的GB28181配置入口略有差异,但整体思路一致。以常见的海康摄像机为例,路径是:Web登录设备 -> 网络 -> 高级设置 -> 平台接入,然后在“平台接入方式”里选择GB/T 28181。

进入配置页面后,需要填写以下核心参数:

参数名称配置说明示例值
SIP服务器ID填写平台侧的国标编码34020000002000000001
SIP服务器域填写平台侧的域3402000000
SIP服务器地址平台服务器的IP或域名192.168.1.100
SIP服务器端口默认50605060
设备ID这台设备在国标中的编码34020000001321000001
设备密码设备向平台注册时使用的密码自定义
注册有效期默认3600秒3600
心跳周期建议设置60秒60
传输协议建议UDPUDP

这里有几个关键细节:设备ID是设备自己的国标编码,不是平台的SIP服务器ID,很多人第一次配置容易搞混。如果摄像机画面只需要一路,可以直接用设备ID作为通道编码;如果是海康NVR接入多路摄像头,通道编码会按照通道号依次排列,比如设备ID是34020000001321000007,通道1的编码就是34020000001321000007后面再拼接通道标识,具体格式要参考海康的说明。

设备密码要和平台侧添加设备时填写的密码完全一致。这个密码是“设备->平台”注册时使用的认证密码,不是海康设备的登录密码,别搞混。

填完这些参数后点击保存,海康设备会自动向平台发起注册。如果一切正常,稍等几秒后平台端就能看到该设备状态变为“在线”。

4.2 平台侧添加设备

在SmartEyes管理界面的“设备管理”里,点击“添加设备”,输入设备名称、设备编码、密码,选择所属组织,保存即可。这里输入的设备编码就是上面在海康设备里填的那个“设备ID”,密码也是对应的“设备密码”。

保存之后,平台会自动向设备发起目录请求,把设备的通道信息同步过来。同步完成后,你会看到在设备下面出现了对应的通道,每条通道包含一个状态信息,比如“在线”“离线”“缺失”等。

需要注意,设备注册成功不等于通道就绪。有时候设备状态已经是“在线”了,但通道还没有同步过来,这时候可以在平台上手动发起“目录请求”或者“目录订阅”,强制设备重新上报通道列表。这一步经常被忽略,很多人看到设备在线但通道列表是空的,就以为是设备坏了,实际上只是目录同步的问题。

4.3 验证视频流

通道同步完成后,就可以测试实时视频了。在平台的通道列表中点击“播放”,如果网络正常,应该是秒开。SmartEyes默认会优先使用UDP传输方式取流,如果设备端网络质量不好,可能会持续黑屏,这时可以在设备端把传输协议改成TCP再试。

还有一种验证方式,直接用VLC播放平台暴露的RTSP流地址,格式大概是rtsp://服务器IP:端口/路径。如果VLC能正常播放,说明整个链路没问题,播放器黑屏大概率是前端播放器兼容性或者浏览器编码的问题,不要再去折腾设备端了。

验证结束之后,记得在平台里把通道名称改成更直观的名字,比如“大门东侧-3号机”,而不是一串看不懂的编码。一个小动作,后面用起来省心得多。

5. 海康设备接入避坑指南

5.1 注册不上?先查这5项

海康设备接入GB28181平台,遇到最多的问题就是注册失败,设备状态一直是“离线”。我总结了一套排查顺序,按照这个顺序来,基本能在几分钟内定位问题。

第一,检查SIP服务器ID是否一致。海康设备里填的“SIP服务器ID”必须是平台侧的国标编码,而不是设备自身的设备ID。这两个ID长度相同、格式相似,非常容易填反。确认一下你是在海康设备里填了平台的编码,同时在平台里添加设备时填了设备的编码。

第二,检查SIP服务器域。海康新固件对域字段的校验比较严格,如果域和平台侧不一致,注册请求会被平台拒绝。建议把域设置成SIP服务器ID的前10位,这是一般默认规则。别小看这个字段,我遇到过最隐蔽的坑就是域少了一位数字,导致反复注册失败。

第三,检查端口和网络。从设备所在的网络,telnet一下平台的5060端口是否通。如果设备在内网、平台在云上,必须确保云安全组和服务器防火墙都对5060端口放行了UDP和TCP。很多云服务器默认只开放80和443,5060端口没放行,注册包根本到不了平台。

第四,检查密码是否正确。海康设备里设置的“设备密码”要和平台侧添加设备时填写的密码完全一致。注意这个密码是独立的,不是海康设备的Web登录密码。我在调试时经常遇到客户把两者混为一谈,排查好久才发现是密码不对。

第五,检查设备时间。GB28181协议对时间同步有要求,设备时间与平台时间偏差过大,注册请求可能被平台判定为无效。建议让设备和平台都开启NTP时间同步,用同一个时间源。这个问题在日期接近跨年时特别容易出现,设备时间还停留在上一年,注册就是成功不了。

5.2 视频不出流?大概率是这些原因

注册成功但预览黑屏,这是第二大类问题。能注册说明信令通道是通的,视频不出流说明媒体通道出了问题。

最常见的原因是RTP端口不通。设备推流时会向平台的某个UDP端口发送RTP数据包,这个端口是从平台配置的媒体端口段里随机分配的。如果平台服务器的防火墙或云安全组没有放行这个端口段,视频流就会被丢在路上,信令一切正常但画面永远不出来。解决方法是把整个媒体端口段都放行,而不是一个个去开放。

第二大原因是NAT和RTP端口映射问题。如果设备在私网内,平台在公网上,设备向平台推送的RTP流方向是“内网->公网”,这会涉及NAT穿透。海康设备GB28181配置页里通常有“视频流推送模式”或者“RTP端口”相关选项,建议选择“TCP被动模式”或者“UDP根据端口映射”,具体取决于你的网络结构。最简单的做法是在同一局域网内先做通测试,再去处理跨公网的场景。

第三个原因是码流类型设置问题。海康设备在GB28181接入时,可以选择推送主码流还是子码流。主码流清晰度高但码率大,子码流适合预览但清晰度有限。如果通道配置使用了“复合流”而平台不支持,也可能会黑屏。我建议实时预览优先用子码流,录像或者回放再用主码流,这样既保证流畅性又减少带宽压力。

5.3 避坑要点速查表

把前面说的这些坑整理成一张表,方便你排查时对照:

现象可能原因排查方法
设备一直离线SIP服务器ID/域填错核对国标编码和域的一致性
设备一直离线5060端口不通从设备网络telnet平台5060端口
设备一直离线密码不一致核对设备密码与平台密码
设备一直离线时间不同步开启NTP,统一时间源
在线但通道为空目录未同步手动触发目录请求/订阅
在线可注册但黑屏RTP媒体端口不通放行10000-20000端口段
在线可注册但黑屏NAT穿透失败局域网先做通,再跨公网
在线可注册但黑屏码流类型不兼容切换主/子码流,改用复合流
画面卡顿严重上行带宽不足降低码率,切换到子码流
语音对讲无声音未开启音频编码开启设备音频开关,选G.711A

这张表我打印了一份贴在工作台上,每次接入新设备先对照做一遍,效率提升非常明显。要说技术含量,倒没有多高,但这些东西都是一个个实际问题踩出来的,骨子里全是经验。

6. 进阶玩法:语音对讲和服务器资源监控

6.1 启用GB28181语音对讲

GB28181语音对讲是平台里一个比较实用的功能,尤其是门卫呼叫、指挥调度这类场景。对讲的方向是平台向设备播放语音或者双向对讲,信令流程和实时取流类似,但走的是“语音广播”和“语音对讲”两个消息。

在海康设备侧,需要先在设备配置里开启音频选项。海康某些型号默认关闭了音频编码,或者只开启了拾音但没开启扩音,对讲时就会出现“对方听不见我”的情况。建议在设备Web端检查音视频配置,确认音频输入和音频输出都处于开启状态,编码格式选择G.711A或者G.711U,这是GB28181协议里最常用的两种音频编码。

平台侧配置语音对讲时,要注意编码格式和设备保持一致。如果平台发送的RTP音频流是AAC编码,而设备只支持G.711,对讲就会失败。SmartEyes在对讲设置里一般会让用户指定音频编码格式,就选G.711A最稳妥。另外,语音对讲需要平台与设备之间的网络链路相对稳定,延迟低于500ms体验才说得过去。如果对讲有啸叫,检查一下音频增益是否过高,或者设备端扬声器音量是否太大。

6.2 用Prometheus监控平台服务器资源

平台跑起来之后,服务器的CPU、内存、磁盘状态就是长期关注的重点。摄像头一多,流媒体服务压力上来了,服务器资源不够用的情况早晚会出现。我习惯在服务器上部署Prometheus + node_exporter这套监控栈,来实时盯住平台所在服务器的资源消耗。

node_exporter负责采集服务器的基础指标,用一条命令就能启动。Prometheus负责把采集到的指标存起来,并在CPU、磁盘空间超过阈值时发告警。在Prometheus配置里加上节点采集任务,指向node_exporter的9100端口即可。

反过来,SmartEyes平台自身也会产生一些指标,比如在线设备数、推流路数、信令请求成功率。把这些指标接入Prometheus,配合Grafana做一个可视化面板,就能很直观地看到平台运行状态。测试下来,这套监控对系统的额外开销几乎可以忽略不计,但带来的价值非常明显——有一次半夜设备大规模掉线,如果不是监控告警及时推送,我可能到第二天早上才知道。

7. 最后分享一点我的经验

整套平台跑通之后,我自己最满意的是把这个流程固定成了标准操作文档,以后再接新设备完全照着走,不用再从头摸索。这里分享几个实操习惯,你可以直接采纳。

第一个习惯是每次接入新品牌设备前,先在一台局域网内的测试设备上把配置流程跑通一次,再上生产环境。这样万一配置有问题,影响的只是测试设备,不会把正在录着像的生产通道搞挂了。

第二个习惯是定期备份SmartEyes的配置目录。整个平台的设备信息、组织架构、通道映射都在里面,用docker部署的话直接把配置目录打个tar包就能备份。恢复时换一台新的服务器,docker compose拉起来,恢复配置目录,整个平台就回来了,不用重新挨个添加设备。

第三个习惯是给所有摄像头建一个命名规范,比如“位置-用途-序号”,同时在平台通道名称和设备本身保持一致。这样即使哪天平台数据库出了问题,重新添加设备时也能对着清单快速操作,不会两眼一抹黑。

按照这套流程,一台海康设备从配置到正常出画,熟练之后五分钟内就能完成。免费的GB28181平台并不是什么高不可攀的东西,只要把原理摸透、把坑避掉,它完全可以承担起中小型监控项目的重担。这套方案我已经实际跑了小半年,在线率一直保持在99.9%以上,稳定性和易用性都超出了我最初的预期。留给你的唯一问题,就是动手试一版了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询