From 7265b3d4b666f3a59f69c6dbc556098475041a27 Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期一, 16 十月 2023 17:25:18 +0800 Subject: [PATCH] 1. 增加获取和设置PTZ接口 2. 增加相机抓图和录像接口 3. 增加设置零方位角接口 4. 增加在线状态检测接口 5. 增加云台控制接口 --- ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java | 787 ++++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 533 insertions(+), 254 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java index d2e4ae3..5e66b18 100644 --- a/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java +++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java @@ -1,255 +1,534 @@ -package com.ruoyi.device.dhsdk.service.impl; - -import com.ruoyi.common.utils.uuid.IdUtils; -import com.ruoyi.device.camera.domain.ArdCameras; -import com.ruoyi.device.camera.domain.CameraCmd; -import com.ruoyi.device.camera.service.IArdCamerasService; -import com.ruoyi.device.channel.domain.ArdChannel; -import com.ruoyi.device.channel.service.IArdChannelService; -import com.ruoyi.device.dhsdk.common.Res; -import com.ruoyi.device.dhsdk.lib.NetSDKLib; -import com.ruoyi.device.dhsdk.lib.NetSDKLib.LLong; -import com.ruoyi.device.dhsdk.lib.ToolKits; -import com.ruoyi.device.dhsdk.lib.enumeration.EM_NEW_QUERY_SYSTEM_INFO; -import com.ruoyi.device.dhsdk.module.ConfigModule; -import com.ruoyi.device.dhsdk.module.LoginModule; -import com.ruoyi.device.dhsdk.module.PtzControlModule; -import com.ruoyi.device.dhsdk.service.IDhClientService; -import com.ruoyi.device.hiksdk.common.GlobalVariable; -import com.ruoyi.device.hiksdk.sdk.HCNetSDK; -import com.sun.jna.Pointer; -import lombok.extern.slf4j.Slf4j; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import java.text.DecimalFormat; -import java.util.*; - -import static com.ruoyi.device.dhsdk.lib.NetSDKLib.NET_DEVSTATE_PTZ_LOCATION; -import static com.ruoyi.device.dhsdk.lib.ToolKits.getErrorCodePrint; -import static com.ruoyi.device.hiksdk.sdk.HCNetSDK.NET_DVR_CHECK_USER_STATUS; - -/** - * @ClassName DhSdkServiceImpl - * @Description: - * @Author 鍒樿嫃涔� - * @Date 2023/10/13 21:19 - * @Version 1.0 - */ -@Service -@Slf4j(topic = "dhSdk") -public class DhClientServiceImpl implements IDhClientService { - @Resource - private IArdCamerasService ardCamerasService; - @Resource - private IArdChannelService ardChannelService; - - private Vector<String> chnlist = new Vector<String>(); - // 璁惧鏂嚎閫氱煡鍥炶皟 - private static DisConnect disConnect = new DisConnect(); - // 缃戠粶杩炴帴鎭㈠ - private static HaveReConnect haveReConnect = new HaveReConnect(); - - - @Override - public void loginAll() { - try { - ArdCameras ardCamera = new ArdCameras(); - ardCamera.setFactory("2");//鑾峰彇澶у崕鐩告満 - List<ArdCameras> ardCameras = ardCamerasService.selectArdCamerasListNoDataScope(ardCamera); - for (ArdCameras camera : ardCameras) { - Thread.sleep(500); - //寮傛鐧诲綍 - login(camera); - } - } catch (Exception ex) { - log.error("鍒濆鍖栫櫥褰曠浉鏈哄紓甯革細" + ex.getMessage()); - } - } - - @Override - public Boolean init() { - return LoginModule.init(disConnect, haveReConnect); // 鎵撳紑宸ョ▼锛屽垵濮嬪寲 - } - - @Override - @Async - public Boolean login(ArdCameras camera) { - LLong loginId = LoginModule.login(camera.getIp(), camera.getPort(), camera.getUsername(), camera.getPassword()); - if (loginId.longValue() > 0) { - //log.debug(camera.getIp() + ":" + camera.getPort() + "鐧诲綍鎴愬姛"); - if (GlobalVariable.loginMap.containsKey(camera.getId())) { - GlobalVariable.loginMap.remove(camera.getId()); - } - //鍒犻櫎绠$悊閫氶亾 - ardChannelService.deleteArdChannelByDeviceId(camera.getId()); - camera.setState("1"); - camera.setChanNum(LoginModule.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++) { - chnlist.add(Res.string().getChannel() + " " + String.valueOf(i)); - ArdChannel channel = new ArdChannel(); - channel.setDeviceId(camera.getId()); - channel.setName("閫氶亾" + i); - channel.setId(IdUtils.simpleUUID()); - channel.setChanNo(i); - ardChannelService.insertArdChannel(channel); - } - } else { - //log.debug(camera.getIp() + ":" + camera.getPort() + "鐧诲綍澶辫触"); - camera.setChanNum(0); - camera.setLoginId(-1); - camera.setState("0"); - ardCamerasService.updateArdCameras(camera); - return false; - } - - return true; - } - - @Override - public Boolean logout(String cameraId) { - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; - } - LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); - return LoginModule.logout(loginId); - } - - @Override - public boolean isOnLine(CameraCmd cmd) { - try { - String cameraId = cmd.getCameraId(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; - } - LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); - - - } catch (Exception ex) { - log.error("妫�娴嬪湪绾垮紓甯革細" + ex.getMessage()); - return false; - } - - return false; - } - - @Override - public boolean pTZControl(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - boolean enable = cmd.isEnable(); - Integer chanNo = cmd.getChanNo(); - Integer speed = cmd.getSpeed(); - Integer code = cmd.getCode(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return false; - } - LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); - int dwStop; - if (enable) { - dwStop = 0;//寮�鍚� - } else { - dwStop = 1;//鍏抽棴 - } - int dwPTZCommand = -1; - switch (code) { - /*鏂瑰悜*/ - case 1: - dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP; - break; - case 2: - dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL; - break; - case 3: - dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP; - break; - case 4: - dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL; - break; - case 5: - dwPTZCommand = HCNetSDK.RUN_SEQ; - break; - case 6: - dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL; - break; - case 7: - dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN; - break; - case 8: - dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL; - break; - case 9: - dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN; - break; - /*鐒﹁窛*/ - case 10: - dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL; - break; - case 11: - dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL; - break; - /*鐒︾偣*/ - case 12: - dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL; - break; - case 13: - dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL; - break; - /*鍏夊湀*/ - case 14: - dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL; - break; - case 15: - dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL; - break; - } - boolean bool = LoginModule.netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, dwPTZCommand, speed, speed, 0, dwStop); - if (!bool) { - log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint()); - } - return bool; - } - - @Override - public Map<String, Object> getPtz(CameraCmd cmd) { - Map<String, Object> ptzMap = new HashMap<>(); - String cameraId = cmd.getCameraId(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return null; - } - LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); - NetSDKLib.NET_PTZ_LOCATION_INFO dh_ptz_location_info = new NetSDKLib.NET_PTZ_LOCATION_INFO(); - boolean b = ConfigModule.queryDevState(loginId, NET_DEVSTATE_PTZ_LOCATION, dh_ptz_location_info); - if (b) { - DecimalFormat df = new DecimalFormat("0.0");//璁剧疆淇濈暀浣嶆暟 - String nPTZPan = df.format((float)dh_ptz_location_info.nPTZPan / 10); - String nPTZTilt = df.format((float)dh_ptz_location_info.nPTZTilt/10); - String nPTZZoom = df.format((float)dh_ptz_location_info.nPTZZoom); - ptzMap.put("p", nPTZPan); - ptzMap.put("t", nPTZTilt); - ptzMap.put("z", nPTZZoom); - } - return ptzMap; - } - - // 璁惧鏂嚎鍥炶皟: 閫氳繃 CLIENT_Init 璁剧疆璇ュ洖璋冨嚱鏁帮紝褰撹澶囧嚭鐜版柇绾挎椂锛孲DK浼氳皟鐢ㄨ鍑芥暟 - private static class DisConnect implements NetSDKLib.fDisConnect { - public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) { - System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort); - } - } - - // 缃戠粶杩炴帴鎭㈠锛岃澶囬噸杩炴垚鍔熷洖璋� - // 閫氳繃 CLIENT_SetAutoReconnect 璁剧疆璇ュ洖璋冨嚱鏁帮紝褰撳凡鏂嚎鐨勮澶囬噸杩炴垚鍔熸椂锛孲DK浼氳皟鐢ㄨ鍑芥暟 - private static class HaveReConnect implements NetSDKLib.fHaveReConnect { - @Override - public void invoke(LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) { - System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort); - } - } +package com.ruoyi.device.dhsdk.service.impl; + +import com.ruoyi.common.annotation.SdkOperate; +import com.ruoyi.common.utils.file.FileUtils; +import com.ruoyi.common.utils.file.MimeTypeUtils; +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.common.utils.uuid.IdUtils; +import com.ruoyi.device.camera.domain.ArdCameras; +import com.ruoyi.device.camera.domain.CameraCmd; +import com.ruoyi.device.camera.service.IArdCamerasService; +import com.ruoyi.device.channel.domain.ArdChannel; +import com.ruoyi.device.channel.service.IArdChannelService; +import com.ruoyi.device.dhsdk.common.Res; +import com.ruoyi.device.dhsdk.lib.NetSDKLib; +import com.ruoyi.device.dhsdk.lib.NetSDKLib.LLong; +import com.ruoyi.device.dhsdk.module.CapturePictureModule; +import com.ruoyi.device.dhsdk.module.ConfigModule; +import com.ruoyi.device.dhsdk.module.LoginModule; +import com.ruoyi.device.dhsdk.module.RealPlayModule; +import com.ruoyi.device.dhsdk.service.IDhClientService; +import com.ruoyi.device.hiksdk.common.GlobalVariable; +import com.ruoyi.device.hiksdk.sdk.HCNetSDK; +import com.ruoyi.utils.gis.GisUtil; +import com.ruoyi.utils.minio.MinioUtil; +import com.sun.jna.Pointer; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.io.ByteArrayInputStream; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.text.DecimalFormat; +import java.util.*; + +import static com.ruoyi.device.dhsdk.lib.NetSDKLib.NET_DEVSTATE_ONLINE; +import static com.ruoyi.device.dhsdk.lib.NetSDKLib.NET_DEVSTATE_PTZ_LOCATION; +import static com.ruoyi.device.dhsdk.lib.ToolKits.getErrorCodePrint; +import static com.ruoyi.device.dhsdk.module.LoginModule.netsdk; +import static com.ruoyi.device.hiksdk.sdk.HCNetSDK.NET_DVR_SET_PTZPOS; + + +/** + * @ClassName DhSdkServiceImpl + * @Description: + * @Author 鍒樿嫃涔� + * @Date 2023/10/13 21:19 + * @Version 1.0 + */ +@Service +@Slf4j(topic = "dhSdk") +public class DhClientServiceImpl implements IDhClientService { + @Resource + private IArdCamerasService ardCamerasService; + @Resource + private IArdChannelService ardChannelService; + @Value("${minio.endpoint}") + private String minioEndPoint; + + private Vector<String> chnlist = new Vector<String>(); + // 璁惧鏂嚎閫氱煡鍥炶皟 + private static DisConnect disConnect = new DisConnect(); + // 缃戠粶杩炴帴鎭㈠ + private static HaveReConnect haveReConnect = new HaveReConnect(); + + + @Override + public void loginAll() { + try { + ArdCameras ardCamera = new ArdCameras(); + ardCamera.setFactory("2");//鑾峰彇澶у崕鐩告満 + List<ArdCameras> ardCameras = ardCamerasService.selectArdCamerasListNoDataScope(ardCamera); + for (ArdCameras camera : ardCameras) { + Thread.sleep(500); + //寮傛鐧诲綍 + login(camera); + } + } catch (Exception ex) { + log.error("鍒濆鍖栫櫥褰曠浉鏈哄紓甯革細" + ex.getMessage()); + } + } + + @Override + public Boolean init() { + return LoginModule.init(disConnect, haveReConnect); // 鎵撳紑宸ョ▼锛屽垵濮嬪寲 + } + + @Override + @Async + public Boolean login(ArdCameras camera) { + LLong loginId = LoginModule.login(camera.getIp(), camera.getPort(), camera.getUsername(), camera.getPassword()); + if (loginId.longValue() > 0) { + //log.debug(camera.getIp() + ":" + camera.getPort() + "鐧诲綍鎴愬姛"); + if (GlobalVariable.loginMap.containsKey(camera.getId())) { + GlobalVariable.loginMap.remove(camera.getId()); + } + //鍒犻櫎绠$悊閫氶亾 + ardChannelService.deleteArdChannelByDeviceId(camera.getId()); + camera.setState("1"); + camera.setChanNum(LoginModule.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++) { + chnlist.add(Res.string().getChannel() + " " + String.valueOf(i)); + ArdChannel channel = new ArdChannel(); + channel.setDeviceId(camera.getId()); + channel.setName("閫氶亾" + i); + channel.setId(IdUtils.simpleUUID()); + channel.setChanNo(i); + ardChannelService.insertArdChannel(channel); + } + } else { + //log.debug(camera.getIp() + ":" + camera.getPort() + "鐧诲綍澶辫触"); + camera.setChanNum(0); + camera.setLoginId(-1); + camera.setState("0"); + ardCamerasService.updateArdCameras(camera); + return false; + } + + return true; + } + + @Override + public Boolean logout(String cameraId) { + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); + return LoginModule.logout(loginId); + } + + @Override + public boolean isOnLine(CameraCmd cmd) { + try { + String cameraId = cmd.getCameraId(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); + NetSDKLib.NET_WORKSTATE dh_ptz_location_info = new NetSDKLib.NET_WORKSTATE(); + boolean b = ConfigModule.queryDevState(loginId, NET_DEVSTATE_ONLINE, dh_ptz_location_info); + if (!b) { + return false; + } + } catch (Exception ex) { + log.error("妫�娴嬪湪绾垮紓甯革細" + ex.getMessage()); + return false; + } + return true; + } + + @Override + public boolean pTZControl(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + boolean enable = cmd.isEnable(); + Integer chanNo = cmd.getChanNo(); + Integer speed = cmd.getSpeed(); + Integer code = cmd.getCode(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); + int dwStop; + if (enable) { + dwStop = 0;//寮�鍚� + } else { + dwStop = 1;//鍏抽棴 + } + int dwPTZCommand = -1; + switch (code) { + /*鏂瑰悜*/ + case 1: + dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP; + break; + case 2: + dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL; + break; + case 3: + dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP; + break; + case 4: + dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL; + break; + case 5: + dwPTZCommand = HCNetSDK.RUN_SEQ; + break; + case 6: + dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL; + break; + case 7: + dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN; + break; + case 8: + dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL; + break; + case 9: + dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN; + break; + /*鐒﹁窛*/ + case 10: + dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL; + break; + case 11: + dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL; + break; + /*鐒︾偣*/ + case 12: + dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL; + break; + case 13: + dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL; + break; + /*鍏夊湀*/ + case 14: + dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL; + break; + case 15: + dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL; + break; + } + boolean bool = netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, dwPTZCommand, speed, speed, 0, dwStop); + if (!bool) { + log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint()); + } + return bool; + } + + @Override + public Map<String, Object> getPtz(CameraCmd cmd) { + Map<String, Object> ptzMap = new HashMap<>(); + String cameraId = cmd.getCameraId(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return null; + } + LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); + NetSDKLib.NET_PTZ_LOCATION_INFO dh_ptz_location_info = new NetSDKLib.NET_PTZ_LOCATION_INFO(); + boolean b = ConfigModule.queryDevState(loginId, NET_DEVSTATE_PTZ_LOCATION, dh_ptz_location_info); + if (b) { + DecimalFormat df = new DecimalFormat("0.0");//璁剧疆淇濈暀浣嶆暟 + String nPTZPan = df.format((float) dh_ptz_location_info.nPTZPan / 10); + String nPTZTilt = df.format((float) dh_ptz_location_info.nPTZTilt / 10); + String nPTZZoom = df.format((float) dh_ptz_location_info.nPTZZoom); + ptzMap.put("p", nPTZPan); + ptzMap.put("t", nPTZTilt); + ptzMap.put("z", nPTZZoom); + } + return ptzMap; + } + + /** + * @鎻忚堪 璁剧疆ptz淇℃伅 + * @鍙傛暟 [userId, channelNum] + * @杩斿洖鍊� boolean + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/1/17 16:36 + * @淇敼浜哄拰鍏跺畠淇℃伅 娉ㄦ剰淇话瑙掑害璐熷�奸渶瑕佸姞涓�360寰楀埌鐨勬鍊艰繘琛岃缃� + */ + @Override + @SdkOperate + public boolean setPtz(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + Integer chanNo = cmd.getChanNo(); + Map<String, Double> ptz = cmd.getPtzMap(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); + try { + int p = (int) (ptz.get("p") * 10); + int t = (int) (ptz.get("t") * 10); + int z = ptz.get("z").intValue(); + boolean bool = netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_EXACTGOTO, p, t, z, 0); + if (!bool) { + log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint()); + } + return bool; + } catch (Exception ex) { + log.error(ex.getMessage()); + return false; + } + } + + /** + * @鎻忚堪 璁剧疆闆舵柟浣嶈 + * @鍙傛暟 [userId, channelNum] + * @杩斿洖鍊� boolean + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/1/17 16:36 + * @淇敼浜哄拰鍏跺畠淇℃伅 娉ㄦ剰淇话瑙掑害璐熷�奸渶瑕佸姞涓�360寰楀埌鐨勬鍊艰繘琛岃缃� + */ + @Override + @SdkOperate + public boolean setZeroPtz(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + Integer chanNo = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); + boolean bool = NetSDKLib.NETSDK_INSTANCE.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RESETZERO, 0, 0, 1, 0); + if (!bool) { + log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint()); + } + return bool; + } + + /** + * @鎻忚堪 鎴浘 瀛樻湇鍔″櫒 + * @鍙傛暟 [cameraId, channelNum] + * @杩斿洖鍊� java.lang.String + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/2/2 14:59 + * @淇敼浜哄拰鍏跺畠淇℃伅 + */ + @Override + @SdkOperate + public String picCutCate(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + Integer chanNo = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return ""; + } + LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); + String bucketName = "pic"; + String picUrl = ""; + String bucketObject = "/capture/" + IdUtils.simpleUUID() + ".jpeg"; + fCaptureReceiveCB m_CaptureReceiveCB = new fCaptureReceiveCB(minioEndPoint, bucketName, bucketObject); + CapturePictureModule.setSnapRevCallBack(m_CaptureReceiveCB); + boolean b = CapturePictureModule.remoteCapturePicture(loginId, chanNo - 1); + if (b) { + picUrl = minioEndPoint + "/" + bucketName + bucketObject; + } + return picUrl; + + } + + /** + * @鎻忚堪 鐭椂褰曞儚 + * @鍙傛暟 [userId, channelNum, enable] + * @杩斿洖鍊� void + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/1/20 11:18 + * @淇敼浜哄拰鍏跺畠淇℃伅 + */ + @Override + public String record(CameraCmd cmd) { + try { + String url=""; + String cameraId = cmd.getCameraId(); + Integer chanNo = cmd.getChanNo(); + String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); + boolean enable = cmd.isEnable(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return ""; + } + LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); + + if (enable) { + LLong lRealHandle = new LLong(0); + if (!GlobalVariable.previewMap.containsKey(cameraId)) { + lRealHandle = RealPlayModule.startRealPlay(loginId, chanNo, 0); + if (lRealHandle.longValue() <= 0) { + log.error("鍙栨祦澶辫触" + getErrorCodePrint()); + return ""; + } + log.debug("鍙栨祦鎴愬姛"); + GlobalVariable.previewMap.put(cameraId, lRealHandle.intValue()); + } + if (!netsdk.CLIENT_SaveRealData(lRealHandle, path)) { + log.error("淇濆瓨瑙嗛鏂囦欢鍒颁复鏃舵枃浠跺す澶辫触 閿欒鐮佷负: " + getErrorCodePrint()); + return ""; + } + log.debug("褰曞儚寮�濮�"); + } else { + if (GlobalVariable.previewMap.containsKey(cameraId)) { + LLong lRealHandle = new LLong(GlobalVariable.previewMap.get(cameraId)); + boolean b = netsdk.CLIENT_StopSaveRealData(lRealHandle); + GlobalVariable.previewMap.remove(cameraId); + } + log.debug("褰曞儚鍋滄"); + } + return url; + } catch (Exception ex) { + log.error("褰曞儚寮傚父" + ex.getMessage()); + return ""; + } + } + @Override + public boolean recordStart(CameraCmd cmd) { + try { + String cameraId = cmd.getCameraId(); + Integer chanNo = cmd.getChanNo(); + String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + LLong loginId = (LLong)GlobalVariable.loginMap.get(cameraId); + LLong lRealHandle; + if (GlobalVariable.previewMap.containsKey(cameraId)) { + lRealHandle = new LLong(GlobalVariable.previewMap.get(cameraId)); + netsdk.CLIENT_StopSaveRealData(lRealHandle); + GlobalVariable.previewMap.remove(cameraId); + log.debug("鍋滄褰撳墠褰曞儚"); + } + lRealHandle = RealPlayModule.startRealPlay(loginId, chanNo-1, 0); + if (lRealHandle.longValue() <= 0) { + log.error("鍙栨祦澶辫触" + getErrorCodePrint()); + } + log.debug("鍙栨祦鎴愬姛"); + GlobalVariable.previewMap.put(cameraId, lRealHandle.intValue()); + GlobalVariable.threadMap.put(cameraId, Thread.currentThread().getName()); + if (!netsdk.CLIENT_SaveRealData(lRealHandle, path)) { + log.error("淇濆瓨瑙嗛鏂囦欢鍒颁复鏃舵枃浠跺す澶辫触 閿欒鐮佷负: " +getErrorCodePrint()); + return false; + } + log.debug("褰曞儚寮�濮�"); + return true; + } catch (Exception ex) { + log.error("寮�濮嬪綍鍍忓紓甯�" + ex.getMessage()); + return false; + } + } + @Override + public String recordStopToMinio(CameraCmd cmd) { + String url = ""; + try { + String cameraId = cmd.getCameraId(); + String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return ""; + } + LLong lRealHandle; + if (GlobalVariable.previewMap.containsKey(cameraId)) { + lRealHandle = new LLong(GlobalVariable.previewMap.get(cameraId)); + netsdk.CLIENT_StopSaveRealData(lRealHandle); + GlobalVariable.previewMap.remove(cameraId); + log.debug("鍋滄褰撳墠褰曞儚"); + } + //瀛樺叆minio + String BucketName = cmd.getRecordBucketName(); + String ObjectName = cmd.getRecordObjectName() + ".mp4"; + FileInputStream stream = new FileInputStream(path); + boolean b = MinioUtil.uploadObject(BucketName, ObjectName, stream, stream.available(), "video/MP4"); + if (b) { + url = MinioUtil.getBucketObjectUrl(BucketName, ObjectName); + log.debug("涓婁紶鏂囦欢鎴愬姛!" + url); + } + return url; + } catch (Exception ex) { + log.error("褰曞儚寮傚父" + ex.getMessage()); + return ""; + } + } + + @Override + public boolean guideTargetPosition(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + Integer chanNo = cmd.getChanNo(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return false; + } + LLong loginId = (LLong)GlobalVariable.loginMap.get(cameraId); + try { + ArdCameras cameras = ardCamerasService.selectArdCamerasById(cameraId); + double[] cameraPositon = new double[]{cameras.getLongitude(), cameras.getLatitude(), cameras.getAltitude()}; + double[] targetPositions = cmd.getTargetPosition(); + double[] cameraPTZ = GisUtil.getCameraPTZ(cameraPositon, targetPositions, 20, 150); + int p = (int) (cameraPTZ[0] * 10); + int t = (int) (cameraPTZ[1] * 10); + int z = (int)(cameraPTZ[2]); + boolean bool = netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_EXACTGOTO, p, t, z, 0); + if (!bool) { + log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint()); + } + return bool; + } catch (Exception ex) { + log.error("寮曞寮傚父:" + ex.getMessage()); + return false; + } + } + + // 璁惧鏂嚎鍥炶皟: 閫氳繃 CLIENT_Init 璁剧疆璇ュ洖璋冨嚱鏁帮紝褰撹澶囧嚭鐜版柇绾挎椂锛孲DK浼氳皟鐢ㄨ鍑芥暟 + private static class DisConnect implements NetSDKLib.fDisConnect { + public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) { + System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort); + } + } + + // 缃戠粶杩炴帴鎭㈠锛岃澶囬噸杩炴垚鍔熷洖璋� + // 閫氳繃 CLIENT_SetAutoReconnect 璁剧疆璇ュ洖璋冨嚱鏁帮紝褰撳凡鏂嚎鐨勮澶囬噸杩炴垚鍔熸椂锛孲DK浼氳皟鐢ㄨ鍑芥暟 + private static class HaveReConnect implements NetSDKLib.fHaveReConnect { + @Override + public void invoke(LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) { + System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort); + } + } + // 鎶撳浘鎺ユ敹鍥炶皟 + public static class fCaptureReceiveCB implements NetSDKLib.fSnapRev { + private String minioEndPoint; + private String ObjectName; + private String bucketName; + + public fCaptureReceiveCB(String minioEndPoint, String bucketName, String ObjectName) { + this.minioEndPoint = minioEndPoint; + this.bucketName = bucketName; + this.ObjectName = ObjectName; + } + + public void invoke(LLong lLoginID, Pointer pBuf, int RevLen, int EncodeType, int CmdSerial, Pointer dwUser) { + if (pBuf != null && RevLen > 0) { + byte[] buf = pBuf.getByteArray(0, RevLen); + //瀛樺偍鍒癿inio + InputStream input = new ByteArrayInputStream(buf); + + try { + boolean b = MinioUtil.uploadObject(bucketName, ObjectName, input, input.available(), MimeTypeUtils.IMAGE_JPEG); + if (b) { + String url = minioEndPoint + "/" + bucketName + ObjectName; + log.debug("涓婁紶鏂囦欢鎴愬姛!" + url); + } + } catch (IOException ex) { + log.error("涓婁紶鏂囦欢寮傚父锛�" + ex.getMessage()); + } + } + } + } } \ No newline at end of file -- Gitblit v1.9.3