我亦我 2023-04-21 16:08 采纳率: 100%
浏览 53
已结题

java开发大华摄像头SDK实现动态报警

您好,实在不知道了。
大华摄像头的SDK
用java开发,实现人经过,动态报警功能

//初始化
      LoginModule.init(disConnect, haveReConnect);
//登录
            LoginModule.login("192.168.1.108", 37777, "admin", "qwer1234");
            fAlarmDataCB cbMessage = new fAlarmDataCB();
        netsdk.CLIENT_SetDVRMessCallBack(cbMessage, null);
        System.out.println("监听开始:" + netsdk.CLIENT_StartListenEx(LoginModule.m_hLoginHandle));
        try {
            Thread.sleep(500000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("登出");
        LoginModule.logout();

开始监听返回true
但不知道从哪里获取返回的报警信息,望解答

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-22 04:22
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/772603
    • 这篇博客你也可以参考下:虹软离线人脸识别java版本的SDK使用配置,也是整了半天才看明白一些,总结一下
    • 除此之外, 这篇博客: 使用腾讯云对象云存储进行上传文件(Java临时秘钥)及小程序SDK使用中的 官方方法一(推荐):后端通过获取临时密钥给到前端,前端计算签名 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
      1. QCloundController.java
          // 临时秘钥配置
          TreeMap<String, Object> config = new TreeMap<String, Object>();
          Response credential = null; // 凭证结果
      
          try {
            config.put("SecretId", cosProperties.getSecretId());
            config.put("SecretKey", cosProperties.getSecretKey());
            config.put("durationSeconds", 1800); // 设置可使用事件1800秒 -> 30分钟
            config.put("bucket", cosProperties.getBucketName()); // 存储桶名
            config.put("region", cosProperties.getRegion()); // 地区
            // policy的resource => 前缀
            // 只允许访问: [avatar/*]
            config.put("allowPrefixes", new String[] {
                    cosProperties.getAvatarPrefix()
            });
      
            // 密钥的权限列表。必须在这里指定本次临时密钥所需要的权限。
            // 简单上传、表单上传和分片上传需要以下的权限,其他权限列表请看 https://cloud.tencent.com/document/product/436/31923
            config.put("allowActions", new String[] {
                    "name/cos:PutObject",// 简单上传
                    "name/cos:PostObject",// 表单上传、小程序上传
                    "name/cos:GetBucket", // 允许获取桶的对象列表
                    // 分片上传
                    "name/cos:InitiateMultipartUpload",
                    "name/cos:ListMultipartUploads",
                    "name/cos:ListParts",
                    "name/cos:UploadPart",
                    "name/cos:CompleteMultipartUpload"
            });
      
            //成功返回临时密钥信息,如下打印密钥信息
            credential = CosStsClient.getCredential(config);
          } catch (Exception e) {
            //失败抛出异常
            e.printStackTrace();
            throw new IllegalArgumentException("no valid secret !");
          }
          return Result.success(credential);
      

      allowPrefixes对应 policy的resource(原本是allowPrefix, 从源码中可以得出)

      allowActions对应policy的action

      policy更多了解:

      https://cloud.tencent.com/document/product/436/31923

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pg36OU2L-1632370381510)(/使用腾讯云对象云存储进行上传文件(Java临时秘钥)]12.png)

      2. 写完java后台就该写前端小程序了
      

      cos.ts

      // cos.ts
      const COS = require('cos-wx-sdk-v5');
      
      
      var cos = new COS({
        getAuthorization: function (options: any, callback: any) {
          console.log(options);
          
          wx.request({
            url: 'http://127.0.0.1:8080/qc/key',
            data: {
            },
            dataType: 'json',
            success: function (result: any) {
              var data = result.data.data;
              console.log(data);
              var credentials = data && data.credentials;
              if (!data || !credentials) return console.error('credentials invalid');
              callback({
                TmpSecretId: credentials.tmpSecretId,
                TmpSecretKey: credentials.tmpSecretKey,
                XCosSecurityToken: credentials.sessionToken,
                // 建议返回服务器时间作为签名的开始时间,避免用户浏览器本地时间偏差过大导致签名错误
                StartTime: data.startTime, // 时间戳,单位秒,如:1580000000
                ExpiredTime: data.expiredTime, // 时间戳,单位秒,如:1580000900
              });
            }
          });
        }
      });
      
      export {
        cos
      }
      

      app.ts:app文件

      import { cos } from './COS/cos';
      
      App<IAppOption>({
        globalData: {
        },
        onLaunch() {
          cos.getBucket({
            Bucket: 'myblogspringboot-1300326898',
            Region: 'ap-nanjing',
            Prefix: 'avatar/', // 这里传入列出的myblogspringboot-1300326898/avatar下的所有文件
          }, function (err: any, data: any) {
            if (err) {
              console.log(err);
              return;
            }
            console.log(data, 2);
          });
        },
      })
      
      • 请求结果

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M9UMjP1U-1632370381511)(/使用腾讯云对象云存储进行上传文件(Java临时秘钥)]13.png)

    • 以下回答来自chatgpt:

      对于大华摄像头SDK实现人经过,动态报警功能,可以使用SDK提供的回调函数来获取报警信息。

      1.首先,需要先编写一个类来实现SDK提供的回调函数,例如:

      public class AlarmCallBack implements HCNetSDK.FMSGCallBack_V31 {
      
          @Override
          public void invoke(NativeLong lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen,
                             Pointer pUser) {
              switch (lCommand.intValue()) {
                  case HCNetSDK.COMM_ALARM_RULE:
                      HCNetSDK.NET_VCA_RULE_ALARM pRule = new HCNetSDK.NET_VCA_RULE_ALARM(pAlarmInfo);
                      //可以在这里获取报警信息进行处理
                      break;
                  //其他报警类型的处理
                  default:
                      break;
              }
      
          }
      }
      

      2.在需要开启监听的地方,创建AlarmCallBack对象并注册为SDK的回调函数,例如:

      HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
      if (!hCNetSDK.NET_DVR_Init()) {
          //初始化SDK失败
          return false;
      }
      //登录设备
      //...
      //开启报警监听
      HCNetSDK.NET_DVR_SETUPALARM_PARAM setupAlarmParam = new HCNetSDK.NET_DVR_SETUPALARM_PARAM();
      setupAlarmParam.byAlarmInfoType = 1;  //低速网络下无法使用压缩版本的上传报警信息,需要使用纯IP方式上传,此处设置为1即可
      setupAlarmParam.byLevel = 1;  //报警信息分级,1表示普通级别
      NativeLong lAlarmHandle = hCNetSDK.NET_DVR_SetupAlarmChan_V41(lUserID, setupAlarmParam);
      if (lAlarmHandle.longValue() < 0) {
          //开启监听失败
          //...
      }
      //注册回调函数
      AlarmCallBack alarmCallBack = new AlarmCallBack();
      hCNetSDK.NET_DVR_SetDVRMessageCallBack_V31(alarmCallBack, null);
      

      3.在AlarmCallBack类中的invoke方法中,可以根据报警类型进行处理,例如:

      @Override
      public void invoke(NativeLong lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen,
                         Pointer pUser) {
          switch (lCommand.intValue()) {
              case HCNetSDK.COMM_ALARM_RULE:
                  HCNetSDK.NET_VCA_RULE_ALARM pRule = new HCNetSDK.NET_VCA_RULE_ALARM(pAlarmInfo);
                  //可以在这里获取报警信息进行处理
                  //例如获取人脸坐标
                  HCNetSDK.NET_VCA_RECT struRegion = pRule.struRegion;
                  int dwFacePicLen = pRule.dwFacePicLen;
                  Pointer pFacePicBuffer = pRule.pBuffer1;
                  //使用OpenCV等开源库处理图片数据
                  //...
                  break;
              //其他报警类型的处理
              default:
                  break;
          }
      
      }
      

      需要注意的是,该回调函数是在SDK线程中执行的,如果需要更新UI等操作,需要使用Android的Handler等方式进行处理。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月1日
  • 已采纳回答 4月23日
  • 创建了问题 4月21日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改