大华SDK,java实现动态报警功能

第一次接触sdk,走了很多弯路,所以记录一下,希望可以帮助更多人

其中最重要的就是回调函数,他会把我们的动态报警的报警信息返回过来,让我们可以拿到报警信息去做一些业务方面的功能

public class ImplAlarmService implements IAlarmService,NetSDKLib.fMessCallBack {

    @Override
    public String ss1s() {
        return "null";

    }

        public static NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE;

        enum AlarmStatus {
            ALARM_START, ALARM_STOP
        }

        // alarm event info list
        static Vector<AlarmEventInfo> data = new Vector<AlarmEventInfo>();


        @Override
        public boolean invoke(int lCommand, NetSDKLib.LLong lLoginID,
                              Pointer pStuEvent, int dwBufLen, String strDeviceIP,
                              NativeLong nDevicePort, Pointer dwUser) {
            switch (lCommand) {
                case NetSDKLib.NET_ALARM_ALARM_EX:
                case NetSDKLib.NET_MOTION_ALARM_EX:
                case NetSDKLib.NET_VIDEOLOST_ALARM_EX:
                case NetSDKLib.NET_SHELTER_ALARM_EX:
                case NetSDKLib.NET_DISKFULL_ALARM_EX:
                case NetSDKLib.NET_DISKERROR_ALARM_EX: {
                    byte []alarm = new byte[dwBufLen];
                    pStuEvent.read(0, alarm, 0, dwBufLen);
                    for (int i = 0; i < dwBufLen; i++) {
                        if (alarm[i] == 1) {
                            AlarmEventInfo alarmEventInfo = new AlarmEventInfo(i, lCommand, AlarmStatus.ALARM_START);
                            if (!data.contains(alarmEventInfo)) {
                                data.add(alarmEventInfo);
                                System.out.println("报警开始:数据"+data.elementAt(0).type+",时间:"
                                        +new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(data.elementAt(0).date)+",Ip地址:"+strDeviceIP);
                                /**
                                 * 向物联网平台发送post数据
                                 */
                                System.out.println(WanwuhulianApi.start(strDeviceIP));
                                continue;
                            }
                        }else {
                            AlarmEventInfo alarmEventInfo = new AlarmEventInfo(i, lCommand, AlarmStatus.ALARM_STOP);
                            if (data.remove(alarmEventInfo)) {
                                System.out.println("报警结束"+strDeviceIP);
                                // eventQueue.postEvent(new AlarmListenEvent(target, alarmEventInfo));
                            }
                        }
                    }
                    break;
                }
                default:
                    break;
            }
            return true;
        }

        // struct of alarm event
        static class AlarmEventInfo {
            public static long index = 0;
            public long id;
            public int chn;
            public int type;
            public Date date;
            public AlarmStatus status;

            public AlarmEventInfo(int chn, int type, AlarmStatus status) {
                this.chn = chn;
                this.type = type;
                this.status = status;
                this.date = new Date();
            }

            @Override
            public boolean equals(Object o) {
                if (this == o) return true;
                if (o == null || getClass() != o.getClass()) return false;
                AlarmEventInfo showInfo = (AlarmEventInfo) o;
                return chn == showInfo.chn && type == showInfo.type;
            }
        }
    }

通过初始化,登录,订阅报警,开始报警,只要看demo就可以实现,我们可以把demo的jf那个类删了,那个类是可视化的实现,删了之后结构就比较清晰了。

其中报警的方法,最主要就是以上的实现类和其中的invoke重写方法,我的理解是通过case可以找的相关报警类型,每次摄像头触发报警,就会调用一次,直接拿取数据就ok了

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
大华摄像头SDK提供了Java版的API接口,可以通过Java编程语言实现常用的功能。以下是一些常用的Java功能实现: 1. 初始化SDK ```java HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; boolean initSuc = hCNetSDK.NET_DVR_Init(); if (initSuc != true) { System.out.println("SDK初始化失败"); return; } ``` 2. 登录设备 ```java HCNetSDK.NET_DVR_DEVICEINFO_V30 deviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30(); int userID = hCNetSDK.NET_DVR_Login_V30(deviceIP, devicePort, username, password, deviceInfo); if (userID < 0) { System.out.println("登录设备失败"); return; } ``` 3. 实时预览 ```java HCNetSDK.NET_DVR_PREVIEWINFO previewInfo = new HCNetSDK.NET_DVR_PREVIEWINFO(); previewInfo.lChannel = channelNo; previewInfo.dwStreamType = 0; // 0-主码流,1-子码流 previewInfo.dwLinkMode = 0x0000; // 0- TCP方式,0x0001 - UDP方式, previewInfo.hPlayWnd = new NativeLong(0); // 默认为0 previewInfo.bBlocked = true; // 阻塞取流开关:0-非阻塞,1-阻塞 previewInfo.byProtoType = 0; // 应用层取流协议:0-私有协议,1-RTSP协议,2-用户自定义协议 previewInfo.byPreviewMode = 0; // 预览模式:0-正常预览,1-延迟预览 previewInfo.byStreamID[0] = 0; NativeLong playHandle = hCNetSDK.NET_DVR_RealPlay_V40(userID, previewInfo, null); if (playHandle.longValue() == -1) { System.out.println("实时预览失败"); return; } ``` 4. 抓图 ```java HCNetSDK.NET_DVR_JPEGPARA jpegPara = new HCNetSDK.NET_DVR_JPEGPARA(); jpegPara.wPicSize = 0xff; // 图片尺寸:0xff-原始尺寸 jpegPara.wPicQuality = 0; // 图片质量:0-最好,1-较好,2-一般 String filePath = "D:\\capture.jpg"; // 保存路径 boolean captureSuc = hCNetSDK.NET_DVR_CaptureJPEGPicture(playHandle, channelNo, jpegPara, filePath); if (captureSuc != true) { System.out.println("抓图失败"); return; } ``` 5. 录像 ```java HCNetSDK.NET_DVR_TIME startTime = new HCNetSDK.NET_DVR_TIME(); HCNetSDK.NET_DVR_TIME endTime = new HCNetSDK.NET_DVR_TIME(); startTime.dwYear = 2021; startTime.dwMonth = 7; startTime.dwDay = 1; startTime.dwHour = 0; startTime.dwMinute = 0; startTime.dwSecond = 0; endTime.dwYear = 2021; endTime.dwMonth = 7; endTime.dwDay = 1; endTime.dwHour = 1; endTime.dwMinute = 0; endTime.dwSecond = 0; String filePath = "D:\\record.mp4"; // 保存路径 boolean recordSuc = hCNetSDK.NET_DVR_SaveRealData_V40(playHandle, filePath, HCNetSDK.NET_DVR_TRANSPARENT, 0); if (recordSuc != true) { System.out.println("录像失败"); return; } ``` 以上是一些常用的Java功能实现,仅供参考。具体的实现方式还需要根据实际需求来确定。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值