1. 为什么GB/T28181对接总在“注册”这一步卡住
海康威视的摄像头和录像机要接入第三方平台,GB/T28181几乎是绕不开的协议。但很多人第一次配的时候,设备状态栏里那个“未注册”三个字能盯一整个下午。我见过太多人把SIP服务器地址填了三遍、端口换了五个,最后发现是设备侧的本地SIP端口和平台侧的下行端口撞了。
先说清楚GB/T28181到底是什么。它是国内视频监控联网的国标协议,核心作用是把不同厂商的摄像头、录像机、平台统一到一套信令体系里。海康的设备对这套协议的支持算是比较完整的,但它的配置界面藏得深,而且不同固件版本的菜单路径还不一样。你如果是第一次接触,建议先把下面这几个概念理顺:
- SIP服务器ID:平台侧的身份标识,通常是20位数字编码,前8位是行政区划代码,中间几位是行业编码,最后是设备类型和序号。海康设备侧填的这个ID必须和平台侧完全一致,差一位就注册不上。
- SIP服务器地址和端口:平台侧的信令接收地址,默认5060。但很多平台会改端口,你要跟平台方确认清楚。
- 设备本地SIP端口:海康设备默认也是5060,但如果平台侧的下行端口也是5060,而设备又和平台在同一网段,就可能出现端口冲突。我一般会把设备侧改成5061或更高的端口。
- 注册密码和有效期:密码是平台侧分配的,有效期决定了设备多久向平台发一次心跳。默认3600秒,如果网络不稳定可以适当缩短。
注意:海康录像机的GB/T28181配置入口在“网络配置-高级配置-平台接入”里,摄像头则在“配置-网络-高级配置-平台接入”。不同固件版本可能叫“GB28181”或“国标28181”,找不到就翻一下“平台接入”这个大类。
我踩过最坑的一次是设备注册上了,但平台侧显示“在线”却看不到视频流。后来抓包发现是媒体流的传输模式选错了。海康设备侧有两个关键选项:TCP还是UDP,以及被动还是主动。平台侧如果要求TCP被动,设备侧就必须选TCP且勾选“被动模式”,否则信令通了但流过不来。这个细节在设备说明书里写得很含糊,但实际对接时是决定成败的。
2. 海康设备侧GB28181参数逐项拆解
2.1 SIP服务器配置里的隐藏逻辑
打开海康设备的平台接入页面,你会看到一堆输入框。别急着填,先搞清楚每个字段背后的逻辑。
SIP服务器ID这个字段,海康设备侧填的是平台的ID,不是设备自己的ID。设备自己的ID在“设备信息”里,通常是一串20位的编码,前10位是厂商编码和设备类型,后10位是序列号。平台侧需要把这个设备ID加到白名单里,否则设备发注册请求平台直接丢弃。
SIP服务器地址填平台的IP,如果是域名就填域名。这里有个坑:海康设备对域名的解析有时候会失败,尤其是DNS服务器没配好的时候。我一般直接填IP,省得排查DNS问题。
SIP服务器端口默认5060,但你要确认平台侧的实际监听端口。有些平台为了安全会改成15060或其他的,填错了设备会一直发注册请求但收不到响应。
本地SIP端口这个字段最容易被忽略。海康设备默认也是5060,但如果平台侧的下行端口是5060,而设备又和平台在同一台服务器上(比如测试环境),就会端口冲突。我一般改成5061或5062,避开常用端口。
注册密码和注册有效期按平台侧要求填。有效期太短会导致设备频繁发心跳,增加网络负担;太长则设备掉线后平台感知慢。我一般设1800秒,折中。
心跳周期和心跳超时次数决定了设备多久发一次心跳、连续多少次没响应就认为断线。默认心跳周期60秒、超时3次,这个组合在大多数网络环境下够用。如果网络抖动大,可以把超时次数调到5次。
2.2 媒体流传输模式的选择依据
海康设备侧有两个下拉框:传输协议和流媒体传输模式。传输协议选TCP或UDP,流媒体传输模式选主动或被动。这四个组合对应不同的网络场景。
| 组合 | 适用场景 | 注意事项 |
|---|---|---|
| TCP+被动 | 设备在NAT后,平台有公网IP | 设备主动向平台注册,平台反向请求流 |
| TCP+主动 | 设备和平台在同一内网 | 设备主动推流到平台指定端口 |
| UDP+被动 | 对延迟敏感且网络质量好 | UDP丢包会导致花屏,慎用 |
| UDP+主动 | 内网测试环境 | 实际生产环境很少用 |
我一般推荐TCP+被动,因为大多数现场设备都在NAT后面,平台侧有固定公网地址。被动模式下,设备注册成功后,平台会通过信令请求视频流,设备再把流推到平台指定的端口。这个模式对防火墙最友好,只需要设备能访问平台的信令端口和媒体端口就行。
提示:如果平台侧要求“主动推送”,设备侧就要选主动模式,并且要填平台侧的媒体接收端口。这个端口和信令端口是两回事,别填混了。
2.3 通道编码和设备ID的对应关系
海康录像机接入GB28181时,每个通道都会映射成一个独立的设备ID。这个ID的生成规则是:设备ID前10位+通道号。比如设备ID是34020000001320000001,第一个通道就是3402000000132000000101,第二个是3402000000132000000102,以此类推。
平台侧需要把这些通道ID都加到白名单里,否则录像机注册上了但通道显示不出来。我见过有人只加了主设备ID,结果平台侧只看到一个通道,其他通道全丢了。这个细节在海康的文档里写得很隐蔽,但实际对接时是必查项。
另外,海康录像机的通道编码可以在“通道管理-通道配置”里看到,每个通道都有一个“通道编号”,这个编号就是GB28181里的通道ID后缀。如果通道编号是1,那通道ID就是设备ID+01;如果是10,就是设备ID+10。注意是两位数字,不是一位。
3. 平台侧对接海康设备的实操链路
3.1 平台侧需要准备什么
平台侧不管是开源的WVP、GB28181-Server,还是商业平台,核心配置就几项:SIP服务器ID、SIP域、SIP端口、媒体端口范围、设备白名单。
SIP服务器ID和SIP域要匹配。比如服务器ID是34020000002000000001,那SIP域就是3402000000。这个域是前10位,平台侧和 stopper设备侧必须一致。
媒体端口范围决定了平台能接收多少路并发流。海康设备每路流会占用一个端口,如果平台只开了100个端口,那最多只能接100路。我一般会开500个端口,从30000到30500,够大多数场景用。
设备白名单是安全机制,只有白名单里的设备ID才能注册。海康设备的ID在“设备信息-设备编号”里能看到,复制过去就行。录像机的通道ID也要加,不然通道出不来。
3.2 注册成功的判断标准
设备侧显示“注册成功”只是第一步。真正的成功标志是:平台侧能看到设备在线,并且能点播视频。
我一般按这个顺序验证:
- 设备侧状态栏显示“已注册”或“在线”。
- 平台侧设备列表里能看到设备ID,状态是“在线”。
- 平台侧点播视频,能出画面。
- 抓包看信令交互,INVITE、ACK、BYE这些消息正常。
如果第1步过了但第2步没过,大概率是设备ID没加到白名单,或者SIP域不匹配。如果第2步过了但第3步没过,就是媒体流的问题,检查传输模式和端口。
3.3 抓包排查的实战技巧
海康设备支持在“网络配置-高级配置-网络抓包”里直接抓包,但更方便的是在平台侧用tcpdump抓。我一般会在平台服务器上执行:
tcpdump -i eth0 -w gb28181.pcap port 5060然后让设备重新注册,抓完用Wireshark打开。重点看REGISTER消息的响应码:200 OK表示注册成功,401或403表示认证失败,404表示服务器ID不对。
如果注册成功但点播没流,就抓媒体端口的包。海康设备默认用RTP传输,看有没有RTP包从设备发过来。如果没有,就是设备侧没推流;如果有但平台没画面,就是平台侧解码问题。
注意:抓包文件可能很大,建议只抓信令端口,媒体端口单独抓。另外,海康设备在注册成功后会有心跳包,心跳包的间隔和超时次数就是设备侧配的那个值。
4. 那些说明书不会告诉你的坑
4.1 固件版本差异导致的菜单错位
海康的设备固件版本更新很频繁,不同版本的GB28181配置菜单路径和字段名称都不一样。我遇到过同一个型号的摄像头,V5.5.0固件里叫“平台接入”,V5.6.0里叫“国标28181”,V5.7.0里又改回“平台接入”但字段顺序变了。
最稳妥的办法是:先升级到最新稳定版固件,然后按“配置-网络-高级配置-平台接入”这个路径找。如果找不到,就在配置页面里搜“28181”或“SIP”。海康的Web界面支持搜索,虽然藏得深但能用。
另外,有些老固件不支持TCP被动模式,只能选UDP。如果你发现设备侧没有“被动”选项,那就是固件太老,升级吧。
4.2 录像机双网口带来的路由问题
海康录像机很多是双网口的,一个口接内网摄像头,一个口接外网平台。这时候GB28181的信令走哪个口、媒体流走哪个口,就很容易出问题。
默认情况下,录像机会根据路由表决定走哪个口。如果平台在公网,录像机就会走默认网关那个口。但媒体流可能走另一个口,导致平台收不到流。
解决办法是在“网络配置-基本配置-TCP/IP”里,把平台所在的网段加到静态路由里,指定走哪个网口。或者更简单:只用一个网口,另一个口不插线。虽然浪费了一个口,但省去了路由排查的麻烦。
我一般会在测试阶段先用单网口跑通,再根据实际需求决定要不要配双网口。如果非要双网口,就在“网络配置-高级配置-路由配置”里加静态路由,把平台的IP段指向正确的网口。
4.3 通道编码重复导致的“幽灵通道”
海康录像机接入GB28181时,如果两个通道的通道编号相同,平台侧就会出现“幽灵通道”——一个通道ID对应两路视频,点播时随机出一路。
这种情况通常发生在批量配置通道时,有人复制粘贴忘了改编号。解决办法是在“通道管理-通道配置”里逐个检查通道编号,确保每个通道的编号唯一。如果通道很多,可以用海康的批量配置工具,导出通道列表后在Excel里检查重复项。
另外,录像机的IP通道和模拟通道如果编号冲突,也会出现这个问题。IP通道的编号通常从1开始,模拟通道从33开始,但有些固件版本会乱。我一般会把IP通道编号设成1-32,模拟通道设成33-64,避开冲突。
4.4 平台侧时间同步的隐形影响
GB/T28181协议里,注册和心跳消息都带时间戳。如果设备侧和平台侧的时间差超过一定范围,平台会拒绝注册。这个范围通常是5分钟,但有些平台会严格到1分钟。
海康设备默认从NTP服务器同步时间,但如果NTP服务器不可达,设备时间就会漂移。我一般会在设备侧手动配一个可靠的NTP服务器,或者直接在平台侧也配同样的NTP,确保两边时间一致。
如果现场没有NTP服务器,就在设备侧手动设时间,然后定期检查。我见过一个现场因为设备时间慢了10分钟,注册一直失败,排查了一下午才发现是时间问题。
5. 从注册成功到稳定运行的调优经验
5.1 心跳参数的动态调整
设备注册成功后,心跳包就是维持在线状态的唯一手段。海康设备侧的心跳周期默认60秒,超时次数默认3次。这意味着如果连续3个心跳包(180秒)没收到响应,设备就会重新注册。
在网络不稳定的现场,我一般会把心跳周期调到30秒,超时次数调到5次。这样设备能更快感知到断线并重连,同时避免因为偶发丢包就误判断线。
但心跳周期太短也会增加平台负担。如果平台接了几千路设备,每30秒一次心跳,信令服务器的压力会很大。所以这个参数要根据实际规模权衡。我一般建议:500路以下用30秒,500路以上用60秒。
5.2 媒体流传输的带宽估算
海康摄像头的主流码率是2Mbps到4Mbps,1080P的通常4Mbps,720P的2Mbps。如果平台要接100路1080P,那媒体流的带宽就是400Mbps。这个带宽是单向的,从设备到平台。
实际规划时,我一般会按码率的1.2倍估算,留出信令和重传的余量。所以100路1080P需要480Mbps的带宽。如果平台侧和 stopper设备侧不在同一内网,这个带宽就是专线或互联网带宽的需求。
另外,如果平台侧要做录像存储,还要考虑存储带宽。海康录像机本身可以存,但平台侧如果也要存,就是双份带宽。我一般建议平台侧只做转发和实时预览,存储交给录像机或专门的存储服务器。
5.3 设备批量接入的自动化思路
如果现场有几百台海康设备要接入GB28181,一台台配肯定不现实。海康提供了批量配置工具,可以通过网络批量修改设备的GB28181参数。
具体做法是:先用海康的SADP工具搜索到所有设备,导出设备列表,然后在Excel里填好SIP服务器地址、端口、密码等参数,再导入批量配置工具,一键下发。
但批量配置有个坑:不同型号的设备支持的参数不一样。比如有些老摄像头不支持TCP被动模式,批量下发时如果选了TCP被动,这些设备就会配置失败。所以批量配置前,要先按型号分组,每组用不同的配置模板。
另外,批量配置后要逐个验证注册状态。我一般会写个脚本,通过海康的ISAPI接口查询每台设备的注册状态,把未注册的设备筛出来单独处理。
5.4 平台侧对接海康设备的兼容性清单
不同平台对海康设备的兼容性差异很大。我整理了一个常见的兼容性清单,供参考:
| 平台类型 | 海康摄像头 | 海康录像机 | 注意事项 |
|---|---|---|---|
| WVP开源平台 | 支持良好 | 支持良好 | 需要配好SIP域和端口 |
| GB28181-Server | 支持良好 | 部分版本有bug | 录像机通道ID要手动加 |
| 商业平台A | 支持 | 支持 | 需要平台侧开白名单 |
| 商业平台B | 支持 | 不支持 | 录像机只能当摄像头用 |
这个清单不是绝对的,具体还要看平台版本和海康固件版本。我一般会在正式接入前,先用一台设备做兼容性测试,跑通了再批量接入。
6. 几个真实场景的排查记录
6.1 注册成功但点播黑屏的排查过程
有一次现场反馈:海康摄像头注册上了,平台侧显示在线,但点播视频是黑屏。我先在平台侧抓包,发现INVITE消息发出去了,设备也回了200 OK,但之后没有RTP流。
然后我去设备侧看配置,发现传输模式选的是UDP主动。但平台侧要求的是TCP被动。改成TCP被动后,点播正常。
这个问题的根因是:UDP主动模式下,设备会主动往平台侧推流,但平台侧没开对应的媒体端口,所以流被丢弃了。TCP被动模式下,平台侧先发INVITE请求流,设备再推,端口是平台侧指定的,就不会丢。
6.2 录像机通道时有时无的排查过程
另一个现场:海康录像机接入后,平台侧有时能看到8个通道,有时只能看到4个。我检查了录像机的通道配置,发现通道编号有重复:第5通道和第13通道的编号都是05。
平台侧按通道ID去重,重复的通道ID只保留一个,所以有时显示8个有时显示4个,取决于哪个通道先注册。
解决办法是把第13通道的编号改成13,确保所有通道编号唯一。改完后平台侧稳定显示16个通道。
6.3 设备频繁掉线的排查过程
有个现场设备每隔几分钟就掉线一次,然后自动重连。我看了平台侧的心跳日志,发现设备的心跳包间隔不稳定,有时30秒有时90秒。
去设备侧看配置,心跳周期设的是60秒,但设备CPU占用率很高,导致心跳线程被延迟。后来发现是设备同时开了太多功能:智能分析、人脸检测、车牌识别全开着,CPU跑满了。
关掉不必要的智能功能后,心跳稳定了,掉线问题解决。这个问题的教训是:GB28181的心跳依赖设备的系统资源,如果设备本身负载高,心跳就会不稳定。所以接入GB28181的设备,最好只跑视频编码和网络传输,其他功能能关就关。
7. 关于GB/T28181对接的几点个人体会
海康设备的GB28181对接,说到底就是三件事:信令通、媒体通、状态稳。信令通靠的是SIP参数配对准,媒体通靠的是传输模式选对,状态稳靠的是心跳参数调好。
我这些年对接下来,最深的体会是:别迷信默认值。海康设备的默认参数是给通用场景用的,但每个现场的网络环境、平台要求、设备规模都不一样。默认的5060端口、60秒心跳、UDP传输,在很多现场都会出问题。
另一个体会是:抓包是终极手段。设备侧的状态栏、平台侧的日志,都可能骗你。只有抓包看到实际的信令交互和媒体流,才能定位到根因。我一般会在测试阶段就抓包,把正常的信令流程存下来,后面出问题时对比着看,很快就能找到差异。
最后说一个细节:海康设备的GB28181配置页面,改完参数后一定要点“保存”,然后重启设备。有些参数是重启后才生效的,不重启的话配置看起来改了但实际没生效。我见过有人改完参数直接测试,结果一直不成功,重启后就好了。这个坑踩一次就够了。