news 2026/3/1 19:35:35

海康SDK控制海康摄像仪报警输入节点

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
海康SDK控制海康摄像仪报警输入节点

一、查看摄像仪是否支持报警输出节点控制

1.1登录海康摄像仪平台界面-->报警配置

-->报警输出

--报警状态

说明该摄像仪支持节点控制

二、下载海康sdk(官网地址)

2.1获取设备报警输出。

主要用到NET DVR GetAlarmOut V30方法,返回的是bool值。

2.2代码示例:

public static void getAlarmOutStatus(int iUserID, int alarmOutIndex, HCNetSDK.NET_DVR_ALARMOUTCFG_V30 cfg) { HCNetSDK.NET_DVR_ALARMOUTSTATUS status = new HCNetSDK.NET_DVR_ALARMOUTSTATUS(); status.write(); boolean ret = hCNetSDK.NET_DVR_GetAlarmOut(iUserID, status); if (!ret) { System.out.println("获取报警输出状态失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); return; } status.read(); byte rawStatus = status.Output[alarmOutIndex]; System.out.println("报警输出口[" + alarmOutIndex + "] 原始状态:" + rawStatus); if (openAlarmOut(iUserID, alarmOutIndex)) { try { Thread.sleep(5 * 1000L); } catch (InterruptedException ignored) {} closeAlarmOut(iUserID, alarmOutIndex); } // ====== 结合常开 / 常闭判断“真实逻辑状态” ====== //if (cfg.byNormalSatus == 0) { // // 常开(NO) // if (rawStatus == 1) { // System.out.println("报警输出:已触发(NO 闭合)"); // closeAlarmOut(iUserID, alarmOutIndex); // } else { // System.out.println("报警输出:未触发(NO 断开)"); // openAlarmOut(iUserID, alarmOutIndex); // } //} else { // // 常闭(NC) // if (rawStatus == 0) { // System.out.println("报警输出:已触发(NC 断开)"); // openAlarmOut(iUserID, alarmOutIndex); // } else { // System.out.println("报警输出:未触发(NC 闭合)"); // } //} }

2.2调用该方法,首先要登录

public static void main(String[] args) throws IOException, InterruptedException { if (hCNetSDK == null) { System.out.println("init sdk"); if (!createSDKInstance()) { System.out.println("Load SDK fail"); return; } } //linux系统建议调用以下接口加载组件库 if (osSelect.isLinux()) { HCNetSDK.BYTE_ARRAY ptrByteArray1 = new HCNetSDK.BYTE_ARRAY(256); HCNetSDK.BYTE_ARRAY ptrByteArray2 = new HCNetSDK.BYTE_ARRAY(256); //这里是库的绝对路径,请根据实际情况修改,注意改路径必须有访问权限 String strPath1 = System.getProperty("user.dir") + "/lib/libcrypto.so.1.1"; String strPath2 = System.getProperty("user.dir") + "/lib/libssl.so.1.1"; System.arraycopy(strPath1.getBytes(), 0, ptrByteArray1.byValue, 0, strPath1.length()); ptrByteArray1.write(); hCNetSDK.NET_DVR_SetSDKInitCfg(HCNetSDK.NET_SDK_INIT_CFG_LIBEAY_PATH, ptrByteArray1.getPointer()); System.arraycopy(strPath2.getBytes(), 0, ptrByteArray2.byValue, 0, strPath2.length()); ptrByteArray2.write(); hCNetSDK.NET_DVR_SetSDKInitCfg(HCNetSDK.NET_SDK_INIT_CFG_SSLEAY_PATH, ptrByteArray2.getPointer()); String strPathCom = System.getProperty("user.dir") + "/lib/"; HCNetSDK.NET_DVR_LOCAL_SDK_PATH struComPath = new HCNetSDK.NET_DVR_LOCAL_SDK_PATH(); System.arraycopy(strPathCom.getBytes(), 0, struComPath.sPath, 0, strPathCom.length()); struComPath.write(); hCNetSDK.NET_DVR_SetSDKInitCfg(HCNetSDK.NET_SDK_INIT_CFG_SDK_PATH, struComPath.getPointer()); } //SDK初始化,一个程序进程只需要调用一次 hCNetSDK.NET_DVR_Init(); if (fExceptionCallBack == null) { fExceptionCallBack = new FExceptionCallBack_Imp(); } Pointer pUser = null; if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, pUser)) { return; } System.out.println("设置异常消息回调成功"); //启用SDK写日志 hCNetSDK.NET_DVR_SetLogToFile(3, "./sdkLog", false); //登录设备,每一台设备只需要登录一次 lUserID = TestDemo.loginDevice("192.168.10.61", (short) 8000, "admin", "htdq0557"); for (boolean exit = false; !exit; ) { System.out.println("请输入您想要执行的demo实例! (退出请输入yes)"); Scanner input = new Scanner(System.in); String str = input.next(); // 转换为标准输入 str = str.toLowerCase(); if (str.equals("yes")) { // 退出程序 exit = true; break; } switch (str) { case "1": { int alarmOutIndex = 0; // 第 1 路报警输出 HCNetSDK.NET_DVR_ALARMOUTCFG_V30 cfg = new HCNetSDK.NET_DVR_ALARMOUTCFG_V30(); cfg.dwSize = cfg.size(); cfg.write(); //日志查找 System.out.println("\n报警状态输出信息"); SdkSysCfg.getAlarmOutStatus(lUserID, alarmOutIndex, cfg); break; } default: { System.out.println("\n未知的指令操作!请重新输入!\n"); } } } Thread.sleep(2000); //程序退出的时候调用注销登录接口,每一台设备分别调用一次 if (hCNetSDK.NET_DVR_Logout(lUserID)) { System.out.println("注销成功"); } //释放SDK资源,程序退出时调用,只需要调用一次 hCNetSDK.NET_DVR_Cleanup(); return; }

三、调用完成

调用完成之后就可以根据业务需求去控制节点输出。发送脉冲信号

san NET_DVR_GetAlarmOut_V30
NET_DVR_GetAlarmOut_V
NET_DVR_GetAlarmOut_V30
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/28 1:01:49

Unigine整合Myra UI Library全纪录(3):整合与优化

MyraIntegration当Texture2DManager,MyraRenderer和MyraPlatform都实现了之后,就可以将它们整合起来了。首先,IMyraPlatform.Renderer返回实现好的MyraRenderer,而IMyraRenderer.TextureManager则返回实现好的Texture2DManager。接…

作者头像 李华
网站建设 2026/2/27 9:54:13

消息队列从入门到跑路,保姆级教程!傻子可懂

你是小阿巴,刚刚为电商系统的双 11 大促开发了秒杀抢购功能。 0 点秒杀开始,每秒上万个用户同时点击抢购按钮,你的数据库瞬间被打垮! 你急得满头大汗,只能找到 “后端之狗” 鱼皮求助:阿巴阿巴…… 鱼皮看…

作者头像 李华
网站建设 2026/2/28 23:39:31

K8s -蓝绿发布与金丝雀发布

一、蓝绿发布:零停机切换与快速回滚核心原理蓝绿发布通过维护两个完全独立的生产环境(“蓝” 和 “绿”)实现无感知升级:蓝环境:当前运行的旧版本,处理全部用户流量。绿环境:部署新版本&#xf…

作者头像 李华
网站建设 2026/2/27 11:27:03

数据结构入门:二叉排序树的构建与相关算法

有序二叉树(二叉排序树)是数据结构中极具实用性的树形结构,其「左小右大」的核心特性让插入、查找、遍历操作具备高效性。一、二叉排序树的定义二叉排序树的核心规则:任意节点的左子树中,所有节点值 小于 该节点值&…

作者头像 李华
网站建设 2026/2/26 10:07:59

【HarmonyOS】个性化应用图标动态切换详解

在移动应用高度同质化的今天,图标早已不只是一个“入口”,而是用户对应用的第一印象。 在 HarmonyOS 生态中,系统能力不断下沉到应用层,开发者终于可以不再满足于“一个图标用到卸载”,而是让应用图标根据状态、主题或…

作者头像 李华