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就是设备ID01如果是10就是设备ID10。注意是两位数字不是一位。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到4Mbps1080P的通常4Mbps720P的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配置页面改完参数后一定要点“保存”然后重启设备。有些参数是重启后才生效的不重启的话配置看起来改了但实际没生效。我见过有人改完参数直接测试结果一直不成功重启后就好了。这个坑踩一次就够了。
