news 2026/2/7 0:49:55

海康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/6 20:00:36

DVWA -SQL Injection-通关教程-完结

DVWA -SQL Injection-通关教程-完结 SQL注入是一种攻击者通过在应用程序的输入字段中插入恶意SQL代码,从而操纵后端数据库查询的攻击技术。如果应用程序未对用户输入进行适当过滤,这些恶意SQL代码会被数据库执行,导致数据泄露、篡改或破坏。 …

作者头像 李华
网站建设 2026/2/6 13:51:23

0x3f第七天 二叉搜索树

1.前序遍历:4213657先验证根是否满足大于左子树最大值,小于右子树最小值遍历左子树(更新右值)遍历右子树(更新左值)对于最大值和最小值,可以直接在函数里加上def isValidBST(self, root: Option…

作者头像 李华
网站建设 2026/2/7 5:10:30

扩容U盘,资料毁灭盘

早就听过扩容盘了,没想到也发生在我身上。原本上面是印着长城的 ,但现在掉漆了。店铺现在这个商品下架了,但店铺是有品牌认证的这个U盘也算是用了将近4年了,存的都是大学的上课的作业。大四没课回家了几个月没有使用过这个U盘&…

作者头像 李华
网站建设 2026/2/5 1:12:19

数据结构学习篇(5)---顺序表和链表的区别

对于顺序表和链表的异同,上面这个表格直观展示了两者的不同之处,有几点可以做一下解释:顺序表和链表在逻辑结构上都是连续的,但是在物理结构,也就是存储空间上,顺序表是连续的,因为他的本质是数…

作者头像 李华