liusuyi
2024-05-27 7c366e0d5acb41870c6ce6d17795de9e6d0fdcc8
ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java
@@ -138,15 +138,11 @@
                }
            }
            if (GlobalVariable.loginMap.containsKey(camera.getId())) {
                GlobalVariable.loginMap.remove(camera.getId());
            }
            //删除管理通道
            ardChannelService.deleteArdChannelByDeviceId(camera.getId());
//            if (GlobalVariable.loginMap.containsKey(camera.getId())) {
//                GlobalVariable.loginMap.remove(camera.getId());
//            }
            GlobalVariable.loginMap.put(camera.getId(), lUserID);
            GlobalVariable.loginCameraMap.put(lUserID, camera);
            camera.setLoginId(lUserID);
            camera.setState("1");
            int chanNum = m_strDeviceInfo.struDeviceV30.byChanNum;
@@ -158,14 +154,10 @@
            camera.setChanNum(chanNum);
            camera.setStartDChan(startDchan);
            //获取最新通道
            List<ArdChannel> cameraChannelList = getIPChannelInfo(camera);
            List<ArdChannel> cameraChannelList = getChannels(camera);
            if (cameraChannelList.size() > 0) {
                camera.setChannelList(cameraChannelList);
                camera.setChanNum(cameraChannelList.size());
                for (ArdChannel channel : cameraChannelList) {
                    channel.setId(IdUtils.simpleUUID());
                    ardChannelService.insertArdChannel(channel);
                }
                ardCamerasService.updateArdCameras(camera);
                //添加到流媒体
                addVtdu(camera);
@@ -252,15 +244,11 @@
                    }
                }
            }
            if (GlobalVariable.loginMap.containsKey(camera.getId())) {
                GlobalVariable.loginMap.remove(camera.getId());
            }
            //删除管理通道
            ardChannelService.deleteArdChannelByDeviceId(camera.getId());
//            if (GlobalVariable.loginMap.containsKey(camera.getId())) {
//                GlobalVariable.loginMap.remove(camera.getId());
//            }
            GlobalVariable.loginMap.put(camera.getId(), lUserID);
            GlobalVariable.loginCameraMap.put(lUserID, camera);
            camera.setLoginId(lUserID);
            camera.setState("1");
            int chanNum = m_strDeviceInfo.struDeviceV30.byChanNum;
@@ -271,21 +259,15 @@
            }
            camera.setChanNum(chanNum);
            camera.setStartDChan(startDchan);
            //获取最新通道
            List<ArdChannel> cameraChannelList = getIPChannelInfo(camera);
            List<ArdChannel> cameraChannelList = getChannels(camera);
            if (cameraChannelList.size() > 0) {
                camera.setChannelList(cameraChannelList);
                camera.setChanNum(cameraChannelList.size());
                for (ArdChannel channel : cameraChannelList) {
                    channel.setId(IdUtils.simpleUUID());
                    ardChannelService.insertArdChannel(channel);
                }
                ardCamerasService.updateArdCameras(camera);
                //添加到流媒体
                addVtdu(camera);
            }
            //创建引导队列
            createGuideQueue(camera);
            return AjaxResult.success("设备登录成功");
@@ -297,12 +279,14 @@
    //创建引导队列
    private void createGuideQueue(ArdCameras camera) {
        if (camera.getGdtype().equals("1")) {
        if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) {
            Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator();
            PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator);
            GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue);
            //启动队列处理器
            queueHandler.process(camera.getId());
            }
        }
    }
@@ -1845,10 +1829,12 @@
    }
    //获取IP通道
    public List<ArdChannel> getIPChannelInfo(ArdCameras camera) {
    public List<ArdChannel> getChannels(ArdCameras camera) {
        //获取通道
        List<ArdChannel> channelList = new ArrayList<>();
        try {
            //删除管理通道
            ardChannelService.deleteArdChannelByDeviceId(camera.getId());
            IntByReference ibrBytesReturned = new IntByReference(0);//获取IP接入配置参数
            HCNetSDK.NET_DVR_IPPARACFG_V40 m_strIpparaCfg = new HCNetSDK.NET_DVR_IPPARACFG_V40();
            m_strIpparaCfg.write();
@@ -1858,7 +1844,7 @@
            m_strIpparaCfg.read();
            //log.debug("起始数字通道号:" + m_strIpparaCfg.dwStartDChan);//m_strIpparaCfg.dwDChanNum
            for (int iChannum = 0; iChannum < camera.getChanNum(); iChannum++) {
                ArdChannel ardChannel = new ArdChannel();
                ArdChannel channel = new ArdChannel();
                int chanNo = iChannum + camera.getStartDChan();
                HCNetSDK.NET_DVR_PICCFG_V40 strPicCfg = new HCNetSDK.NET_DVR_PICCFG_V40();
                strPicCfg.dwSize = strPicCfg.size();
@@ -1876,22 +1862,21 @@
                if (m_strIpparaCfg.struStreamMode[iChannum].byGetStreamType == 0) {
                    m_strIpparaCfg.struStreamMode[iChannum].uGetStream.setType(HCNetSDK.NET_DVR_IPCHANINFO.class);
                    m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.read();
                    int channel = m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPID + m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPIDHigh * 256;
                    int channelNo = m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPID + m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPIDHigh * 256;
                    String channelName = new String(strPicCfg.sChanName, "GBK").trim();
                    channelName = channelName.equals("") ? "通道" + chanNo : channelName;
                    ardChannel.setDeviceId(camera.getId());
                    ardChannel.setName(channelName);
                    ardChannel.setChanNo(chanNo);
                    channel.setDeviceId(camera.getId());
                    channel.setName(channelName);
                    channel.setChanNo(chanNo);
                    if (camera.getGdtype().equals("3") || camera.getGdtype().equals("2")) {
                        //NVR只获取在线通道
                        if (m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byEnable == 1) {
                            //log.debug("IP通道" + channum + "在线");
                            channelList.add(ardChannel);
                        }
                    } else {
                        channelList.add(ardChannel);
                        //NVR过滤离线通道
                        if (m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byEnable != 1) {
                            continue;
                    }
                }
                    channelList.add(channel);
                }
                ardChannelService.insertArdChannel(channel);
            }
        } catch (Exception ex) {
            log.error("获取IP通道异常:" + ex.getMessage());