‘liusuyi’
2023-10-24 4a293865ac437a812eea8800cc0b04314efbd210
ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java
@@ -74,7 +74,8 @@
    @Override
    public Boolean login(ArdCameras camera) {
        LoginModule.init(disConnect, haveReConnect);
        LLong loginId = LoginModule.login(camera.getIp(), camera.getPort(), camera.getUsername(), camera.getPassword());
        NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();
        LLong loginId = LoginModule.login(camera.getIp(), camera.getPort(), camera.getUsername(), camera.getPassword(), m_stDeviceInfo);
        if (loginId.longValue() > 0) {
            //log.debug(camera.getIp() + ":" + camera.getPort() + "登录成功");
            if (GlobalVariable.loginMap.containsKey(camera.getId())) {
@@ -83,13 +84,14 @@
            //删除管理通道
            ardChannelService.deleteArdChannelByDeviceId(camera.getId());
            camera.setState("1");
            camera.setChanNum(LoginModule.m_stDeviceInfo.byChanNum);
            camera.setChanNum(m_stDeviceInfo.byChanNum);
            camera.setStartDChan(1);
            camera.setLoginId((int) loginId.longValue());
            ardCamerasService.updateArdCameras(camera);
            GlobalVariable.loginMap.put(camera.getId(), loginId);
            //获取最新通道
            for (int i = 1; i < LoginModule.m_stDeviceInfo.byChanNum + 1; i++) {
            for (int i = 1; i < m_stDeviceInfo.byChanNum + 1; i++) {
                ArdChannel channel = new ArdChannel();
                AV_CFG_ChannelName av_cfg_channelName = new AV_CFG_ChannelName();
                boolean b = ConfigModule.GetNewDevConfig(loginId, i - 1, CFG_CMD_CHANNELTITLE, av_cfg_channelName);
@@ -115,7 +117,6 @@
                if (vtdu != null) {
                    vtduService.deleteVtduByName(name);
                }
                //添加到流媒体
                CameraCmd cmd = new CameraCmd(camera.getId(), channel.getChanNo());
                Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd);
@@ -792,62 +793,66 @@
    @Override
    public Map<String, Object> getVideoCompressionCfg(CameraCmd cmd) {
        Map<String, Object> map = new HashMap<>();
        String cameraId = cmd.getCameraId();
        Integer chanNo = cmd.getChanNo();
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return null;
        }
        LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
        CFG_ENCODE_INFO cfg_encode_info = new CFG_ENCODE_INFO();
        cfg_encode_info.nChannelID = chanNo - 1;
        boolean b = ConfigModule.GetNewDevConfig(loginId, chanNo - 1, CFG_CMD_ENCODE, cfg_encode_info);
        if (b) {
            int emCompression = cfg_encode_info.stuMainStream[0].stuVideoFormat.emCompression;//视频格式
            String videoEncType = "";
            switch (emCompression) {
                case 0:
                    videoEncType = "MPEG4";
                    break;
                case 1:
                    videoEncType = "MS-MPEG4";
                    break;
                case 2:
                    videoEncType = "MPEG2";
                    break;
                case 3:
                    videoEncType = "MPEG1";
                    break;
                case 4:
                    videoEncType = "H.263";
                    break;
                case 5:
                    videoEncType = "MJPG";
                    break;
                case 6:
                    videoEncType = "FCC-MPEG4";
                    break;
                case 7:
                    videoEncType = "标准h264";
                    break;
                case 8:
                    videoEncType = "标准h265";
                    break;
                case 9:
                    videoEncType = "SVAC";
                    break;
                default:
                    videoEncType = "未知";
                    break;
        try {
            String cameraId = cmd.getCameraId();
            Integer chanNo = cmd.getChanNo();
            if (!GlobalVariable.loginMap.containsKey(cameraId)) {
                return null;
            }
            int nBitRate = cfg_encode_info.stuMainStream[0].stuVideoFormat.nBitRate;
            int nWidth = cfg_encode_info.stuMainStream[0].stuVideoFormat.nWidth;
            int nHeight = cfg_encode_info.stuMainStream[0].stuVideoFormat.nHeight;
            String resolution = nWidth + "*" + nHeight;
            float nFrameRate = cfg_encode_info.stuMainStream[0].stuVideoFormat.nFrameRate;
            map.put("resolution", resolution);//分辨率
            map.put("videoBitrate", String.valueOf(nBitRate));//比特率
            map.put("videoEncType", videoEncType);//编码
            map.put("nFrameRate", String.valueOf(nFrameRate));//帧率
            LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
            CFG_ENCODE_INFO cfg_encode_info = new CFG_ENCODE_INFO();
            cfg_encode_info.nChannelID = chanNo - 1;
            boolean b = ConfigModule.GetNewDevConfig(loginId, chanNo - 1, CFG_CMD_ENCODE, cfg_encode_info);
            if (b) {
                int emCompression = cfg_encode_info.stuMainStream[0].stuVideoFormat.emCompression;//视频格式
                String videoEncType = "";
                switch (emCompression) {
                    case 0:
                        videoEncType = "MPEG4";
                        break;
                    case 1:
                        videoEncType = "MS-MPEG4";
                        break;
                    case 2:
                        videoEncType = "MPEG2";
                        break;
                    case 3:
                        videoEncType = "MPEG1";
                        break;
                    case 4:
                        videoEncType = "H.263";
                        break;
                    case 5:
                        videoEncType = "MJPG";
                        break;
                    case 6:
                        videoEncType = "FCC-MPEG4";
                        break;
                    case 7:
                        videoEncType = "标准h264";
                        break;
                    case 8:
                        videoEncType = "标准h265";
                        break;
                    case 9:
                        videoEncType = "SVAC";
                        break;
                    default:
                        videoEncType = "未知";
                        break;
                }
                int nBitRate = cfg_encode_info.stuMainStream[0].stuVideoFormat.nBitRate;
                int nWidth = cfg_encode_info.stuMainStream[0].stuVideoFormat.nWidth;
                int nHeight = cfg_encode_info.stuMainStream[0].stuVideoFormat.nHeight;
                String resolution = nWidth + "*" + nHeight;
                float nFrameRate = cfg_encode_info.stuMainStream[0].stuVideoFormat.nFrameRate;
                map.put("resolution", resolution);//分辨率
                map.put("videoBitrate", String.valueOf(nBitRate));//比特率
                map.put("videoEncType", videoEncType);//编码
                map.put("nFrameRate", String.valueOf(nFrameRate));//帧率
            }
        } catch (Exception ex) {
            log.error("取码流压缩参数异常:" + ex.getMessage());
        }
        return map;
    }
@@ -881,7 +886,7 @@
    // 设备断线回调: 当设备出现断线时,SDK会调用该函数
    private static class DisConnect implements NetSDKLib.fDisConnect {
        public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
            log.warn("Device["+pchDVRIP+"] Port["+nDVRPort+"] DisConnect!");
            log.warn("Device[" + pchDVRIP + "] Port[" + nDVRPort + "] DisConnect!");
        }
    }
@@ -889,7 +894,7 @@
    private static class HaveReConnect implements NetSDKLib.fHaveReConnect {
        @Override
        public void invoke(LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) {
            log.warn("ReConnect Device["+pchDVRIP+"] Port["+nDVRPort+"]");
            log.warn("ReConnect Device[" + pchDVRIP + "] Port[" + nDVRPort + "]");
        }
    }