• HIK录像机GB28181对接相机不在线问题随笔


    一、问题现象

    【设备信息】型号:DS-8664N-I16-V3 V4.63.000 build 230412

    【问题现象】HIK录像机使用GB28181对接异常相机无法正常上线,对接HIK相机可以正常上线。

    【现场拓扑】现场拓扑如下

    1. NVR侧使用固定公网IP地址。
    2. IPC侧使用家用宽带的方式,通过国标跨公网接入NVR。

    图1.1:网络拓扑

        上述拓扑与NVR使用GB接入三方平台的拓扑类似,只不过NVR此时充当了平台的角色。

    二、问题排查过程

    1、异常相机接入过程抓包及收集打印

        现场反馈HIK相机接入正常,但是三方相机接入异常,所以我们先抓包查看异常的三方相机完整的注册过程

    图2.1:三方相机异常抓包1

    图2.2:三方相机异常抓包2

    从上图可发现,三方相机抓包分析结果如下

    1. 录像机发起Invite请求
    2. 三方相机回复200 OK
    3. 录像机回复ACK并发起三次握手请求
    4. 未收到回复设备一直在重传三次握手(详见图2.2)

    由上图分析,设备侧发起主动请求,但是未收到回复,目前看起来应该是异常相机的问题?因为相机并未正常回复相关三次握手,导致设备一直在重传,无法获取相关参数。但结果真的如此吗?

    因为HIK相机是正常的,我们先抓取HIK相机的包,对比分析下是否有区别。

    2、HIK相机正常抓包过程

        因上述分析,我们决定抓取HIK相机的报文,对比分析下两个抓包有何区别。

    图2.3:HIK相机正常抓包1

    图2.4:HIK相机正常抓包2

    图2.5:HIK相机正常抓包3

         由上述现象可以判断出:

    1. HIK的相机正常接入是存在一个切换被动的机制在的。
    2. 先主动取流,取不到之后,会切换被动取流。

    那么问题来了,为什么第一次主动取流总会失败呢?

    3.为什么主动取流会失败呢?

    要确定这个问题,我们时候首先得对Invite报文中的报文进一步分析

    图2.6  异常相机Invite回复分析

    图2.7  HIK相机第一次Invite回复分析

    图2.8  HIK相机第二次Invite回复分析

        由上图分析可知,相机200OK的C字段,IP一直是相机的内网IP,所以,在主动取流是取不到的,所以录像机必须得被动取流,即让相机主动和录像机建立连接
        根据上述分析录像机肯定是存在一个主动切换被动的逻辑在里面的,但是为什么三方相机无法正常上线,HIK相机可以正常上线呢?

    4.进一步确认问题并检查相关逻辑。

        根据上述分析,我们在确定下正常HIK相机抓包和异常相机抓包有何不同。

    图2.9:相机异常抓包1

    图2.10:三方相机异常抓包2

    图2.11:HIK相机正常抓包1

    图2.12:HIK相机正常抓包2

        由上述抓包信息可以看出:

    1. 相机C字段回复的内网地址,录像机主动取流是取不到的(公网IP无法主动访问私网IP),所以问题点目前在于,录像机是否可以正常切换被动取流(invite中a字段setup:passive)。
    2. 异常的相机三次握手一直没有回应,导致设备侧一直在重传三次握手报文,取不到流。
    3. 正常的HIK相机在未收到录像机的三次握手后,会主动BYE掉连接,回收资源。

    如上述分析,目前仅存在此一个疑点。是否此怀疑疑点便为三方相机无法接入的原因呢?

    三、问题解决

    【问题原因】将收集到的抓包提供给HIK同事分析,目前定位出原因为:

    1. HIK的NVR会先active去取流,海康的IPC 有超时机制,tcp建立连接超时,海康的IPC 会发bye 。NVR这个时候会发passive的invite.
    2. 现场的异常ipc超时没有发BYE造成HIK的NVR的主动的取流session一直没有释放,所以就不发invite了。导致问题出现

    定位到问题原因与我们之前分析到的一致

    四、问题遗留

    此问题中抓包发现,存在以下遗留问题

    1. 目前HIK的录像机使用国标协议添加通道,协议类型自适应模式下虽然下发的是TCP取流但是仍无法切换passive取流
    2. 需要手动将通道管理界面,更改为TCP,才会切换被动取流。所以在国标跨公网接入IPC时候,仍需如下配置通道才可正常在线,配置如下图。

  • 相关阅读:
    微信开发者工具80051报错
    Java使用joml计算机图形学库,将3D坐标旋转正交投影转为2D坐标
    有效的括号(leetcode 20)
    关于#Python#生成对抗网络代码的问题,如何解决?(相关搜索:python代码|数据集|训练集)
    redis持久化机制
    LeetCode-复原 IP 地址(C++)
    访问url 404 的错误
    10_ue4进阶_添加倒地和施法动作
    《JAVASE系列》String 类
    Mybatis-Plus开发提速器mybatis-plus-generator-ui
  • 原文地址:https://blog.csdn.net/qq_39965491/article/details/139426829