漫山遍野茶树开花 2023-11-13 18:05 采纳率: 0%
浏览 3

大华海康sdk,几百摄像头同时监听移动报警

大华摄像头,通过java sdk调用摄像头移动侦测报警监听,一共1百多个摄像头,通过线程池创建线程达到一百多摄像头同时监听报警的功能,但是出现了问题,有几个摄像头有人经过,摄像头报警,但是不通过回调函数返回给我数据,不知道什么原因,是因为线程冲突吗?还是sdk本身线程不够?

static AlarmServiceImpl cbMessage = new AlarmServiceImpl();
private static final ThreadPoolExecutor threadpool = new ThreadPoolExecutor(500, 1001,
            15L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());

  /**
     * 登录摄像头
     */
    @PostConstruct
    public void startTask() {


        List<CameraData> list = cameraDataService.selectCameraDataList(cameraData);
        init(disConnect, haveReConnect);
        for (int i = 0; i < list.size(); i++) {
            socketCreate(list.get(i).getIp(), list.get(i).getSerialnumber(), list.get(i).getStatus());
        }
        netsdk.CLIENT_SetDVRMessCallBack(cbMessage, null);
    }

    static class Dahua implements Runnable {
        static NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE;
        public static NetSDKLib configsdk     = NetSDKLib.CONFIG_INSTANCE;

        // 设备信息
        public static NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();

        // 登陆句柄
        public static NetSDKLib.LLong m_hLoginHandle = new NetSDKLib.LLong(0);

        private static boolean bInit    = false;
        private static boolean bLogopen = false;

        String ip = "";
        String serialnumber = "";
        String status = "";

        public Dahua(String ip, String serialnumber, String status) {
            this.ip = ip;
            this.serialnumber = serialnumber;
            this.status = status;
        }


        public static boolean login(String m_strIp, int m_nPort, String m_strUser, String m_strPassword) {
            //IntByReference nError = new IntByReference(0);
            //入参
            NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY pstInParam=new NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY();
            pstInParam.nPort=m_nPort;
            pstInParam.szIP=m_strIp.getBytes();
            pstInParam.szPassword=m_strPassword.getBytes();
            pstInParam.szUserName=m_strUser.getBytes();
            //出参
            NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY pstOutParam=new NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY();
            pstOutParam.stuDeviceInfo=m_stDeviceInfo;
            //m_hLoginHandle = netsdk.CLIENT_LoginEx2(m_strIp, m_nPort, m_strUser, m_strPassword, 0, null, m_stDeviceInfo, nError);
            m_hLoginHandle=netsdk.CLIENT_LoginWithHighLevelSecurity(pstInParam, pstOutParam);
            if(m_hLoginHandle.longValue() == 0) {
                System.err.printf("Login Device[%s] Port[%d]Failed. %s\n", m_strIp, m_nPort, ToolKits.getErrorCodePrint());
            } else {
               log.info("Login Success [ " + m_strIp + " ]");
            }

            return m_hLoginHandle.longValue() == 0? false:true;
        }

    
        @SneakyThrows
        @Override
        public void run() {
            try {
                if (login(ip, 37777, "admin", "qwer")) {
                    Map<String, NetSDKLib.LLong> map = new HashMap<>();
                    map.put(ip,m_hLoginHandle);

              
                    log.info(ip + ":监听开始:" + netsdk.CLIENT_StartListenEx(m_hLoginHandle));
                } else {
                  
                    throw new Exception("终止!");
                }
            } catch (Exception e) {
                log.info("终止");
            }
        }
    }
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-14 05:05
    关注

    【相关推荐】



    • 你可以看下这个问题的回答https://ask.csdn.net/questions/7488188
    • 你也可以参考下这篇文章:微信开发(3):微信公众号发现金红包功能开发,利用第三方SDK实现(Java)
    • 您还可以看一下 张先凤老师的《计算机体系结构——软件篇4》 之 操作系统视频课程课程中的 软件分类和库、框架、SDK之间的关系小节, 巩固相关知识点
    • 除此之外, 这篇博客: java 使用sdk接入支付宝扫描当面付 扫描二维码支付,退款以及退款查询 封装好了直接用就行中的 描述: 支付回调是支付宝来访问你的地址,这个地址必须外网能够访问到(作用就是告诉你当前订单处于什么状态)这里不多解释,直接贴出我项目中的部分代码 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
      /**
           * 扫码的回调
           * @param request
           * @return
           */
          @RequestMapping(value = "notify_url",method = RequestMethod.POST)
          public String notifyurl(HttpServletRequest request) {
              //这里是将阿里回调带回来的参数封装进map里面 然后可以将一些我们需要的数据保存到数据库
              Map<String,String> map = alipayService.alipayNotify(request);
              if (map.get("trade_status").equals("TRADE_SUCCESS")) {//当状态为TRADE_SUCCESS表示用户支付成功啦
                  //响应前端使用的是websocket 可以参考我的另一个项目springbootwebsocket
                  /************前端响应支付成功让前端跳转到支付成功页面**************/
                  String url = websocketurl+"userid="+map.get("out_trade_no");
                  url+="&path=success";
                  System.out.println(url);
                  HttpClientUtils.get(url);
                  /*********************************************************/
                  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                  Alipay alipay = new Alipay();
                  alipay.setOuttradeno(map.get("out_trade_no"));
                  alipay.setBuyerid(map.get("buyer_id"));
                  alipay.setBuyerlogonid(map.get("buyer_logon_id"));
                  alipay.setTotalamount(map.get("total_amount"));
                  try {
                      alipay.setGmtcreate(sdf.parse(map.get("gmt_create")));
                      alipay.setGmtpayment(sdf.parse(map.get("gmt_payment")));
                  } catch (ParseException e) {
                      e.printStackTrace();
                  }
                  alipay.setPaystatus((byte)1);
                  alipay.setSubject(map.get("subject"));
                  alipay.setReceiptamount(map.get("total_amount"));
                  AlipayExample example = new AlipayExample();
                  example.createCriteria().andOuttradenoEqualTo(alipay.getOuttradeno());
                  alipayModelService.updateByExampleSelective(alipay,example);
                  }
                  //如果我们这边接收到了支付成功就该返回一个success的字符串给支付宝那边,避免支付宝一直不停的访问我们回调的url
                  return "success";
              } else {
                  return "failer";
              }
          }

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 11月13日

悬赏问题

  • ¥15 sqlserver执行存储过程报错
  • ¥100 nuxt、uniapp、ruoyi-vue 相关发布问题
  • ¥15 浮窗和全屏应用同时存在,全屏应用输入法无法弹出
  • ¥100 matlab2009 32位一直初始化
  • ¥15 Expected type 'str | PathLike[str]…… bytes' instead
  • ¥15 为什么在iis上部署网站,服务器可以访问,但是本地电脑访问不了
  • ¥15 三极管电路求解,已知电阻电压和三级关放大倍数
  • ¥15 ADS时域 连续相位观察方法
  • ¥15 Opencv配置出错
  • ¥15 关于模型导入UNITY的.FBX: Check external application preferences.警告。