对接海康设备SDK,HCNetSDK的使用(以报警柱设备为例),获取报警消息等

对接海康设备SDK,HCNetSDK的使用(以报警柱设备为例)

海康sdk,分windows版和linux版

JAVA版

1. HCNetSDK引入库HCNetSDK.dll的问题

一般spring boot项目,可以将HCNetSDK中初始化引入库可改为

HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(HCNetSDKPath.DLL_PATH +
"HCNetSDK.dll", HCNetSDK.class);

HCNetSDKPath类,获取当前项目地址

public class HCNetSDKPath {
    public static String DLL_PATH;
    static {
        String path = (HCNetSDKPath.class.getResource("/").getPath()+"lib/").
                replaceAll("%20", " ").substring(1).replace("bin", "lib").replace("/","\\");
        System.out.println(path);
        try {
            DLL_PATH = java.net.URLDecoder.decode(path, "utf-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }
}

2. SDK的调用

一般调用该sdk,需要先注册,之后再进行其他操作,如设置回调函数,设置回调异常(可获取设备上下线),布防,监听登,可根据自己所需功能来调用.

public void reg(){
        //第一步调用,可以用bean的方式注入
        HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
        //初始化SDK
        boolean initSuc = hCNetSDK.NET_DVR_Init();
        //设置连接超时时间与重连功能
        hCNetSDK.NET_DVR_SetConnectTime(2000,1);
        hCNetSDK.NET_DVR_SetReconnect(10000,true);
        int lUserID;//用户ID
        NET_DVR_DEVICEINFO_V30  m_strDeviceInfo;//设备信息
        NET_DVR_USER_LOGIN_INFO pLoginInfo;//登陆返回用户信息
        String m_sDeviceIP = "127.0.0.1";//已登录设备的IP地址
        int port = 8000;//设备端口号
        String userName = "123";//用户名
        String password = "123";//密码

        m_strDeviceInfo = new NET_DVR_DEVICEINFO_V30 ();
        //注册设备
        lUserID = hCNetSDK.NET_DVR_Login_V30(m_sDeviceIP,(short)port,userName,password, m_strDeviceInfo);
        //如果注册失败返回-1,获取错误码
        if (lUserID<0){
            System.out.println("Login failed, error code="+hCNetSDK.NET_DVR_GetLastError());
        }
        //设置报警回调函数
        HCNetSDK.FMSGCallBack fmsgCallBack_v31= new FMSGCallBack();
        boolean b = hCNetSDK.NET_DVR_SetDVRMessageCallBack_V30(fmsgCallBack_v31, null);
        //如果设置报警回调失败,获取错误码
        if (!b){
            System.out.println("SetDVRMessageCallBack failed, error code="+hCNetSDK.NET_DVR_GetLastError());
        }
        //设置异常回调函数(可在回调函数中获取设备上下线状态等)
        HCNetSDK.FExceptionCallBack fExceptionCallBack = new FExceptionCallBack();
        hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0,0,fExceptionCallBack,null);
        //建立报警上传通道(布防)
        //布防参数
        NET_DVR_SETUPALARM_PARAM net_dvr_setupalarm_param=new NET_DVR_SETUPALARM_PARAM();
        int nativeLong = hCNetSDK.NET_DVR_SetupAlarmChan_V41(lUserID, net_dvr_setupalarm_param);
        //如果布防失败返回-1
        if (nativeLong<0){
            System.out.println("SetupAlarmChan failed, error code="+hCNetSDK.NET_DVR_GetLastError());
            //注销
            hCNetSDK.NET_DVR_Logout(lUserID);
            //释放SDK资源
            hCNetSDK.NET_DVR_Cleanup();
        }
        //启动监听
        String sLocalIP = "127.0.0.1"//本地监听IP
        short sPort = 8100;//端口号(自定义)
        lListenHandle = hCNetSDK.NET_DVR_StartListen_V30(sLocalIP, sPort,fmsgCallBack, pUser);
        if(lListenHandle < 0)
        {
            System.out.println("启动监听失败,错误号:" +  hCNetSDK.NET_DVR_GetLastError());
        }
        try {
            //等待设备上传报警信息
            Thread.sleep(600001);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //撤销布防上传通道
        if(!hCNetSDK.NET_DVR_CloseAlarmChan_V30(nativeLong)){
            //注销
            hCNetSDK.NET_DVR_Logout(lUserID);
            //释放SDK资源
            hCNetSDK.NET_DVR_Cleanup();
        }
        //停止监听 lListenHandle是启动监听时返回值
        hCNetSDK.NET_DVR_StopListen_V30(lListenHandle)
        //注销用户
        hCNetSDK.NET_DVR_Logout(lUserID);
        //释放SDK资源
        hCNetSDK.NET_DVR_Cleanup();
    }

3. 回调函数

3.1 报警消息回调

实现HCNetSDK.FMSGCallBack是报警回调,实现该方法,在设备有报警时,报警消息会传过来

 /**
     * 报警消息回调
     */
    public class FMSGCallBack implements HCNetSDK.FMSGCallBack
    {
        //lCommand 上传消息类型  pAlarmer 报警设备信息  pAlarmInfo  报警信息   dwBufLen 报警信息缓存大小   pUser  用户数据
        //报警信息回调函数
        public void invoke(int lCommand, NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser)
        {
            switch (lCommand){
                /**
                 * 这里根据SDK获取
                 */
                case HCNetSDK.COMM_ALARMHOST_CID_ALARM:
                    NET_DVR_CID_ALARM strPlateResult = new NET_DVR_CID_ALARM();
                    strPlateResult.write();
                    strPlateResult.read();
                    try {
                        //处理自己的业务
                        //报警消息是字节流,需自己处理
                        System.out.println("报警信息:"+new String(pAlarmInfo.getByteArray(0, strPlateResult.size()), "gbk"));                   
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                    break;
            }
            System.out.println("报警信息结束");
        }
    }
3.2 异常消息回调

实现HCNetSDK.FExceptionCallBack方法

    //接收异常消息的回调函数
    public class FExceptionCallBack implements HCNetSDK.FExceptionCallBack {
        //接收异常消息的回调函数的外部实现
        @Override
        public void invoke(int dwType, int lUserID, int lHandle, Pointer pUser) {
            switch(dwType)
            {
                case EXCEPTION_EXCHANGE: //用户交互时异常
                    System.out.println("用户交互时异常!!!"+lHandle);
                    break;
                case EXCEPTION_PREVIEW:  //网络预览时异常
                    System.out.println("网络预览时网络异常!!!"+lHandle);
                    break;
                case 0x8015: //预览时重连成功
                    System.out.println("预览时重连成功!!!"+lHandle);
                    break;
                case 0x8017:
                    System.out.println("用户交互恢复!!!"+lHandle);
                    break;
                default:
                    System.out.println("异常");
                    break;
            }
        }
    }

linux版

linux的库和Windows不同,库的导入可根据海康文档导入
HCNetSDK类也无需像Windows改变获取库的路径

    HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary("hcnetsdk",
            HCNetSDK.class);
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
### 回答1: 通过Java可以使用海康SDK获取入侵报警抓拍图片。具体步骤如下: 1. 首先,需要导入海康SDKJava开发包,并配置相关环境。 2. 创建SDK的连接并登录到设备上。可以使用SDK提供的方法进行设备连接和登录,需要提供设备的IP地址、端口号、用户名和密码。 3. 获取设备历史报警信息。使用SDK提供的方法获取设备的历史报警信息列表,可以通过设置查询条件来获取入侵报警类型的信息。 4. 遍历历史报警信息列表,找到入侵报警的记录。 5. 获取入侵报警的抓拍图片。使用SDK提供的方法,根据入侵报警记录的时间点和设备信息,获取对应的抓拍图片。 6. 将抓拍图片保存到本地或者进行其他处理。可以使用Java的文件操作相关方法,将获取到的图片保存到本地指定的路径上,或者进行其他处理操作。 7. 关闭连接并释放资源。在获取完图片后,需要关闭与设备的连接,并释放相关资源,避免资源泄露或者连接占用。 通过以上步骤,我们可以通过Java代码调用海康SDK,实现获取入侵报警抓拍图片的功能。在具体实施时,需要根据海康SDK提供的具体方法和参数进行编程,并严格按照SDK文档进行操作。同时,需要注意异常处理和资源释放,以确保系统的稳定性和安全性。 ### 回答2: Java通过海康SDK获取入侵报警抓拍图片可以通过以下步骤实现: 1. 下载并安装海康SDK:首先需要从海康官网下载安装海康SDK,然后按照官方文档进行安装和配置。确保SDK的配置正确。 2. 创建Java项目:在IDE中创建一个新的Java项目,并将海康SDK的相关jar文件添加到项目的类路径中。 3. 导入SDKJava类库:在Java项目中,使用import语句导入SDK所提供的相关类库,以便在代码中使用SDK的功能。 4. 初始化SDK:在代码中使用SDK提供的初始化方法来初始化SDK的连接。 5. 登录设备使用SDK提供的登录方法,输入设备的IP地址、用户名和密码来登录到设备上。 6. 设置报警回调:使用SDK提供的方法设置报警回调函数,该函数会在接收到报警信息时自动触发。 7. 接收报警信息:报警回调函数可以获取报警的相关信息,包括抓拍的图片等。 8. 获取抓拍图片:从报警信息中获取到图片的路径或URL,使用SDK提供的方法将图片保存到本地或进行其他处理。 9. 关闭连接:使用SDK提供的关闭连接方法来关闭与设备的连接。 需要注意的是,上述步骤中的具体代码实现会根据所使用海康SDK版本和具体需求有所不同,因此在实际操作中应该参考海康SDK的官方文档和示例代码进行开发。同时,还需要了解设备的网络配置、设备支持的功能以及报警回调的参数和返回值等相关信息,以确保代码的正确性和可靠性。 ### 回答3: Java通过海康SDK获取入侵报警抓拍图片的步骤如下: 1. 首先,需要从海康官网下载并安装好海康SDK,确保能够成功连接到海康设备。 2. 在Java项目中引入海康SDK的依赖文件,通常是将SDK提供的jar包添加到项目的classpath中。 3. 在代码中配置SDK连接参数,包括设备的IP地址、端口号、用户名和密码等信息。可以使用SDK提供的类进行初始化并建立连接。 4. 在连接成功后,通过SDK提供的方法找到指定设备上的摄像头,通常使用设备的通道号来确定。 5. 在找到摄像头后,可以使用SDK提供的方法设置入侵报警的相关参数,如检测区域、报警类型等。 6. 开启入侵报警功能,使用SDK提供的方法让设备开始监测入侵报警。 7. 当设备检测到入侵报警时,SDK会发送相应的通知。可以通过SDK提供的回调函数来处理这些通知,一旦接收到入侵报警的通知,就可以执行相应的操作。 8. 在处理入侵报警的回调函数中,使用SDK提供的方法获取抓拍的图片。可以指定抓拍的触发条件和保存路径等参数。 9. 获取到抓拍的图片后,可以进一步处理、保存或进行其他操作。在Java中可以使用图像处理库如OpenCV来对图片进行处理和分析。 10. 最后,关闭连接和释放资源,使用SDK提供的方法结束与设备的通信。 通过上述步骤,就可以使用Java通过海康SDK获取入侵报警抓拍图片了。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值