尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

GB28181接入海康NVR/摄像头注册不上?排查与抓包实战指南

GB28181接入海康NVR/摄像头注册不上?排查与抓包实战指南 做LiveGBS或者其它GB/T28181国标平台调试的朋友应该都有过这种经历海康NVR或者摄像头上的“平台接入”参数翻来覆去检查了好几遍也重启了设备但LiveGBS控制台里“设备列表”始终空白连一个设备名字都没冒出来。如果这台摄像头还是靠内置物联网卡上网的那排查难度直接翻倍既要怀疑平台配置又要怀疑运营商网络还得会抓包验证。这篇文章就专门聊这个场景的排查思路LiveGBS这类GB/T28181国标平台接入海康NVR或带物联网卡的摄像机出现“注册不上”“看不到设备”时到底怎么一步步定位、怎么抓包、怎么分析。先说个概念。GB/T28181平台并不是像ONVIF那样“扫一下就能发现”的设备纳管模式它更像一个标准的SIP电话系统摄像头作为SIP客户端UA主动向SIP服务器发起注册注册成功后再通过目录查询把通道列表上报给平台。整个链路其实可以拆成三件事设备能不能和平台服务器正常发起SIP注册注册鉴权能不能通过注册通过后设备能不能正确上报自己的目录通道平台又能不能解析出这些通道。这三件事环环相扣任何一环断了表现到界面上就是“看不到设备”只是断点不同解决思路完全不同。所以在排查之前先不要急着怀疑“设备是不是坏了”或者“平台是不是有问题”按照链路往下捋才比较快。1. 先搞清楚“GB/T28181注册不上”到底卡在哪一环1.1 GB28181平台的工作链路为了后续抓包分析不懵简单回顾一下国标平台和设备之间的信令交互过程。标准场景下设备侧海康NVR或物联网卡摄像机配置好平台接入信息后会主动向SIP服务器发送REGISTER请求注册这个请求默认走UDP 5060端口。SIP服务器收到REGISTER后正常会回401 Unauthorized要求客户端用摘要认证Digest Authentication做身份验证。设备拿到401后带着用户名的MD5摘要再次发送REGISTER。SIP服务器校验通过后回200 OK。到这里设备的“注册状态”才算真正建立界面上的在线列表才可能看到它。但“注册成功”不等于“看到通道”。注册完成后SIP服务器还要向设备发送目录查询请求通常是一条MESSAGE或者CATALOG查询设备响应后把通道列表、通道编码、云台参数等信息封装在SIP消息体里上报。平台解析这个列表后才会在界面上把通道一个个列出来。如果你把整个流程想通就会发现“看不到设备”其实只有几种可能设备的REGISTER根本没有到达平台REGISTER到了但鉴权失败平台直接把设备踢了注册其实成功了但设备的目录查询请求或者响应异常平台列表刷新不出来目录上报了但平台解析不了比如编码格式不对、通道ID和域不匹配控制台照样看不到。1.2 “看不到设备”的三个层级实际排障需求里用户嘴里说的“看不到设备”其实包含三种不太一样的情况必须区分开否则后面做什么都容易跑偏。第一种是“完全看不到设备”连在线状态都没有。这种情况大概率问题在注册链路本身设备压根没上线。要么是网络不通要么是SIP参数配置错误要么是平台没有正确监听SIP端口。第二种是“设备列表上能看到NVR但点进去没有通道”这种情况说明NVR本身的注册成功了但目录上报环节出了问题。常见原因包括通道编码格式不对、NVR里没有添加任何通道、或者平台对目录消息体解析失败。第三种是“设备和通道都能看到但点播放一直黑屏拉流转圈”这种情况注册和目录都正常多媒体协商或端口映射出了问题。尤其是带物联网卡的摄像头最容易在这一步翻车信令通了但媒体流回传却因为NAT或端口问题断了。所以当你接到一个“看不到设备”的求助时第一句话应该问清楚到底是“列表里完全没有”还是“有设备没通道”还是“有通道不出流”。这三种情况对应三套完全不同的排查思路别混在一起。2. 带物联网卡的摄像头为什么更容易“注册不上”如果说在局域网里部署28181平台是“新手村”那物联网卡摄像头接入就是“地狱模式”。为什么这么说物联网卡的网络环境和普通宽带完全不一样它对SIP信令和媒体流的影响非常大。普通宽带下摄像头一般有独立的公网IP或者至少能通过路由器端口映射让平台找到它。但物联网卡走的是运营商专网摄像头拿到的基本是运营商分配的私网地址或CGNAT后的地址也就是说设备本身并没有从公网可达的IP。GB28181是基于SIP的主动注册协议设备主动往外连这个特性本来可以在一定程度上规避NAT问题但同时又引出了很多细节坑。2.1 物联网卡网络的特殊性和NAT问题先讲清楚物联网卡对通信模式的改变。设备插着物联网卡用的是LTE/5G网络接入运营商网关会做网络地址转换NAT。这意味着几件事一是SIP消息里的Contact头、SDP中的IP地址很可能是设备侧私网地址而不是平台看到的公网地址。平台如果按照SDP里的私网地址去回连媒体流必然连不上。二是运营商对端口的限制。很多物联网卡套餐或者专网策略会限制非标准端口、或者对常用业务端口包括UDP 5060做限制导致REGISTER消息发出去之后石沉大海。三是长连接保活问题。SIP注册有有效期设备默认会定时续租但运营商NAT会话也有超时如果两边超时不匹配平台端就会看到设备反复“掉线又上线”。这些特性叠加在一起就容易出现标题里描述的现象海康NVR或者摄像头明明配置了正确的平台地址SIM卡也有流量但LiveGBS上就是看不到设备。不是设备坏了而是网络层面和协议层面没对上。2.2 SIP协议在NAT下的痛点SIP协议本身对NAT非常敏感。REGISTER请求里SIP头域和SDP体都带有“自身地址”信息。设备在私网内它认为自己的地址是192.168.x.x于是就把这个地址写进报文里。如果平台端部署在公网或不同网段收到REGISTER后如果直接拿报文里的源IP去和Contact头对比会发现不一致。平台按标准流程回200但后续如果平台需要主动联系设备比如目录查询下发给IPC它拿到的地址可能还是SDP里那个私网地址自然联系不上。结果就是设备以为自己注册成功了平台却也看不到设备状态或者设备状态飘忽不定。要解决这个问题通常有几种思路平台侧开启NAT穿透能力或配置外部地址映射设备侧尝试改用TCP传输或修改注册模式或者用平台侧主动拉流时使用真实源IP而不是SDP地址一些成熟平台已经做了这种兼容。但这些前提是你能确认问题确实出在NAT上这就要靠抓包来证实了。2.3 开课前的自查清单在动手抓包之前先花五分钟做一遍基础自查。很多“注册不上”其实都是配置手滑没必要动抓包工具。先看LiveGBS侧SIP服务器ID通常20位数字、域名域编码、SIP端口默认5060、接入密码四项是否填对。再看海康NVR或摄像机侧平台接入方式选的是GB28181填写的服务器IP/端口是平台的SIP地址和SIP端口SIP服务器ID、域、接入密码是否与平台完全一致通道编码是否是20位且前几位和域编码对得上。网络层面也顺手验证一下在设备端ping通平台IP吗如果不通大概率是SIM卡网络无法访问该地址如果通再检查平台所在服务器的防火墙是否允许UDP 5060入站。很多时候平台上看到设备一直“未注册”其实只是服务器防火墙忘了放行SIP端口罢了。拿一张纸把这几个参数列下来跟实际配置逐项比对再考虑抓包。这一步虽然不起眼但能省掉你后面很多无用功。3. 平台端日志与配置排查基础参数检查完没问题才开始进入“带日志排障”的阶段。日志其实是比抓包更快的手段很多情况下看日志就能直接定位用不着分析报文。LiveGBS作为一套比较成熟的GB/T28181国标平台运营过程中会在本地留下详细的运行日志设备注册、心跳、目录上报等信令过程都会记录在案。你不需要立刻上抓包先学会看日志能解决至少一半问题。3.1 LiveGBS侧需要核对的参数不说太深只讲三个核心参数它们能覆盖绝大多数“看不到设备”的情况。第一个是SIP服务器ID。GB28181标准里平台自身有一个20位编码比如“34020000002000000001”这种编码规则由行政区划、设备类型等字段构成。设备端填的“SIP服务器ID”必须是这个20位数字少一位、多一位、填成全零都会导致注册异常。很多海康设备在注册时会直接报“SIP服务器ID无效”就是因为这里没对齐。第二个是域编码。域编码决定了设备被分配到哪个域下LiveGBS上通常叫“国标域”或者“设备域”。设备端填的“域”必须与平台的域编码一致否则即使注册请求能到平台也无法判断这个设备该归谁管注册包可能直接被丢弃。第三个是SIP端口和接收IP。确认LiveGBS实际监听的SIP端口是多少部署在什么IP上。如果服务器有多个网卡或者经过了NAT还要确认平台是不是要在报文里重写SIP头很多平台在设置里有一个“外部IP”参数就是解决这个问题的。3.2 海康NVR/摄像机侧需要核对的参数海康设备的28181配置入口一般在“网络-高级设置-平台接入”或者“平台接入-GB28181”菜单里。不同的固件版本略有差异但核心字段就那几项。重点核对几个容易被忽略的项一是“接入密码”这个密码必须和平台的设备接入密码一致很多小项目喜欢在这里随便填结果平台注册鉴权一直失败。二是“通道编码”海康NVR下挂多路摄像机时每路通道都需要有独立的20位编码如果几路通道编码重复或格式不对平台解析目录时就会丢弃一部分通道表现为“有NVR没通道”。三是“传输协议”一般建议先用UDP试如果UDP不稳定再切换TCP这也能绕过一部分NAT问题。还有一个容易被坑的点海康NVR的“主动注册”周期。默认可能是300秒或者600秒也就是说设备要等整整一个注册周期才会重连。修改平台参数后如果不想等直接重启设备或者手动触发一次注册能省下好多等待时间。3.3 日志怎么看看LiveGBS日志时不用细读全部内容先过滤几个关键动作。打开日志文件后搜索设备注册相关的关键词“REGISTER”、“Register”、“设备注册”、“注册成功”等。如果看到设备IP在反复尝试注册但始终没有“注册成功”字样基本可以断定平台侧鉴权或参数匹配不过。如果看到“目录为0”“无通道目录”说明设备注册通了但目录上报为空重点去查NVR通道配置。日志还有个妙用区分“平台没收到包”和“平台收包后拒绝”。如果日志里有来自设备IP的UDP报文记录但后续没有处理结果问题多半在解析层或配置层如果日志里连设备IP的任何痕迹都没有那就是网络层直接丢失了必须靠抓包继续定位。注意日志里搜索不到不等于设备真的没发包。很多情况下包到了服务器网卡但应用层没有读到时也会无日志。所以日志看完没有结论一定要继续用抓包工具看网络层。4. 正式抓包排障到这一步配置也检查了日志也翻了结论还在两个方向之间摇摆那就必须上抓包工具了。别再用浏览器F12也别开Fiddler、Charles这类HTTP抓包软件——它们抓的是HTTP/HTTPS抓SIP信令基本没戏。SIP走的是UDP/TCP默认端口5060最合适的工具是Wireshark配合服务端的tcpdump才是正经套路。4.1 平台端抓包tcpdump命令平台在Linux上部署是常态那服务端抓包就是最干净的方案。抓到包的机器上执行以下命令分分钟把SIP信令记录下来# 假设网卡是eth0抓取UDP 5060端口保存到文件 tcpdump -i eth0 udp port 5060 -s 0 -w /tmp/sip_5060.pcap # 如果想看服务器是否收到TCP 5060流量把抓包范围扩大 tcpdump -i eth0 tcp port 5060 -s 0 -w /tmp/sip_tcp.pcap # 如果是公网服务器可能走了不同网卡先看所有接口链路再抓 tcpdump -i any udp port 5060 -s 0 -w /tmp/sip_all.pcap参数说下-i指定网卡port 5060限定端口-s 0表示抓完整包不要截断-w是写成pcap文件供Wireshark分析。跑起来后让现场同事或者自己手动在设备侧触发一次注册然后按CtrlC停止拿pcap文件下来复盘。如果SIP端口不是默认的5060比如平台改成了6060就把filter里的端口改成实际的。要是记不住端口也可以直接抓所有UDP流量先大范围看但这样文件比较庞杂定位效率会低建议还是先收窄到SIP端口。抓包有个小技巧如果客户端和设备中间还有防火墙或者运营商网关你抓到的包可能并不是设备发出的那个原始包。但没关系只要平台侧能看到来自设备外网IP的REGISTER说明包确实到了平台网络如果连端口扫描都看到了但没有REGISTER那多半是SIP协议层被安全设备拦截了。4.2 Wireshark看SIP消息拿到pcap文件用Wireshark打开。首次打开一堆UDP包别慌直接在上方过滤栏输入sip回车就只显示SIP信令了。如果看到sip过滤不出来检查一下SIP端口是不是被Wireshark正确识别了如果用的是非标准端口要先右键某个包“解码为”-“SIP”。接下来按REGISTER - 401 - REGISTER - 200 OK的顺序看一遍。重点看以下几点设备发出的第一个REGISTER请求行里的Request-URI是不是平台SIP服务器IDFrom头是不是该设备自己的20位编码是否在平台的白名单内401响应的WWW-Authenticate头里有没有realm以及realm是否和平台配置的域一致第二个REGISTER里的Authorization头有没有生成正确的摘要最后的200 OK里有没有包含Expires注册有效期字段。如果能完整看到上面流程说明SIP注册层没问题。然后继续看MESSAGE/CATALOG相关的包检查目录上报的消息体里是否包含正确格式的channel id、name等字段这一步能判定“看到设备但没看到通道”的原因。4.3 设备端抓包怎么搞有些时候平台端抓包就是看不到任何来自设备的包为了区分是“设备压根没往外发”还是“中途被丢了”就要考虑设备侧抓包。但对摄像头这种嵌入式设备直接在设备上跑tcpdump不太现实。替代方案有几种。一是把设备接在带镜像端口Port Mirroring的可管理交换机上在镜像口抓包看设备发出的原始SIP包。二是在海康NVR上有些系列支持在系统诊断里导出信令日志比抓包还省事。三是如果摄像头是海康私有协议通道可以先把摄像头临时改到局域网内用PC搭建一个SIP服务器或者直接用Wireshark监听局域网验证设备是否正常发出REGISTER包从而把网络链路问题从设备问题里剥离开。这里有个很实用的判断逻辑把设备拿到和平台服务器同一内网或者至少用一条能互通的链路短接测试一下。如果局域网里注册成功说明设备端和平台端配置都没大问题问题九成在物联网卡的入网路由上如果局域网里也注册失败那就是设备配置或平台配置还有毛病回去改参数吧。5. 结合抓包结果定位问题抓包分析完之后你会收获一堆结论去支撑到底要改哪里。归纳一下常见场景做一个“症状—原因—处理”对照表排查时直接对号入座。5.1 SIP包完全没有到平台平台端tcpdump啥也没抓到或者只抓到无关流量但设备状态显示“注册中”。先确认设备侧是不是真的配置了平台的公网地址很多人配置成内网IP却拿到外网用再确认设备所在物联网卡的网络能不能访问外网可以简化验证在设备或NVR上配置一个可以访问的域名看看是否能通最后确认运营商有没有对5060端口做管控。实测中有过案例物联网卡把UDP 5060封了REGISTER发不出去后来改成TCP 5060就通了。5.2 REGISTER发出去了但平台没回应tcpdump能看到设备源IP发来的REGISTER但平台上没有任何回包。这种情况先看SIP服务器监听的端口是否匹配有没有在防火墙放行再看平台日志有没有收到该包的处理记录如果没有有可能是平台还在绑定旧端口或者旧实例重启一下平台的SIP服务试试。尤其要留意双网卡服务器。平台可能监听在网卡A的IP上但设备下发配置写的是网卡B的IP或者服务器上iptables规则把UDP 5060丢弃了。用ss、netstat检查监听端口能从侧面排除这些干扰。5.3 有401但拿不到200 OK抓包里能看到平台回401设备也继续发了带鉴权信息的REGISTER但平台回的不是200 OK而是403或直接没回。这种情况基本都是鉴权密码对不上。用户再把设备侧“接入密码”和平台侧“设备接入密码”逐字符比对一下。注意海康有些固件会把密码加密存储修改后要重新保存并重启设备生效。5.4 注册成功但目录是空的既然200 OK拿到了说明SIP注册链路OK问题转移到目录上报环节。看一下抓包里MESSAGE消息的Content-Type和Content-Body目录查询响应的报文里应该有完整的deviceList或Item节点里面包含每个通道的DeviceID。常见问题是NVR下挂的通道编码为空、重复、或者前几位和域对不上平台解析后认为不是自己的资源就丢弃。可以在NVR的通道编辑里重新手动生成一遍20位编码或者让NVR恢复默认平台编码再重新同步一遍。5.5 目录有但平台预览不出流能看见通道但点播放拉流失败那就是媒体面协商出了问题。盯住INVITE请求、200 OKSDP以及后续的RTP包。如果设备SDP里的IP是私网地址且平台无法访问这段地址肯定拉不来流。解决办法是在平台侧开启NAT穿透或者配置固定的媒体端口段并在网关/防火墙上做映射。如果是物联网卡场景还可以测试把信令和媒体全部切到TCP模式很多国标平台和设备都支持SIP over TCP以及TCP媒体传输能躲开一大批UDP端口限制问题。下面把常见情况汇总成表格方便直接打印出来贴到工位上平台端现象抓包表现高概率原因处理方向完全没有设备记录无任何REGISTER到达网络不通/端口被运营商封/平台地址写错检查SIM网络、换端口、核对平台地址设备一直在注册中只有REGISTER没有响应平台SIP端口未监听/防火墙拦截检查监听端口、放行防火墙注册失败平台日志报鉴权错误401之后无200密码不一致重置密码后重启设备有设备没通道注册有200目录无节点NVR通道编码异常/目录ID不匹配重新生成通道编码、确认域一致有通道但拉流黑屏INVITE协商后RTP中断NAT导致媒体不可达/端口未放行开NAT穿透、改TCP、端口映射6. 一次典型的物联网卡摄像头注册失败全排障实录写点实际场景把上面的流程串一遍。我遇到过一个项目在一个园区里部署LiveGBS平台放在公网云服务器上前端用的是带物联网卡的海康大球机客户反馈一直看不到设备。我处理这个案例的大致过程可以给各位参考。6.1 现场情况平台是LiveGBS部署在一台公网服务器上的SIP端口默认5060设备列表配了一个国标域。摄像机带的是运营商物联网卡开机后拨号正常显示有信号。但LiveGBS控制台里设备列表一直空空如也设备侧Web界面显示“注册成功”却也看不到平台在线。这个描述当时就很典型设备觉得注册成功了平台觉得没收到。按照之前的思路问题大概率出在网络投递或NAT回包上而不是注册参数本身。6.2 逐步排查第一步先看LiveGBS的日志。日志里根本没有来自这个摄像头的注册记录更别谈401和200了。也就是说平台的SIP层压根没有收到这些REGISTER包。第二步平台侧tcpdump抓包。命令tcpdump -i eth0 udp port 5060 -s 0 -w sip.pcap等了5分钟过滤sip后发现竟然没有一条来自这个摄像头的REGISTER到达平台。第三步设备侧抓包。因为海康球机我用NVR串联临时接到一个可管理交换机上开端口镜像抓包。抓了几分钟发现设备确实在不断向平台IP发送REGISTER包发出来了从端口镜像能看到但平台服务器的tcpdump却没有收到。这个结果基本锁死是链路中间丢失问题一定在物联网卡网络路由或运营商映射上。第四步验证端口是否被封。把设备注册端口改成TCP 5060海康设备支持在平台接入参数里选TCP协议平台上同步开启TCP模式重新注册。这次平台日志里马上就出现REGISTER了并且稳定注册成功。虽然最终方案明确了“UDP被运营商丢弃”但整个过程还是得靠抓包去验证每一跳否则很难跟客户解释清楚为什么换UDP改TCP就好了。6.3 最终方案这个项目最终的处理方式很朴素在海康球机“平台接入”参数里把“传输协议”改为TCP同时LiveGBS平台“SIP传输模式”也选TCP。注册稳定后又追加开放了RTP端口段确保播放的时候媒体流能正常回来。对于物联网卡这种网络能用TCP就别纠结UDP除非你能确认到运营商网络对UDP 5060没有限制。7. 一些平时不写进文档的排障经验最后分享几个不写进官方文档但实战里特别有用的经验。第一抓包不是什么场景都需要。如果只是配置不对日志就够定位了如果日志明确显示收到了包但注册失败优先查参数只有像“设备发没发包”“包到没到平台”这种说不清楚的情况才果断上tcpdump。抓包要带着疑问抓不要开了之后就闭眼等否则抓了一晚上还是一团乱。第二排障顺序一定从“平台侧”开始而不是从“设备侧”开始。平台侧抓包最容易做、信息量也最大。你先确认服务端有没有收到包就天然把排查范围缩小了一半。如果一上来就折腾设备端抓包费时费力还不一定抓得到。第三多留意物联网卡网络和普通宽带的差异。物联网卡在网络策略上通常比普通宽带保守得多限制UDP端口、限制长连接、做Full Cone NAT都是常态。遇到国标平台接入类问题建议先检查一下设备侧有没有TCP模式可以切换比反复研究NAT参数更省时间。第四别忘了一条朴素的道理——设备改完参数一定要重启或手动触发注册。SIP注册不是即时的改动后不重启设备可能还在用旧参数反复尝试。碰到这种“改了但没效果”的情况先找重启按钮别急着继续改配置。排障这东西说到底就是一层层剥洋葱。配置、网络、协议、NAT每次抓包都帮你剥掉一层。LiveGBS这个平台本身不复杂一些棘手的问题大多来自链路和网络环境把抓包这套基本功练熟了再遇到“注册不上”“看不到设备”就能心态稳得住步骤走得对问题找得快。
返回列表