ÎļþÃû´Ó ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikClientServiceImpl.java ÐÞ¸Ä |
| | |
| | | package com.ruoyi.utils.sdk.hiksdk.service.impl;
|
| | |
|
| | | import com.ruoyi.alarm.global.domain.GuidePriorityQueue;
|
| | | import com.ruoyi.alarm.global.domain.GuideTask;
|
| | | 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.uuid.IdUtils;
|
| | | 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.utils.sdk.common.GlobalVariable;
|
| | | import com.ruoyi.device.camera.domain.ArdCameras;
|
| | | import com.ruoyi.utils.sdk.hiksdk.lib.ExceptionCallBack;
|
| | | import com.ruoyi.media.domain.Vtdu;
|
| | | import com.ruoyi.media.service.IVtduService;
|
| | | import com.ruoyi.utils.gis.GisUtil;
|
| | | import com.ruoyi.utils.sdk.hiksdk.lib.HCNetSDK;
|
| | | import com.ruoyi.utils.sdk.hiksdk.service.IHikClientService;
|
| | | import com.ruoyi.utils.sdk.hiksdk.lib.LoginResultCallBack;
|
| | | import com.ruoyi.utils.minio.MinioUtil;
|
| | | import com.sun.jna.NativeLong;
|
| | | import com.sun.jna.Platform;
|
| | | import com.sun.jna.Pointer;
|
| | | import com.sun.jna.ptr.IntByReference;
|
| | | import lombok.extern.slf4j.Slf4j;
|
| | | import org.springframework.stereotype.Service;
|
| | |
|
| | | import java.util.Base64;
|
| | | import javax.annotation.Resource;
|
| | | import java.io.*;
|
| | | import java.math.BigDecimal;
|
| | | import java.nio.ByteBuffer;
|
| | | import java.text.DecimalFormat;
|
| | | import java.util.*;
|
| | | import java.util.concurrent.PriorityBlockingQueue;
|
| | |
|
| | | import static com.ruoyi.utils.sdk.hiksdk.lib.HCNetSDK.*;
|
| | |
|
| | | /**
|
| | | * @ClassName: hikClientServiceImpl
|
| | | * @Description: 海康æä½å®¢æ·ç«¯å®ç°ç±»
|
| | | * @Author: Administrator
|
| | | * @Date: 2023å¹´01æ17æ¥ 11:25
|
| | | * @Version: 1.2
|
| | | **/
|
| | | @Slf4j(topic = "hikSdk")
|
| | | @Service
|
| | | public class HikClientServiceImpl implements IHikClientService {
|
| | |
|
| | | @Resource
|
| | | private IArdCamerasService ardCamerasService;
|
| | | @Resource
|
| | | private IArdChannelService ardChannelService;
|
| | | @Resource
|
| | | private IVtduService vtduService;
|
| | | private final Object lock = new Object();
|
| | | public static HCNetSDK hCNetSDK = HCNetSDK.hCNetSDK;
|
| | | private static FExceptionCallBack fExceptionCallBack;//å¼å¸¸åè°
|
| | |
|
| | |
|
| | | /**
|
| | | * @æè¿° 注åç»å½ åªæ¯æåæ¥ç»éï¼ä¸å®æ¹ä¸å»ºè®®ç´æ¥å¨æ¤æ¥å£ä¸åèæ¶æä½
|
| | | * @åæ° [dvrLogin]
|
| | | * @è¿åå¼ java.lang.Integer
|
| | | * @å建人 åèä¹
|
| | | * @å建æ¶é´ 2023/1/17 16:12
|
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯
|
| | | */
|
| | | @Override
|
| | | public void login(ArdCameras camera) {
|
| | | try {
|
| | | // åå§å
|
| | | if (!hCNetSDK.NET_DVR_Init()) {
|
| | | log.error("SDKåå§å失败");
|
| | | }
|
| | | //æå°æµ·åº·sdkæ¥å¿
|
| | | if (Platform.isWindows()) {
|
| | | String WIN_PATH = System.getProperty("user.dir") + File.separator + "ardLog" + File.separator + "logs" + File.separator;
|
| | | hCNetSDK.NET_DVR_SetLogToFile(3, WIN_PATH, true);
|
| | | } else {
|
| | | hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", true);
|
| | | }
|
| | | String m_sDeviceIP = camera.getIp();
|
| | | String m_sUsername = camera.getUsername();
|
| | | String m_sPassword = camera.getPassword();
|
| | | short m_sPort = camera.getPort().shortValue();
|
| | | //è®¾ç½®è¿æ¥æ¶é´ä¸éè¿æ¶é´
|
| | | hCNetSDK.NET_DVR_SetConnectTime(2000, 1);
|
| | | hCNetSDK.NET_DVR_SetReconnect(5000, true);
|
| | | //设å¤ä¿¡æ¯, è¾åºåæ°
|
| | | HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();
|
| | | HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();
|
| | |
|
| | | // 注å设å¤-ç»å½åæ°ï¼å
æ¬è®¾å¤å°åãç»å½ç¨æ·ãå¯ç ç
|
| | | m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN];
|
| | | System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length());
|
| | | m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN];
|
| | | System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length());
|
| | | m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN];
|
| | | System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length());
|
| | | m_strLoginInfo.wPort = m_sPort;
|
| | | m_strLoginInfo.byVerifyMode = 0;
|
| | | m_strLoginInfo.byLoginMode = 0;
|
| | | //æ¯å¦å¼æ¥ç»å½ï¼0- å¦ï¼1- æ¯ windowsSDK鿝trueåfalse
|
| | | m_strLoginInfo.bUseAsynLogin = false;
|
| | | m_strLoginInfo.write();
|
| | | //忥ç»å½
|
| | | int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
|
| | | if (lUserID < 0) {
|
| | | log.debug("Login Failed [ " + camera.getIp() + ":" + camera.getPort() + " ],é误ç ï¼" + hCNetSDK.NET_DVR_GetLastError());
|
| | | camera.setChanNum(0);
|
| | | camera.setLoginId(-1);
|
| | | camera.setState("0");
|
| | | return;
|
| | | }
|
| | |
|
| | | log.debug("Login Success [ " + camera.getIp() + ":" + camera.getPort() + " ]");
|
| | | if (fExceptionCallBack == null) {
|
| | | fExceptionCallBack = new ExceptionCallBack();//å¼å¸¸åè°
|
| | | //设置å¼å¸¸åè°å½æ°(å¯å¨åè°å½æ°ä¸è·å设å¤ä¸ä¸çº¿ç¶æç)
|
| | | if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, null)) {
|
| | | log.debug("Set fExceptionCallBack function fail");
|
| | | return;
|
| | | } else {
|
| | | log.debug("Set fExceptionCallBack function successfully!");
|
| | | }
|
| | | }
|
| | |
|
| | | if (GlobalVariable.loginMap.containsKey(camera.getId())) {
|
| | | GlobalVariable.loginMap.remove(camera.getId());
|
| | | }
|
| | |
|
| | | //å é¤ç®¡çéé
|
| | | ardChannelService.deleteArdChannelByDeviceId(camera.getId());
|
| | | GlobalVariable.loginMap.put(camera.getId(), lUserID);
|
| | | GlobalVariable.loginCameraMap.put(lUserID, camera);
|
| | |
|
| | | camera.setLoginId(lUserID);
|
| | | camera.setState("1");
|
| | | camera.setChanNum((int) m_strDeviceInfo.struDeviceV30.byChanNum);
|
| | | camera.setStartDChan((int) m_strDeviceInfo.struDeviceV30.byStartDChan);
|
| | | ardCamerasService.updateArdCameras(camera);
|
| | | //è·åææ°éé
|
| | | List<ArdChannel> cameraChannelList = getCameraChannelList(camera);
|
| | | if (cameraChannelList.size() > 0) {
|
| | | for (ArdChannel channel : cameraChannelList) {
|
| | | channel.setId(IdUtils.simpleUUID());
|
| | | ardChannelService.insertArdChannel(channel);
|
| | | }
|
| | | //æ·»å å°æµåªä½
|
| | | for (ArdChannel channel : cameraChannelList) {
|
| | | String name = camera.getId() + "_" + channel.getChanNo();
|
| | | String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/h264/ch" + channel.getChanNo() + "/main/av_stream";
|
| | | Vtdu vtdu = vtduService.selectVtduByName(name);
|
| | | if (vtdu != null) {
|
| | | vtduService.deleteVtduByName(name);
|
| | | }
|
| | | //æ·»å å°æµåªä½
|
| | | vtdu = new Vtdu();
|
| | | vtdu.setRtspSource(rtspSource);
|
| | | vtdu.setName(camera.getId() + "_" + channel.getChanNo());
|
| | | CameraCmd cmd = new CameraCmd(camera.getId(), channel.getChanNo());
|
| | | Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd);
|
| | | if (videoCompressionCfg.get("videoEncType").equals("æ åh264")) {
|
| | | vtdu.setIsCode("0");//é»è®¤ä¸è½¬ç
|
| | | } else {
|
| | | vtdu.setIsCode("1");//é»è®¤è½¬ç
|
| | | }
|
| | | vtdu.setMode("1");//é»è®¤CPU软解ç
|
| | | vtdu.setCameraId(camera.getId());
|
| | | vtduService.insertVtdu(vtdu);
|
| | | }
|
| | | }
|
| | | //å建å¼å¯¼éå
|
| | | if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) {
|
| | | Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator();
|
| | | PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator);
|
| | | GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue);
|
| | | }
|
| | |
|
| | | } catch (Exception ex) {
|
| | | log.error("注å设å¤å¼å¸¸", ex);
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * @æè¿° 注åç»å½ éæäºNET_DVR_Login_V30ï¼æ¯æåæ¥å弿¥ç»å½
|
| | | * @åæ° [dvrLogin]
|
| | | * @è¿åå¼ java.lang.Integer
|
| | | * @å建人 åèä¹
|
| | | * @å建æ¶é´ 2023/1/17 16:12
|
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯
|
| | | */
|
| | | @Override
|
| | | public void asyncLogin(ArdCameras camera) {
|
| | | // åå§å
|
| | | if (!hCNetSDK.NET_DVR_Init()) {
|
| | | log.error("SDKåå§å失败");
|
| | | }
|
| | | //æå°æµ·åº·sdkæ¥å¿
|
| | | if (Platform.isWindows()) {
|
| | | String WIN_PATH = System.getProperty("user.dir") + File.separator + "ardLog" + File.separator + "logs" + File.separator;
|
| | | hCNetSDK.NET_DVR_SetLogToFile(3, WIN_PATH, true);
|
| | | } else {
|
| | | hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", true);
|
| | | }
|
| | | String m_sDeviceIP = camera.getIp();
|
| | | String m_sUsername = camera.getUsername();
|
| | | String m_sPassword = camera.getPassword();
|
| | | short m_sPort = camera.getPort().shortValue();
|
| | | //è®¾ç½®è¿æ¥æ¶é´ä¸éè¿æ¶é´
|
| | | hCNetSDK.NET_DVR_SetConnectTime(2000, 1);
|
| | | hCNetSDK.NET_DVR_SetReconnect(100000, true);
|
| | | //设å¤ä¿¡æ¯, è¾åºåæ°
|
| | | HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();
|
| | | HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();
|
| | |
|
| | | // 注å设å¤-ç»å½åæ°ï¼å
æ¬è®¾å¤å°åãç»å½ç¨æ·ãå¯ç ç
|
| | | m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN];
|
| | | System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length());
|
| | | m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN];
|
| | | System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length());
|
| | | m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN];
|
| | | System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length());
|
| | | m_strLoginInfo.wPort = m_sPort;
|
| | | m_strLoginInfo.byVerifyMode = 0;
|
| | | m_strLoginInfo.byLoginMode = 0;
|
| | | //æ¯å¦å¼æ¥ç»å½ï¼0- å¦ï¼1- æ¯ windowsSDK鿝trueåfalse
|
| | | m_strLoginInfo.bUseAsynLogin = true;
|
| | | //弿¥ç»å½åè°
|
| | | m_strLoginInfo.cbLoginResult = new LoginResultCallBack(camera);
|
| | | m_strLoginInfo.write();
|
| | | int i = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
|
| | | if (i < 0) {
|
| | | int errorCode = hCNetSDK.NET_DVR_GetLastError();
|
| | | log.error("ç»å½å¼å¸¸ï¼" + errorCode);
|
| | | }
|
| | |
|
| | | }
|
| | |
|
| | |
|
| | | /**
|
| | | * @æè¿° 注éç»å½
|
| | | * @åæ° [dvrLogin]
|
| | | * @è¿åå¼ java.lang.Integer
|
| | | * @å建人 åèä¹
|
| | | * @å建æ¶é´ 2023/1/17 16:12
|
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯
|
| | | */
|
| | | @Override
|
| | | public boolean logout(String cameraId) {
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | boolean b = hCNetSDK.NET_DVR_Logout(userId);
|
| | | if (b) {
|
| | | GlobalVariable.loginMap.remove(cameraId);
|
| | | }
|
| | | return b;
|
| | | }
|
| | |
|
| | | /**
|
| | | * æ¯å¦å¨çº¿
|
| | | *
|
| | | * @param cmd ç¸æºå½ä»¤
|
| | | */
|
| | | @Override
|
| | | public boolean isOnLine(CameraCmd cmd) {
|
| | | try {
|
| | | String cameraId = cmd.getCameraId();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | return hCNetSDK.NET_DVR_RemoteControl(userId, NET_DVR_CHECK_USER_STATUS, null, 0);
|
| | | } catch (Exception ex) {
|
| | | log.error("æ£æµå¨çº¿å¼å¸¸ï¼" + ex.getMessage());
|
| | | return false;
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * @æè¿° 带é度çäºå°æ§å¶æä½
|
| | | * Code:1-å·¦ä¸ 2-ä¸ 3-å³ä¸ 4-å·¦ 5-å·¡èª 6-å³ 7-å·¦ä¸ 8-ä¸ 9-å³ä¸ 10-ç¦è·å大 11-ç¦è·åå°
|
| | | * 12-ç¦ç¹åè° 13-ç¦ç¹åè° 14-å
忩大 15-å
åç¼©å° 16-é¨å·å¼å¯
|
| | | * @åæ° [userId, channelNum, speed]
|
| | | * @è¿åå¼ boolean
|
| | | * @å建人 åèä¹
|
| | | * @å建æ¶é´ 2023/1/17 16:14
|
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯
|
| | | */
|
| | | @Override
|
| | | @SdkOperate
|
| | | public boolean pTZControlWithSpeed(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | boolean enable = cmd.isEnable();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | | Integer speed = cmd.getSpeed();
|
| | | Integer code = cmd.getCode();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | int dwStop;
|
| | | if (enable) {
|
| | | dwStop = 0;//å¼å¯
|
| | | } else {
|
| | | dwStop = 1;//å
³é
|
| | | }
|
| | | int dwPTZCommand = -1;
|
| | | switch (code) {
|
| | | /*æ¹å*/
|
| | | case 1:
|
| | | dwPTZCommand = HCNetSDK.UP_LEFT;
|
| | | break;
|
| | | case 2:
|
| | | dwPTZCommand = HCNetSDK.TILT_UP;
|
| | | break;
|
| | | case 3:
|
| | | dwPTZCommand = HCNetSDK.UP_RIGHT;
|
| | | break;
|
| | | case 4:
|
| | | dwPTZCommand = HCNetSDK.PAN_LEFT;
|
| | | break;
|
| | | case 5:
|
| | | dwPTZCommand = HCNetSDK.RUN_SEQ;
|
| | | break;
|
| | | case 6:
|
| | | dwPTZCommand = HCNetSDK.PAN_RIGHT;
|
| | | break;
|
| | | case 7:
|
| | | dwPTZCommand = HCNetSDK.DOWN_LEFT;
|
| | | break;
|
| | | case 8:
|
| | | dwPTZCommand = HCNetSDK.TILT_DOWN;
|
| | | break;
|
| | | case 9:
|
| | | dwPTZCommand = HCNetSDK.DOWN_RIGHT;
|
| | | break;
|
| | | /*ç¦è·*/
|
| | | case 10:
|
| | | dwPTZCommand = HCNetSDK.ZOOM_IN;
|
| | | break;
|
| | | case 11:
|
| | | dwPTZCommand = HCNetSDK.ZOOM_OUT;
|
| | | break;
|
| | | /*ç¦ç¹*/
|
| | | case 12:
|
| | | dwPTZCommand = HCNetSDK.FOCUS_NEAR;
|
| | | break;
|
| | | case 13:
|
| | | dwPTZCommand = HCNetSDK.FOCUS_FAR;
|
| | | break;
|
| | | /*å
å*/
|
| | | case 14:
|
| | | dwPTZCommand = HCNetSDK.IRIS_OPEN;
|
| | | break;
|
| | | case 15:
|
| | | dwPTZCommand = HCNetSDK.IRIS_CLOSE;
|
| | | break;
|
| | | /*é¨å·*/
|
| | | case 16:
|
| | | dwPTZCommand = HCNetSDK.WIPER_PWRON;
|
| | | break;
|
| | | }
|
| | | boolean bool = hCNetSDK.NET_DVR_PTZControlWithSpeed_Other(userId, channelNum, dwPTZCommand, dwStop, speed);
|
| | | if (!bool) {
|
| | | int errorCode = hCNetSDK.NET_DVR_GetLastError();
|
| | | log.error("æ§å¶å¤±è´¥,请ç¨åéè¯" + errorCode);
|
| | | }
|
| | | return bool;
|
| | | }
|
| | |
|
| | | /**
|
| | | * 设置èç¦å¼
|
| | | *
|
| | | * @param cmd ç¸æºå½ä»¤
|
| | | */
|
| | | @Override
|
| | | public boolean setFocusPos(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | | Integer dwFocusPos = cmd.getDwFocusPos();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | // è·ååæ°
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | HCNetSDK.NET_DVR_STD_CONFIG struStdCfg = new HCNetSDK.NET_DVR_STD_CONFIG();
|
| | | HCNetSDK.NET_DVR_GIS_INFO struGisInfo = new HCNetSDK.NET_DVR_GIS_INFO();
|
| | | struGisInfo.struPtzPosEx.dwFocus = dwFocusPos;
|
| | | struStdCfg.read();
|
| | | IntByReference lchannel = new IntByReference(channelNum);
|
| | | struStdCfg.lpInBuffer = struGisInfo.getPointer();
|
| | | struStdCfg.lpCondBuffer = lchannel.getPointer();
|
| | | struStdCfg.dwCondSize = 4;
|
| | | struStdCfg.dwInSize = struGisInfo.size();
|
| | | struStdCfg.write();//设置åä¹åè¦write()
|
| | | boolean bool = hCNetSDK.NET_DVR_SetSTDConfig(userId, NET_DVR_GET_GISINFO, struStdCfg);
|
| | | if (!bool) {
|
| | | int code = hCNetSDK.NET_DVR_GetLastError();
|
| | | log.error("设置GISä¿¡æ¯æ°æ®å¤±è´¥,请ç¨åéè¯" + code);
|
| | | return false;
|
| | | } else {
|
| | | return true;
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * è·åèç¦å¼
|
| | | *
|
| | | * @param cmd ç¸æºå½ä»¤
|
| | | */
|
| | | @Override
|
| | | public int getFocusPos(CameraCmd cmd) {
|
| | | int result = 0;
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return result;
|
| | | }
|
| | | // è·ååæ°
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | HCNetSDK.NET_DVR_STD_CONFIG struStdCfg = new HCNetSDK.NET_DVR_STD_CONFIG();
|
| | | HCNetSDK.NET_DVR_GIS_INFO struGisInfo = new HCNetSDK.NET_DVR_GIS_INFO();
|
| | | struStdCfg.read();
|
| | | IntByReference lchannel = new IntByReference(channelNum);
|
| | | struStdCfg.lpCondBuffer = lchannel.getPointer();
|
| | | struStdCfg.dwCondSize = 4;
|
| | | struStdCfg.lpOutBuffer = struGisInfo.getPointer();
|
| | | struStdCfg.dwOutSize = struGisInfo.size();
|
| | | struStdCfg.write();//设置åä¹åè¦write()
|
| | | boolean bool = hCNetSDK.NET_DVR_GetSTDConfig(userId, NET_DVR_GET_GISINFO, struStdCfg);
|
| | | if (!bool) {
|
| | | int code = hCNetSDK.NET_DVR_GetLastError();
|
| | | log.error("è·åGISä¿¡æ¯æ°æ®å¤±è´¥,请ç¨åéè¯" + code);
|
| | | return result;
|
| | | } else {
|
| | | struGisInfo.read();
|
| | | result = struGisInfo.struPtzPosEx.dwFocus;
|
| | | }
|
| | | return result;
|
| | | }
|
| | |
|
| | | /**
|
| | | * 设置é¢ç½®ç¹
|
| | | *
|
| | | * @param cmd ç¸æºå½ä»¤
|
| | | */
|
| | | @Override
|
| | | public boolean setPreset(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | | Integer PresetIndex = cmd.getPresetIndex();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | boolean bool = hCNetSDK.NET_DVR_PTZPreset_Other(userId, channelNum, SET_PRESET, PresetIndex);
|
| | | if (!bool) {
|
| | | int code = hCNetSDK.NET_DVR_GetLastError();
|
| | | log.error("é¢ç½®ç¹è®¾ç½®å¤±è´¥,请ç¨åéè¯" + code);
|
| | | }
|
| | | return bool;
|
| | | }
|
| | |
|
| | | /**
|
| | | * 转å°é¢ç½®ç¹
|
| | | *
|
| | | * @param cmd ç¸æºå½ä»¤
|
| | | */
|
| | | @Override
|
| | | public boolean gotoPreset(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | | Integer PresetIndex = cmd.getPresetIndex();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | boolean bool = hCNetSDK.NET_DVR_PTZPreset_Other(userId, channelNum, GOTO_PRESET, PresetIndex);
|
| | | if (!bool) {
|
| | | int code = hCNetSDK.NET_DVR_GetLastError();
|
| | | log.error("é¢ç½®ç¹è®¾ç½®å¤±è´¥,请ç¨åéè¯" + code);
|
| | | }
|
| | | return bool;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @æè¿° è·åééåç¼©åæ°
|
| | | * @åæ° [cameraId, channelNum]
|
| | | * @è¿åå¼ java.lang.String
|
| | | * @å建人 åèä¹
|
| | | * @å建æ¶é´ 2023/2/3 8:36
|
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯
|
| | | */
|
| | | @Override
|
| | | public Map<String, Object> getVideoCompressionCfg(CameraCmd cmd) {
|
| | |
|
| | | Map<String, Object> map = new HashMap<>();
|
| | | try {
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer chanNo = cmd.getChanNo();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return null;
|
| | | }
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | |
|
| | | NET_DVR_COMPRESSIONCFG_V30 compressioncfg = new NET_DVR_COMPRESSIONCFG_V30();
|
| | | compressioncfg.write();
|
| | | Pointer pioint = compressioncfg.getPointer();
|
| | | IntByReference ibrBytesReturned = new IntByReference(0);
|
| | |
|
| | | boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, HCNetSDK.NET_DVR_GET_COMPRESSCFG_V30, chanNo, pioint, compressioncfg.size(), ibrBytesReturned);
|
| | | if (bool) {
|
| | | compressioncfg.read();
|
| | | //ç æµç±»åï¼0-è§é¢æµï¼1-å¤åæµï¼0xfe- èªå¨ï¼åæºä¸è´ï¼
|
| | | String streamType = "";
|
| | | switch (compressioncfg.struNormHighRecordPara.byStreamType) {
|
| | | case 0:
|
| | | streamType = "è§é¢æµ";
|
| | | break;
|
| | | case 1:
|
| | | streamType = "å¤åæµ";
|
| | | break;
|
| | | default:
|
| | | streamType = "æªç¥";
|
| | | break;
|
| | | }
|
| | | //è§é¢ç¼ç ç±»åï¼0-ç§æ264ï¼1-æ åh264ï¼2-æ åmpeg4ï¼7-M-JPEGï¼8-MPEG2ï¼9-SVACï¼10-æ åh265ï¼0xfe- èªå¨ï¼åæºä¸è´ï¼ï¼0xff-æ æ
|
| | | String videoEncType = "";
|
| | | switch (compressioncfg.struNormHighRecordPara.byVideoEncType) {
|
| | | case 0:
|
| | | videoEncType = "ç§æ264";
|
| | | break;
|
| | | case 1:
|
| | | videoEncType = "æ åh264";
|
| | | break;
|
| | | case 2:
|
| | | videoEncType = "æ åmpeg4";
|
| | | break;
|
| | | case 7:
|
| | | videoEncType = "M-JPEG";
|
| | | break;
|
| | | case 8:
|
| | | videoEncType = "MPEG2";
|
| | | break;
|
| | | case 9:
|
| | | videoEncType = "SVAC";
|
| | | break;
|
| | | case 10:
|
| | | videoEncType = "æ åh265";
|
| | | break;
|
| | | default:
|
| | | videoEncType = "æªç¥";
|
| | | break;
|
| | | }
|
| | | //è§é¢ç ç
|
| | | String videoBitrate = "";
|
| | | switch (compressioncfg.struNormHighRecordPara.dwVideoBitrate) {
|
| | | case 0:
|
| | | videoBitrate = "ä¿ç";
|
| | | break;
|
| | | case 1:
|
| | | videoBitrate = "16(ä¿ç)";
|
| | | break;
|
| | | case 2:
|
| | | videoBitrate = "32";
|
| | | break;
|
| | | case 3:
|
| | | videoBitrate = "48";
|
| | | break;
|
| | | case 4:
|
| | | videoBitrate = "64";
|
| | | break;
|
| | | case 5:
|
| | | videoBitrate = "80";
|
| | | break;
|
| | | case 6:
|
| | | videoBitrate = "96";
|
| | | break;
|
| | | case 7:
|
| | | videoBitrate = "128";
|
| | | break;
|
| | | case 8:
|
| | | videoBitrate = "160";
|
| | | break;
|
| | | case 9:
|
| | | videoBitrate = "192";
|
| | | break;
|
| | | case 10:
|
| | | videoBitrate = "224";
|
| | | break;
|
| | | case 11:
|
| | | videoBitrate = "256";
|
| | | break;
|
| | | case 12:
|
| | | videoBitrate = "320";
|
| | | break;
|
| | | case 13:
|
| | | videoBitrate = "384";
|
| | | break;
|
| | | case 14:
|
| | | videoBitrate = "448";
|
| | | break;
|
| | | case 15:
|
| | | videoBitrate = "512";
|
| | | break;
|
| | | case 16:
|
| | | videoBitrate = "640";
|
| | | break;
|
| | | case 17:
|
| | | videoBitrate = "768";
|
| | | break;
|
| | | case 18:
|
| | | videoBitrate = "896";
|
| | | break;
|
| | | case 19:
|
| | | videoBitrate = "1024";
|
| | | break;
|
| | | case 20:
|
| | | videoBitrate = "1280";
|
| | | break;
|
| | | case 21:
|
| | | videoBitrate = "1536";
|
| | | break;
|
| | | case 22:
|
| | | videoBitrate = "1792";
|
| | | break;
|
| | | case 23:
|
| | | videoBitrate = "2048K";
|
| | | break;
|
| | | case 24:
|
| | | videoBitrate = "3072";
|
| | | break;
|
| | | case 25:
|
| | | videoBitrate = "4096";
|
| | | break;
|
| | | case 26:
|
| | | videoBitrate = "8192";
|
| | | break;
|
| | | case 27:
|
| | | videoBitrate = "16384";
|
| | | break;
|
| | | default:
|
| | | videoBitrate = "å
¶ä»";
|
| | | break;
|
| | | }
|
| | | //è§é¢è¾åºå£å辨çï¼0- 1024x768ï¼1- 1280x720ï¼2-1280x1024ï¼3- 1680x1050ï¼4- 1920x1080ï¼5- 3840*2160
|
| | | String resolution = "";
|
| | | switch (compressioncfg.struNormHighRecordPara.byResolution) {
|
| | | case 0:
|
| | | resolution = "528*384/528*320";
|
| | | break;
|
| | | case 1:
|
| | | resolution = "352*288/352*240";
|
| | | break;
|
| | | case 2:
|
| | | resolution = "176*144/176*120";
|
| | | break;
|
| | | case 3:
|
| | | resolution = "704*576/704*480";
|
| | | break;
|
| | | case 4:
|
| | | resolution = "704*288/704*240";
|
| | | break;
|
| | | case 6:
|
| | | resolution = "320*240";
|
| | | break;
|
| | | case 7:
|
| | | resolution = "160*120";
|
| | | break;
|
| | | case 16:
|
| | | resolution = "640*480";
|
| | | break;
|
| | | case 17:
|
| | | resolution = "1600*1200";
|
| | | break;
|
| | | case 18:
|
| | | resolution = "800*600";
|
| | | break;
|
| | | case 19:
|
| | | resolution = "1280*720";
|
| | | break;
|
| | | case 20:
|
| | | resolution = "1280*960";
|
| | | break;
|
| | | case 21:
|
| | | resolution = "1600*900";
|
| | | break;
|
| | | case 22:
|
| | | resolution = "1360*1024";
|
| | | break;
|
| | | case 23:
|
| | | resolution = "1536*1536";
|
| | | break;
|
| | | case 24:
|
| | | resolution = "1920*1920";
|
| | | break;
|
| | | case 27:
|
| | | resolution = "1920*1080";
|
| | | break;
|
| | | case 28:
|
| | | resolution = "2560*1920";
|
| | | break;
|
| | | case 29:
|
| | | resolution = "1600*304";
|
| | | break;
|
| | | case 30:
|
| | | resolution = "2048*1536";
|
| | | break;
|
| | | default:
|
| | | resolution = "ä¸å¨å½åå辨çç´¢å¼ï¼è¯·è系管çåæ·»å ";
|
| | | break;
|
| | | }
|
| | | //帧ç
|
| | | String nFrameRate = "";
|
| | | switch (compressioncfg.struNormHighRecordPara.dwVideoFrameRate) {
|
| | | case 0:
|
| | | nFrameRate = "0";
|
| | | break;
|
| | | case 1:
|
| | | nFrameRate = "1/16";
|
| | | break;
|
| | | case 2:
|
| | | nFrameRate = "1/8";
|
| | | break;
|
| | | case 3:
|
| | | nFrameRate = "1/4";
|
| | | break;
|
| | | case 4:
|
| | | nFrameRate = "1/2";
|
| | | break;
|
| | | case 5:
|
| | | nFrameRate = "1";
|
| | | break;
|
| | | case 6:
|
| | | nFrameRate = "2";
|
| | | break;
|
| | | case 7:
|
| | | nFrameRate = "4";
|
| | | break;
|
| | | case 8:
|
| | | nFrameRate = "6";
|
| | | break;
|
| | | case 9:
|
| | | nFrameRate = "8";
|
| | | break;
|
| | | case 10:
|
| | | nFrameRate = "10";
|
| | | break;
|
| | | case 11:
|
| | | nFrameRate = "12";
|
| | | break;
|
| | | case 12:
|
| | | nFrameRate = "16";
|
| | | break;
|
| | | case 13:
|
| | | nFrameRate = "20";
|
| | | break;
|
| | | case 14:
|
| | | nFrameRate = "15";
|
| | | break;
|
| | | case 15:
|
| | | nFrameRate = "18";
|
| | | break;
|
| | | case 16:
|
| | | nFrameRate = "22";
|
| | | break;
|
| | | case 17:
|
| | | nFrameRate = "25";
|
| | | break;
|
| | | case 18:
|
| | | nFrameRate = "30";
|
| | | break;
|
| | | case 19:
|
| | | nFrameRate = "35";
|
| | | break;
|
| | | case 20:
|
| | | nFrameRate = "40";
|
| | | break;
|
| | | default:
|
| | | nFrameRate = "æªç¥";
|
| | | break;
|
| | | }
|
| | | map.put("resolution", resolution);//å辨ç
|
| | | map.put("videoBitrate", videoBitrate);//æ¯ç¹ç
|
| | | map.put("videoEncType", videoEncType);//ç¼ç
|
| | | map.put("nFrameRate", nFrameRate);//帧ç
|
| | |
|
| | | } else {
|
| | | int code = hCNetSDK.NET_DVR_GetLastError();
|
| | | log.error("æ§å¶å¤±è´¥,请ç¨åéè¯" + code);
|
| | | }
|
| | | } catch (Exception ex) {
|
| | | log.error(ex.getMessage());
|
| | | }
|
| | | return map;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @æè¿° è·åptzä¿¡æ¯
|
| | | * @åæ° [userId, channelNum]
|
| | | * @è¿åå¼ boolean
|
| | | * @å建人 åèä¹
|
| | | * @å建æ¶é´ 2023/1/17 16:36
|
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯
|
| | | */
|
| | | @Override
|
| | | public Map<String, Object> getPtz(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return new HashMap<>();
|
| | | }
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | |
|
| | | NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS();
|
| | | Pointer pioint = m_ptzPosCurrent.getPointer();
|
| | | IntByReference ibrBytesReturned = new IntByReference(0);
|
| | | m_ptzPosCurrent.write();
|
| | | boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, HCNetSDK.NET_DVR_GET_PTZPOS, channelNum, pioint, m_ptzPosCurrent.size(), ibrBytesReturned);
|
| | | if (bool) {
|
| | | m_ptzPosCurrent.read();
|
| | | // DecimalFormat df = new DecimalFormat("0.0");//设置ä¿ç使°
|
| | | //16è¿å¶è½¬Integeråé¤10ï¼ä¿çå°æ°ç¹1ä½
|
| | | //å®é
æ¾ç¤ºçPTZ弿¯è·åå°çåå
è¿å¶å¼çååä¹ä¸ï¼
|
| | | //å¦è·åçæ°´å¹³åæ°Pç弿¯0x1750ï¼å®é
æ¾ç¤ºçPå¼ä¸º175度ï¼
|
| | | //è·åå°çåç´åæ°Tç弿¯0x0789ï¼å®é
æ¾ç¤ºçTå¼ä¸º78.9度ï¼
|
| | | //è·åå°çåååæ°Zç弿¯0x1100ï¼å®é
æ¾ç¤ºçZå¼ä¸º110åã
|
| | | BigDecimal b = new BigDecimal((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wPanPos)) / 10);
|
| | | BigDecimal c = new BigDecimal((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wTiltPos)) / 10);
|
| | | BigDecimal d = new BigDecimal((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wZoomPos)) / 10);
|
| | | double p = b.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
|
| | | double t = c.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
|
| | | double z = d.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
|
| | | //log.debug("Tåç´åæ°ä¸º: " + p + "Pæ°´å¹³åæ°ä¸º: " + t + "Zåååæ°ä¸º: " + z);
|
| | | Map<String, Object> ptzMap = new HashMap<>();
|
| | | ptzMap.put("p", p);
|
| | | ptzMap.put("t", t);
|
| | | ptzMap.put("z", z);
|
| | | return ptzMap;
|
| | | } else {
|
| | | int code = hCNetSDK.NET_DVR_GetLastError();
|
| | | log.error("æ§å¶å¤±è´¥,请ç¨åéè¯" + code);
|
| | | return new HashMap<>();
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * @æè¿° 设置ptzä¿¡æ¯
|
| | | * @åæ° [userId, channelNum]
|
| | | * @è¿åå¼ boolean
|
| | | * @å建人 åèä¹
|
| | | * @å建æ¶é´ 2023/1/17 16:36
|
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯ 注æä¿¯ä»°è§åº¦è´å¼éè¦å ä¸360å¾å°çæ£å¼è¿è¡è®¾ç½®
|
| | | */
|
| | | @Override
|
| | | public boolean setPtz(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | | Map<String, Double> ptz = cmd.getPtzMap();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS();
|
| | | m_ptzPosCurrent.wAction = 1;
|
| | | try {
|
| | | String p = String.valueOf((int) (ptz.get("p") * 10));
|
| | | String t = String.valueOf((int) (ptz.get("t") * 10));
|
| | | String z = String.valueOf((int) (ptz.get("z") * 10));
|
| | | m_ptzPosCurrent.wPanPos = (short) (Integer.parseInt(p, 16));
|
| | | m_ptzPosCurrent.wTiltPos = (short) (Integer.parseInt(t, 16));
|
| | | m_ptzPosCurrent.wZoomPos = (short) (Integer.parseInt(z, 16));
|
| | | Pointer point = m_ptzPosCurrent.getPointer();
|
| | | m_ptzPosCurrent.write();
|
| | | boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_PTZPOS, channelNum, point, m_ptzPosCurrent.size());
|
| | | if (!bool) {
|
| | | int code = hCNetSDK.NET_DVR_GetLastError();
|
| | | log.error("设置ptz失败,请ç¨åéè¯" + code);
|
| | | }
|
| | | return bool;
|
| | | } catch (Exception ex) {
|
| | | log.error(ex.getMessage());
|
| | | return false;
|
| | | }
|
| | | }
|
| | |
|
| | | @Override
|
| | | public boolean guideTargetPosition(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS();
|
| | | m_ptzPosCurrent.wAction = 1;
|
| | | 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);
|
| | | String p = String.valueOf((int) (cameraPTZ[0] * 10));
|
| | | String t = String.valueOf((int) (cameraPTZ[1] * 10));
|
| | | String z = String.valueOf((int) (cameraPTZ[2] * 10));
|
| | | m_ptzPosCurrent.wPanPos = (short) (Integer.parseInt(p, 16));
|
| | | m_ptzPosCurrent.wTiltPos = (short) (Integer.parseInt(t, 16));
|
| | | m_ptzPosCurrent.wZoomPos = (short) (Integer.parseInt(z, 16));
|
| | | Pointer point = m_ptzPosCurrent.getPointer();
|
| | | m_ptzPosCurrent.write();
|
| | | boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_PTZPOS, channelNum, point, m_ptzPosCurrent.size());
|
| | | if (!bool) {
|
| | | int code = hCNetSDK.NET_DVR_GetLastError();
|
| | | log.error("设置ptz失败,请ç¨åéè¯" + code);
|
| | | }
|
| | | return bool;
|
| | | } catch (Exception ex) {
|
| | | log.error("å¼å¯¼å¼å¸¸:" + ex.getMessage());
|
| | | return false;
|
| | | }
|
| | | }
|
| | |
|
| | |
|
| | | /**
|
| | | * @æè¿° è·åptzéå®ä¿¡æ¯
|
| | | * @åæ° [userId, channelNum]
|
| | | * @è¿åå¼ boolean
|
| | | * @å建人 åèä¹
|
| | | * @å建æ¶é´ 2023/1/17 16:36
|
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯ 0-è§£é 1-éå®
|
| | | */
|
| | | @Override
|
| | | public int getPTZLockInfo(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return -1;
|
| | | }
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | NET_DVR_PTZ_LOCKCFG netDvrPtzLockcfg = new NET_DVR_PTZ_LOCKCFG();
|
| | | Pointer point = netDvrPtzLockcfg.getPointer();
|
| | | IntByReference ibrBytesReturned = new IntByReference(0);
|
| | | netDvrPtzLockcfg.write();
|
| | | boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_PTZLOCKCFG, channelNum, point, netDvrPtzLockcfg.size(), ibrBytesReturned);
|
| | | if (!bool) {
|
| | | int code = hCNetSDK.NET_DVR_GetLastError();
|
| | | log.error("è·åptzéå®ä¿¡æ¯å¤±è´¥,请ç¨åéè¯" + code);
|
| | | return -1;
|
| | | } else {
|
| | | netDvrPtzLockcfg.read();
|
| | | return netDvrPtzLockcfg.byWorkMode;
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * @æè¿° è®¾ç½®é¶æ¹ä½è§
|
| | | * @åæ° [userId, channelNum]
|
| | | * @è¿åå¼ boolean
|
| | | * @å建人 åèä¹
|
| | | * @å建æ¶é´ 2023/1/17 16:36
|
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯ 注æä¿¯ä»°è§åº¦è´å¼éè¦å ä¸360å¾å°çæ£å¼è¿è¡è®¾ç½®
|
| | | */
|
| | | @Override
|
| | | @SdkOperate
|
| | | public boolean setZeroPtz(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | NET_DVR_INITIALPOSITIONCTRL initialpositionctrl = new NET_DVR_INITIALPOSITIONCTRL();
|
| | |
|
| | | initialpositionctrl.dwSize = initialpositionctrl.size();
|
| | | initialpositionctrl.byWorkMode = 0;
|
| | | initialpositionctrl.dwChan = Short.parseShort(channelNum.toString());
|
| | |
|
| | | Pointer point = initialpositionctrl.getPointer();
|
| | | initialpositionctrl.write();
|
| | | boolean bool = hCNetSDK.NET_DVR_RemoteControl(userId, NET_DVR_PTZ_INITIALPOSITIONCTRL, point, initialpositionctrl.size());
|
| | | if (!bool) {
|
| | | int i = hCNetSDK.NET_DVR_GetLastError();
|
| | | log.error("é误ç ï¼" + i);
|
| | | }
|
| | | return bool;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @æè¿° è·åçæºPTZåæ°åå¼èå´
|
| | | * @åæ° [cameraId, channelNum]
|
| | | * @è¿åå¼ java.util.Map<java.lang.String, java.lang.Object>
|
| | | * @å建人 åèä¹
|
| | | * @å建æ¶é´ 2023/2/8 10:58
|
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯
|
| | | */
|
| | | @Override
|
| | | public Map<String, Object> getPtzScope(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return new HashMap<>();
|
| | | }
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | NET_DVR_PTZSCOPE m_ptzPosCurrent = new NET_DVR_PTZSCOPE();
|
| | | Pointer point = m_ptzPosCurrent.getPointer();
|
| | | IntByReference ibrBytesReturned = new IntByReference(0);
|
| | | m_ptzPosCurrent.write();
|
| | | boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_PTZSCOPE, channelNum, point, m_ptzPosCurrent.size(), ibrBytesReturned);
|
| | | if (!bool) {
|
| | | int code = hCNetSDK.NET_DVR_GetLastError();
|
| | | log.error("设置ptz失败,请ç¨åéè¯" + code);
|
| | | return new HashMap<>();
|
| | | } else {
|
| | | m_ptzPosCurrent.read();
|
| | | DecimalFormat df = new DecimalFormat("0.0");//设置ä¿ç使°
|
| | |
|
| | | String wPanPosMax = df.format((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wPanPosMax)) / 10);
|
| | | String wPanPosMin = df.format((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wTiltPosMax)) / 10);
|
| | | String wTiltPosMax = df.format((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wTiltPosMax)) / 10);
|
| | | String wTiltPosMin = df.format((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wTiltPosMin)) / 10);
|
| | | String wZoomPosMax = df.format((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wZoomPosMax)) / 10);
|
| | | String wZoomPosMin = df.format((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wZoomPosMin)) / 10);
|
| | | Map<String, Object> ptzScopeMap = new HashMap<>();
|
| | | ptzScopeMap.put("pMax", wPanPosMax);
|
| | | ptzScopeMap.put("pMin", wPanPosMin);
|
| | | ptzScopeMap.put("tMax", wTiltPosMax);
|
| | | ptzScopeMap.put("tMin", wTiltPosMin);
|
| | | ptzScopeMap.put("zMax", wZoomPosMax);
|
| | | ptzScopeMap.put("zMin", wZoomPosMin);
|
| | | return ptzScopeMap;
|
| | | }
|
| | |
|
| | | }
|
| | |
|
| | | /**
|
| | | * @æè¿° éé¾å¼å
³
|
| | | * @åæ° [userId, channelNum, enable]
|
| | | * @è¿åå¼ boolean
|
| | | * @å建人 åèä¹
|
| | | * @å建æ¶é´ 2023/1/18 13:07
|
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯
|
| | | */
|
| | | @Override
|
| | | public boolean controlDefogcfg(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | boolean enable = cmd.isEnable();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | NET_DVR_CAMERAPARAMCFG_EX struCameraParam = new NET_DVR_CAMERAPARAMCFG_EX();
|
| | | Pointer point = struCameraParam.getPointer();
|
| | | IntByReference ibrBytesReturned = new IntByReference(0);
|
| | | boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_CCDPARAMCFG_EX, channelNum, point, struCameraParam.size(), ibrBytesReturned);
|
| | | if (!b_GetCameraParam) {
|
| | | log.error("è·ååç«¯åæ°å¤±è´¥ï¼é误ç ï¼" + hCNetSDK.NET_DVR_GetLastError());
|
| | | }
|
| | | struCameraParam.read();
|
| | | log.debug("æ¯å¦å¼å¯éé¾ï¼" + struCameraParam.struDefogCfg.byMode);
|
| | |
|
| | | NET_DVR_DEFOGCFG defogcfg = new NET_DVR_DEFOGCFG();
|
| | | if (enable) {
|
| | | defogcfg.byMode = 2;//0-ä¸å¯ç¨ 1-èªå¨æ¨¡å¼ 2-叏弿¨¡å¼
|
| | | defogcfg.byLevel = 100;//åå¼èå´0-100
|
| | | } else {
|
| | | defogcfg.byMode = 0;//0-ä¸å¯ç¨ 1-èªå¨æ¨¡å¼ 2-叏弿¨¡å¼
|
| | | }
|
| | | struCameraParam.struDefogCfg = defogcfg;
|
| | | struCameraParam.write();
|
| | | boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_CCDPARAMCFG_EX, channelNum, point, struCameraParam.size());
|
| | | if (!bool) {
|
| | | int code = hCNetSDK.NET_DVR_GetLastError();
|
| | | log.error("设置éé¾å¤±è´¥,请ç¨åéè¯" + code);
|
| | | }
|
| | | log.debug("设置é龿å");
|
| | | return bool;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @æè¿° 红å¤å¼å
³
|
| | | * @åæ° [userId, channelNum, enable]
|
| | | * @è¿åå¼ boolean
|
| | | * @å建人 åèä¹
|
| | | * @å建æ¶é´ 2023/1/18 13:07
|
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯
|
| | | */
|
| | | @Override
|
| | | public boolean controlInfrarecfg(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | boolean enable = cmd.isEnable();
|
| | | Integer chanNo = cmd.getChanNo();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | NET_DVR_CAMERAPARAMCFG_EX struDayNigh = new NET_DVR_CAMERAPARAMCFG_EX();
|
| | | Pointer point = struDayNigh.getPointer();
|
| | | IntByReference ibrBytesReturned = new IntByReference(0);
|
| | | boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_CCDPARAMCFG_EX, chanNo, point, struDayNigh.size(), ibrBytesReturned);
|
| | | if (!b_GetCameraParam) {
|
| | | log.error("è·ååç«¯åæ°å¤±è´¥ï¼é误ç ï¼" + hCNetSDK.NET_DVR_GetLastError());
|
| | | }
|
| | | struDayNigh.read();
|
| | | String current = struDayNigh.struDayNight.byDayNightFilterType == 1 ? "å¼å¯" : "å
³é";
|
| | | log.debug("å½åç¶æ:" + current);
|
| | |
|
| | | NET_DVR_DAYNIGHT daynight = new NET_DVR_DAYNIGHT();
|
| | | if (enable) {
|
| | | daynight.byDayNightFilterType = 1;//夿
|
| | | } else {
|
| | | daynight.byDayNightFilterType = 0;//ç½å¤©
|
| | | }
|
| | | daynight.bySwitchScheduleEnabled = 1;
|
| | | daynight.byDayNightFilterTime = 60;
|
| | | struDayNigh.struDayNight = daynight;
|
| | | struDayNigh.write();
|
| | | boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_CCDPARAMCFG_EX, chanNo, point, struDayNigh.size());
|
| | | if (!bool) {
|
| | | int code = hCNetSDK.NET_DVR_GetLastError();
|
| | | log.error("设置å¤è§å¤±è´¥,请ç¨åéè¯" + code);
|
| | | }
|
| | | else {
|
| | | log.debug("设置å¤è§æå");
|
| | | }
|
| | |
|
| | | return bool;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @æè¿° èç¦å¼å
³
|
| | | * @åæ° [userId, channelNum, enable]
|
| | | * @è¿åå¼ boolean
|
| | | * @å建人 åèä¹
|
| | | * @å建æ¶é´ 2023/1/18 13:07
|
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯
|
| | | */
|
| | | @Override
|
| | | public boolean controlFocusMode(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | boolean enable = cmd.isEnable();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | NET_DVR_FOCUSMODE_CFG struFocusMode = new NET_DVR_FOCUSMODE_CFG();
|
| | | Pointer point = struFocusMode.getPointer();
|
| | | IntByReference ibrBytesReturned = new IntByReference(0);
|
| | | boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_FOCUSMODECFG, channelNum, point, struFocusMode.size(), ibrBytesReturned);
|
| | | if (!b_GetCameraParam) {
|
| | | log.error("è·ååç«¯åæ°å¤±è´¥ï¼é误ç ï¼" + hCNetSDK.NET_DVR_GetLastError());
|
| | | }
|
| | | struFocusMode.read();
|
| | | log.debug("å½åèç¦æ¨¡å¼ï¼" + struFocusMode.byFocusMode);
|
| | |
|
| | | if (enable) {
|
| | | struFocusMode.byFocusMode = 1;//æå¨èç¦
|
| | | } else {
|
| | | struFocusMode.byAutoFocusMode = 1;
|
| | | struFocusMode.byFocusMode = 2;//èªå¨èç¦
|
| | | }
|
| | | struFocusMode.byFocusDefinitionDisplay = 1;
|
| | | struFocusMode.byFocusSpeedLevel = 3;
|
| | | struFocusMode.write();
|
| | | boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_FOCUSMODECFG, channelNum, point, struFocusMode.size());
|
| | | if (!bool) {
|
| | | int code = hCNetSDK.NET_DVR_GetLastError();
|
| | | log.error("设置èç¦æ¨¡å¼å¤±è´¥,请ç¨åéè¯" + code);
|
| | | }
|
| | | log.debug("设置èç¦æ¨¡å¼æå");
|
| | | return bool;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @æè¿° è·åèç¦æ¨¡å¼
|
| | | * @åæ° [userId, channelNum]
|
| | | * @è¿åå¼ boolean
|
| | | * @å建人 åèä¹
|
| | | * @å建æ¶é´ 2023/1/18 13:07
|
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯
|
| | | */
|
| | | public String getFocusMode(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return "";
|
| | | }
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | NET_DVR_FOCUSMODE_CFG struFocusMode = new NET_DVR_FOCUSMODE_CFG();
|
| | | Pointer point = struFocusMode.getPointer();
|
| | | IntByReference ibrBytesReturned = new IntByReference(0);
|
| | | boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_FOCUSMODECFG, channelNum, point, struFocusMode.size(), ibrBytesReturned);
|
| | | if (!b_GetCameraParam) {
|
| | | log.error("è·ååç«¯åæ°å¤±è´¥ï¼é误ç ï¼" + hCNetSDK.NET_DVR_GetLastError());
|
| | | }
|
| | | struFocusMode.read();
|
| | | log.debug("å½åèç¦æ¨¡å¼ï¼" + struFocusMode.byFocusMode);
|
| | | return String.valueOf(struFocusMode.byFocusMode);
|
| | | }
|
| | |
|
| | | /**
|
| | | * @æè¿° äºå°å çå¼å
³
|
| | | * @åæ° [userId, channelNum, enable]
|
| | | * @è¿åå¼ boolean
|
| | | * @å建人 åèä¹
|
| | | * @å建æ¶é´ 2023/1/18 13:07
|
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯
|
| | | */
|
| | | @Override
|
| | | public boolean controlPTHeateRpwron(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | boolean enable = cmd.isEnable();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | int dwStop;
|
| | | if (enable) {
|
| | | dwStop = 0;//å¼å¯
|
| | | } else {
|
| | | dwStop = 1;//å
³é
|
| | | }
|
| | | boolean bool = hCNetSDK.NET_DVR_PTZControl_Other(userId, channelNum, HEATER_PWRON, dwStop);
|
| | | if (!bool) {
|
| | | int code = hCNetSDK.NET_DVR_GetLastError();
|
| | | log.error("设置äºå°å ç失败,请ç¨åéè¯" + code);
|
| | | }
|
| | | log.debug("设置äºå°å çæå");
|
| | | return bool;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @æè¿° é头å çå¼å
³
|
| | | * @åæ° [userId, channelNum, enable]
|
| | | * @è¿åå¼ boolean
|
| | | * @å建人 åèä¹
|
| | | * @å建æ¶é´ 2023/1/18 13:07
|
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯
|
| | | */
|
| | | @Override
|
| | | public boolean controlCameraDeicing(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | boolean enable = cmd.isEnable();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | NET_DVR_DEVSERVER_CFG struDeicing = new NET_DVR_DEVSERVER_CFG();
|
| | | Pointer point = struDeicing.getPointer();
|
| | | IntByReference ibrBytesReturned = new IntByReference(0);
|
| | | boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_DEVSERVER_CFG, channelNum, point, struDeicing.size(), ibrBytesReturned);
|
| | | if (!b_GetCameraParam) {
|
| | | log.error("è·ååç«¯åæ°å¤±è´¥ï¼é误ç ï¼" + hCNetSDK.NET_DVR_GetLastError());
|
| | | }
|
| | | struDeicing.read();
|
| | | log.debug("æ¯å¦å¼å¯é¤å°ï¼" + struDeicing.byEnableDeicing);
|
| | |
|
| | | if (enable) {
|
| | | struDeicing.byEnableDeicing = 1;//å¼å¯
|
| | | } else {
|
| | | struDeicing.byEnableDeicing = 0;//å
³é
|
| | | }
|
| | | struDeicing.write();
|
| | | boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_DEVSERVER_CFG, channelNum, point, struDeicing.size());
|
| | | if (!bool) {
|
| | | int code = hCNetSDK.NET_DVR_GetLastError();
|
| | | log.error("设置é头é¤å°å¤±è´¥,请ç¨åéè¯" + code);
|
| | | }
|
| | | log.debug("设置é头é¤å°æå");
|
| | | return bool;
|
| | | }
|
| | |
|
| | | /**
|
| | | * æªå¾ è¿ç»å端
|
| | | *
|
| | | * @param cmd ç¸æºå½ä»¤
|
| | | */
|
| | | public String captureJPEGPicture(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return "";
|
| | | }
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | NET_DVR_WORKSTATE_V30 devwork = new NET_DVR_WORKSTATE_V30();
|
| | | if (!hCNetSDK.NET_DVR_GetDVRWorkState_V30(userId, devwork)) {
|
| | | // è¿åBooleanå¼ï¼å¤ææ¯å¦è·å设å¤è½å
|
| | | log.error("æå¾å¤±è´¥ï¼è¯·ç¨åéè¯");
|
| | | }
|
| | | //å¾çè´¨é
|
| | | NET_DVR_JPEGPARA jpeg = new NET_DVR_JPEGPARA();
|
| | | //设置å¾çå辨ç
|
| | | jpeg.wPicSize = 0;
|
| | | //设置å¾çè´¨é
|
| | | jpeg.wPicQuality = 0;
|
| | | IntByReference a = new IntByReference();
|
| | | //设置å¾ç大å°
|
| | | ByteBuffer jpegBuffer = ByteBuffer.allocate(1024 * 1024);
|
| | | // æå¾å°å
åï¼åå¸§æ°æ®æè·å¹¶ä¿åæJPEG忾卿å®çå
å空é´ä¸
|
| | | boolean is = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(userId, channelNum, jpeg, jpegBuffer, 1024 * 1024, a);
|
| | | log.debug("-----------è¿éå¼å§å¾çåå
¥å
å----------" + is);
|
| | |
|
| | | Base64.Encoder decoder = Base64.getEncoder();
|
| | | // BASE64Encoder encoder = new BASE64Encoder();
|
| | | String png_base64 = decoder.encodeToString(jpegBuffer.array());//è½¬æ¢æbase64串
|
| | | png_base64 = png_base64.replaceAll("\n", "").replaceAll("\r", "");//å é¤ \r\n
|
| | | log.debug("-----------å¤ç宿æªå¾æ°æ®----------");
|
| | | return png_base64;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @æè¿° æªå¾ åæå¡å¨
|
| | | * @åæ° [cameraId, channelNum]
|
| | | * @è¿åå¼ java.lang.String
|
| | | * @å建人 åèä¹
|
| | | * @å建æ¶é´ 2023/2/2 14:59
|
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯
|
| | | */
|
| | | @Override
|
| | | public String picCutCate(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return "";
|
| | | }
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | //å¾çä¿¡æ¯
|
| | | NET_DVR_JPEGPARA jpeg = new NET_DVR_JPEGPARA();
|
| | | //设置å¾çå辨ç
|
| | | //å¾ç尺寸ï¼0-CIF(352*288/352*240)ï¼1-QCIF(176*144/176*120)ï¼2-4CIF(704*576/704*480)æD1(720*576/720*486)ï¼3-UXGA(1600*1200)ï¼
|
| | | // 4-SVGA(800*600)ï¼5-HD720P(1280*720)ï¼6-VGA(640*480)ï¼7-XVGA(1280*960)ï¼8-HD900P(1600*900)ï¼9-HD1080P(1920*1080)ï¼10-2560*1920ï¼
|
| | | // 11-1600*304ï¼12-2048*1536ï¼13-2448*2048ï¼14-2448*1200ï¼15-2448*800ï¼16-XGA(1024*768)ï¼17-SXGA(1280*1024)ï¼18-WD1(960*576/960*480),
|
| | | // 19-1080I(1920*1080)ï¼20-576*576ï¼21-1536*1536ï¼22-1920*1920ï¼23-320*240ï¼24-720*720ï¼25-1024*768ï¼26-1280*1280ï¼27-1600*600ï¼
|
| | | // 28-2048*768ï¼29-160*120ï¼75-336*256ï¼78-384*256ï¼79-384*216ï¼80-320*256ï¼82-320*192ï¼83-512*384ï¼127-480*272ï¼128-512*272ï¼ 161-288*320ï¼
|
| | | // 162-144*176ï¼163-480*640ï¼164-240*320ï¼165-120*160ï¼166-576*720ï¼167-720*1280ï¼168-576*960ï¼180-180*240, 181-360*480, 182-540*720,
|
| | | // 183-720*960, 184-960*1280, 185-1080*1440, 500-384*288, 0xff-Auto(使ç¨å½åç æµå辨ç)
|
| | | jpeg.wPicSize = 0;
|
| | | //设置å¾çè´¨éï¼0-æå¥½ï¼1-è¾å¥½ï¼2-ä¸è¬
|
| | | jpeg.wPicQuality = 0;
|
| | | IntByReference a = new IntByReference();
|
| | | //设置å¾ç大å°
|
| | | ByteBuffer jpegBuffer = ByteBuffer.allocate(1024 * 1024);
|
| | | // æå¾å°å
åï¼åå¸§æ°æ®æè·å¹¶ä¿åæJPEG忾卿å®çå
å空é´ä¸
|
| | | log.debug("-----------è¿éå¼å§å°è£
NET_DVR_CaptureJPEGPicture_NEW---------");
|
| | | boolean is = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(userId, channelNum, jpeg, jpegBuffer, 1024 * 1024, a);
|
| | | log.debug("-----------è¿éå¼å§å¾çåå
¥å
å----------" + is);
|
| | | if (is) {
|
| | | log.debug("hksdk(æå¾)-ç»æç¶æå¼(0表示æå):" + hCNetSDK.NET_DVR_GetLastError());
|
| | | byte[] array = jpegBuffer.array();
|
| | | //åå¨å°minio
|
| | | String BucketName = "pic";
|
| | | String ObjectName = "capture/" + IdUtils.simpleUUID() + ".jpeg";
|
| | | InputStream input = new ByteArrayInputStream(array);
|
| | | String url = "";
|
| | | try {
|
| | | boolean b = MinioUtil.uploadObject(BucketName, ObjectName, input, input.available(), MimeTypeUtils.IMAGE_JPEG);
|
| | | if (b) {
|
| | | url = MinioUtil.getBucketObjectUrl(BucketName, ObjectName);
|
| | | log.debug("ä¸ä¼ æä»¶æå!" + url);
|
| | | }
|
| | | } catch (IOException ex) {
|
| | | log.error("ä¸ä¼ æä»¶å¼å¸¸ï¼" + ex.getMessage());
|
| | | }
|
| | | return url;
|
| | | } else {
|
| | | int code = hCNetSDK.NET_DVR_GetLastError();
|
| | | log.error("æå¾å¤±è´¥,请ç¨åéè¯" + code);
|
| | | return "";
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * @æè¿° çæ¶å½å
|
| | | * @åæ° [userId, channelNum, enable]
|
| | | * @è¿åå¼ void
|
| | | * @å建人 åèä¹
|
| | | * @å建æ¶é´ 2023/1/20 11:18
|
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯
|
| | | */
|
| | | @Override
|
| | | public String record(CameraCmd cmd) {
|
| | | try {
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | | String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4");
|
| | | boolean enable = cmd.isEnable();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return "";
|
| | | }
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | //强å¶Iå¸§ç»æä½å¯¹è±¡
|
| | | HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //æ°å»ºç»æä½å¯¹è±¡
|
| | | netDvrIFrame.read();
|
| | | netDvrIFrame.dwChannel = channelNum;//å ä¸ºä¸æä»£ç ä¸è®¾ç½®äºééå·ï¼æç
§ä¸æä¸ç设置
|
| | | netDvrIFrame.byStreamType = 0;
|
| | | netDvrIFrame.dwSize = netDvrIFrame.size();
|
| | | netDvrIFrame.write();
|
| | | if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) {
|
| | | log.error("强å¶I帧 é误ç 为: " + hCNetSDK.NET_DVR_GetLastError());
|
| | | }
|
| | | //é¢è§åæ°
|
| | | NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO();
|
| | | previewinfo.read();
|
| | | previewinfo.lChannel = channelNum;
|
| | | previewinfo.dwStreamType = 0;//ç æµç±»åï¼0-ä¸»ç æµï¼1-åç æµï¼2-ä¸ç æµï¼3-èæç æµï¼ä»¥æ¤ç±»æ¨
|
| | | previewinfo.dwLinkMode = 0;//è¿æ¥æ¹å¼ï¼0-TCPæ¹å¼ï¼1-UDPæ¹å¼ï¼2-夿æ¹å¼ï¼3-RTPæ¹å¼ï¼4-RTP/RTSPï¼5-RTP/HTTPï¼6-HRUDPï¼å¯é ä¼ è¾ï¼ï¼7-RTSP/HTTPSï¼8-NPQ
|
| | | previewinfo.hPlayWnd = null;//ææ¾çªå£ç奿ï¼ä¸ºNULL表示ä¸è§£ç æ¾ç¤ºã
|
| | | previewinfo.bBlocked = 0;//0- éé»å¡åæµï¼1-é»å¡åæµ
|
| | | previewinfo.byNPQMode = 0;//NPQ模å¼ï¼0-ç´è¿æ¨¡å¼ï¼1-è¿æµåªä½æ¨¡å¼
|
| | | previewinfo.write();
|
| | | String url = "";
|
| | | if (enable) {
|
| | | if (!GlobalVariable.previewMap.containsKey(cameraId)) {
|
| | | int lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null);
|
| | | if (lRealHandle == -1) {
|
| | | log.error("åæµå¤±è´¥" + hCNetSDK.NET_DVR_GetLastError());
|
| | | return "";
|
| | | }
|
| | | log.debug("åæµæå");
|
| | | GlobalVariable.previewMap.put(cameraId, lRealHandle);
|
| | | }
|
| | | if (!hCNetSDK.NET_DVR_SaveRealData_V30(GlobalVariable.previewMap.get(cameraId), 2, path)) {
|
| | | log.error("ä¿åè§é¢æä»¶å°ä¸´æ¶æä»¶å¤¹å¤±è´¥ é误ç 为: " + hCNetSDK.NET_DVR_GetLastError());
|
| | | return "";
|
| | | }
|
| | | log.debug("å½åå¼å§");
|
| | | } else {
|
| | | if (GlobalVariable.previewMap.containsKey(cameraId)) {
|
| | | Integer lRealHandle = GlobalVariable.previewMap.get(cameraId);
|
| | | hCNetSDK.NET_DVR_StopRealPlay(lRealHandle);
|
| | | GlobalVariable.previewMap.remove(cameraId);
|
| | | }
|
| | | log.debug("å½å忢");
|
| | | //åå
¥minio
|
| | | String BucketName = "record";
|
| | | String ObjectName = IdUtils.simpleUUID() + ".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 recordStart(CameraCmd cmd) {
|
| | | try {
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | | String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4");
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | //强å¶Iå¸§ç»æä½å¯¹è±¡
|
| | | HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //æ°å»ºç»æä½å¯¹è±¡
|
| | | netDvrIFrame.read();
|
| | | netDvrIFrame.dwChannel = channelNum;//å ä¸ºä¸æä»£ç ä¸è®¾ç½®äºééå·ï¼æç
§ä¸æä¸ç设置
|
| | | netDvrIFrame.byStreamType = 0;
|
| | | netDvrIFrame.dwSize = netDvrIFrame.size();
|
| | | netDvrIFrame.write();
|
| | | if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) {
|
| | | log.error("强å¶I帧 é误ç 为: " + hCNetSDK.NET_DVR_GetLastError());
|
| | | }
|
| | | //é¢è§åæ°
|
| | | NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO();
|
| | | previewinfo.read();
|
| | | previewinfo.lChannel = channelNum;
|
| | | previewinfo.dwStreamType = 0;//ç æµç±»åï¼0-ä¸»ç æµï¼1-åç æµï¼2-ä¸ç æµï¼3-èæç æµï¼ä»¥æ¤ç±»æ¨
|
| | | previewinfo.dwLinkMode = 0;//è¿æ¥æ¹å¼ï¼0-TCPæ¹å¼ï¼1-UDPæ¹å¼ï¼2-夿æ¹å¼ï¼3-RTPæ¹å¼ï¼4-RTP/RTSPï¼5-RTP/HTTPï¼6-HRUDPï¼å¯é ä¼ è¾ï¼ï¼7-RTSP/HTTPSï¼8-NPQ
|
| | | previewinfo.hPlayWnd = null;//ææ¾çªå£ç奿ï¼ä¸ºNULL表示ä¸è§£ç æ¾ç¤ºã
|
| | | previewinfo.bBlocked = 0;//0- éé»å¡åæµï¼1-é»å¡åæµ
|
| | | previewinfo.byNPQMode = 0;//NPQ模å¼ï¼0-ç´è¿æ¨¡å¼ï¼1-è¿æµåªä½æ¨¡å¼
|
| | | previewinfo.write();
|
| | | if (GlobalVariable.previewMap.containsKey(cameraId)) {
|
| | | Integer lRealHandle = GlobalVariable.previewMap.get(cameraId);
|
| | | hCNetSDK.NET_DVR_StopRealPlay(lRealHandle);
|
| | | GlobalVariable.previewMap.remove(cameraId);
|
| | | log.debug("忢å½åå½å");
|
| | | }
|
| | | int lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null);
|
| | | if (lRealHandle == -1) {
|
| | | log.error("åæµå¤±è´¥" + hCNetSDK.NET_DVR_GetLastError());
|
| | | return false;
|
| | | }
|
| | | log.debug("åæµæå");
|
| | | GlobalVariable.threadMap.put(cameraId, Thread.currentThread().getName());
|
| | | GlobalVariable.previewMap.put(cameraId, lRealHandle);
|
| | | if (!hCNetSDK.NET_DVR_SaveRealData_V30(GlobalVariable.previewMap.get(cameraId), 2, path)) {
|
| | | log.error("ä¿åè§é¢æä»¶å°ä¸´æ¶æä»¶å¤¹å¤±è´¥ é误ç 为: " + hCNetSDK.NET_DVR_GetLastError());
|
| | | 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();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | | String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4");
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return "";
|
| | | }
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | //region 强å¶I帧
|
| | | HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //æ°å»ºç»æä½å¯¹è±¡
|
| | | netDvrIFrame.read();
|
| | | netDvrIFrame.dwChannel = channelNum;//å ä¸ºä¸æä»£ç ä¸è®¾ç½®äºééå·ï¼æç
§ä¸æä¸ç设置
|
| | | netDvrIFrame.byStreamType = 0;
|
| | | netDvrIFrame.dwSize = netDvrIFrame.size();
|
| | | netDvrIFrame.write();
|
| | | if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) {
|
| | | log.error("强å¶I帧 é误ç 为: " + hCNetSDK.NET_DVR_GetLastError());
|
| | | }
|
| | | //endregion
|
| | | //region é¢è§åæ°
|
| | | NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO();
|
| | | previewinfo.read();
|
| | | previewinfo.lChannel = channelNum;
|
| | | previewinfo.dwStreamType = 0;//ç æµç±»åï¼0-ä¸»ç æµï¼1-åç æµï¼2-ä¸ç æµï¼3-èæç æµï¼ä»¥æ¤ç±»æ¨
|
| | | previewinfo.dwLinkMode = 0;//è¿æ¥æ¹å¼ï¼0-TCPæ¹å¼ï¼1-UDPæ¹å¼ï¼2-夿æ¹å¼ï¼3-RTPæ¹å¼ï¼4-RTP/RTSPï¼5-RTP/HTTPï¼6-HRUDPï¼å¯é ä¼ è¾ï¼ï¼7-RTSP/HTTPSï¼8-NPQ
|
| | | previewinfo.hPlayWnd = null;//ææ¾çªå£ç奿ï¼ä¸ºNULL表示ä¸è§£ç æ¾ç¤ºã
|
| | | previewinfo.bBlocked = 0;//0- éé»å¡åæµï¼1-é»å¡åæµ
|
| | | previewinfo.byNPQMode = 0;//NPQ模å¼ï¼0-ç´è¿æ¨¡å¼ï¼1-è¿æµåªä½æ¨¡å¼
|
| | | previewinfo.write();
|
| | | //endregion
|
| | | if (GlobalVariable.previewMap.containsKey(cameraId)) {
|
| | | Integer lRealHandle = GlobalVariable.previewMap.get(cameraId);
|
| | | hCNetSDK.NET_DVR_StopRealPlay(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 recordStopNotToMinio(CameraCmd cmd) {
|
| | | boolean result = false;
|
| | | try {
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return false;
|
| | | }
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | //强å¶Iå¸§ç»æä½å¯¹è±¡
|
| | | HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //æ°å»ºç»æä½å¯¹è±¡
|
| | | netDvrIFrame.read();
|
| | | netDvrIFrame.dwChannel = channelNum;//å ä¸ºä¸æä»£ç ä¸è®¾ç½®äºééå·ï¼æç
§ä¸æä¸ç设置
|
| | | netDvrIFrame.byStreamType = 0;
|
| | | netDvrIFrame.dwSize = netDvrIFrame.size();
|
| | | netDvrIFrame.write();
|
| | | if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) {
|
| | | log.error("强å¶I帧 é误ç 为: " + hCNetSDK.NET_DVR_GetLastError());
|
| | | }
|
| | | //é¢è§åæ°
|
| | | NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO();
|
| | | previewinfo.read();
|
| | | previewinfo.lChannel = channelNum;
|
| | | previewinfo.dwStreamType = 0;//ç æµç±»åï¼0-ä¸»ç æµï¼1-åç æµï¼2-ä¸ç æµï¼3-èæç æµï¼ä»¥æ¤ç±»æ¨
|
| | | previewinfo.dwLinkMode = 0;//è¿æ¥æ¹å¼ï¼0-TCPæ¹å¼ï¼1-UDPæ¹å¼ï¼2-夿æ¹å¼ï¼3-RTPæ¹å¼ï¼4-RTP/RTSPï¼5-RTP/HTTPï¼6-HRUDPï¼å¯é ä¼ è¾ï¼ï¼7-RTSP/HTTPSï¼8-NPQ
|
| | | previewinfo.hPlayWnd = null;//ææ¾çªå£ç奿ï¼ä¸ºNULL表示ä¸è§£ç æ¾ç¤ºã
|
| | | previewinfo.bBlocked = 0;//0- éé»å¡åæµï¼1-é»å¡åæµ
|
| | | previewinfo.byNPQMode = 0;//NPQ模å¼ï¼0-ç´è¿æ¨¡å¼ï¼1-è¿æµåªä½æ¨¡å¼
|
| | | previewinfo.write();
|
| | | if (GlobalVariable.previewMap.containsKey(cameraId)) {
|
| | | Integer lRealHandle = GlobalVariable.previewMap.get(cameraId);
|
| | | hCNetSDK.NET_DVR_StopRealPlay(lRealHandle);
|
| | | GlobalVariable.previewMap.remove(cameraId);
|
| | | }
|
| | | log.debug("å½å忢");
|
| | | result = true;
|
| | | } catch (Exception ex) {
|
| | | log.error("å½å忢å¼å¸¸" + ex.getMessage());
|
| | | result = false;
|
| | | }
|
| | | return result;
|
| | | }
|
| | |
|
| | | //è·åIPéé
|
| | | @Override
|
| | | public List<ArdChannel> getCameraChannelList(ArdCameras camera) {
|
| | | /*è·åéé*/
|
| | | List<ArdChannel> channelList = new ArrayList<>();
|
| | | try {
|
| | | Integer chanNum = camera.getChanNum();
|
| | | Integer startDChan = camera.getStartDChan();
|
| | | if (chanNum > 0) {
|
| | | // è·åééå·
|
| | | for (int iChannum = 0; iChannum < chanNum; iChannum++) {
|
| | | ArdChannel ardChannel = new ArdChannel();
|
| | | int channum = iChannum + startDChan + 1;
|
| | | HCNetSDK.NET_DVR_PICCFG_V40 strPicCfg = new HCNetSDK.NET_DVR_PICCFG_V40();
|
| | | strPicCfg.dwSize = strPicCfg.size();
|
| | | strPicCfg.write();
|
| | | Pointer pStrPicCfg = strPicCfg.getPointer();
|
| | | NativeLong lChannel = new NativeLong(channum);
|
| | | IntByReference pInt = new IntByReference(0);
|
| | | boolean b_GetPicCfg = hCNetSDK.NET_DVR_GetDVRConfig(camera.getLoginId(), HCNetSDK.NET_DVR_GET_PICCFG_V40, lChannel.intValue(),
|
| | | pStrPicCfg, strPicCfg.size(), pInt);
|
| | | if (b_GetPicCfg) {
|
| | | strPicCfg.read();
|
| | | String channelName = new String(strPicCfg.sChanName, "GBK").trim();
|
| | | ardChannel.setName(channelName);
|
| | | }
|
| | | ardChannel.setDeviceId(camera.getId());
|
| | | ardChannel.setChanNo(iChannum + 1);
|
| | | channelList.add(ardChannel);
|
| | | }
|
| | | }
|
| | | } catch (Exception ex) {
|
| | | log.error("è·åç¸æºééå¼å¸¸:" + ex.getMessage());
|
| | | }
|
| | | return channelList;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @æè¿° è·åGISä¿¡æ¯æ°æ®
|
| | | * @åæ° [userId, channelNum]
|
| | | * @è¿åå¼ boolean
|
| | | * @å建人 åèä¹
|
| | | * @å建æ¶é´ 2023/1/17 16:36
|
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯ 0-è§£é 1-éå®
|
| | | */
|
| | | @Override
|
| | | public Map<String, Object> getGisInfo(CameraCmd cmd) {
|
| | | String cameraId = cmd.getCameraId();
|
| | | Integer channelNum = cmd.getChanNo();
|
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) {
|
| | | return new HashMap<>();
|
| | | }
|
| | | // è·ååæ°
|
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
|
| | | HCNetSDK.NET_DVR_STD_CONFIG struStdCfg = new HCNetSDK.NET_DVR_STD_CONFIG();
|
| | | HCNetSDK.NET_DVR_GIS_INFO struGisInfo = new HCNetSDK.NET_DVR_GIS_INFO();
|
| | | struStdCfg.read();
|
| | | IntByReference lchannel = new IntByReference(channelNum);
|
| | | struStdCfg.lpCondBuffer = lchannel.getPointer();
|
| | | struStdCfg.dwCondSize = 4;
|
| | | struStdCfg.lpOutBuffer = struGisInfo.getPointer();
|
| | | struStdCfg.dwOutSize = struGisInfo.size();
|
| | | struStdCfg.write();//设置åä¹åè¦write()
|
| | | boolean bool = hCNetSDK.NET_DVR_GetSTDConfig(userId, NET_DVR_GET_GISINFO, struStdCfg);
|
| | | if (!bool) {
|
| | | int code = hCNetSDK.NET_DVR_GetLastError();
|
| | | log.error("è·åGISä¿¡æ¯æ°æ®å¤±è´¥,请ç¨åéè¯" + code);
|
| | | return new HashMap<>();
|
| | | } else {
|
| | | struGisInfo.read();
|
| | | Map<String, Object> map = new HashMap<>();
|
| | | map.put("p", struGisInfo.struPtzPos.fPanPos);
|
| | | map.put("t", struGisInfo.struPtzPos.fTiltPos < 0 ? struGisInfo.struPtzPos.fTiltPos + 360 : struGisInfo.struPtzPos.fTiltPos);
|
| | | map.put("z", struGisInfo.struPtzPos.fZoomPos);
|
| | | map.put("fHorFieldAngle", struGisInfo.fHorizontalValue);// æ°´å¹³è§åºè§
|
| | | map.put("fVerFieldAngle", struGisInfo.fVerticalValue);// åç´è§åºè§
|
| | | return map;
|
| | | }
|
| | | }
|
| | | } |
| | | package com.ruoyi.utils.sdk.hiksdk.service.impl; |
| | | |
| | | import com.ruoyi.alarm.global.domain.GuidePriorityQueue; |
| | | import com.ruoyi.alarm.global.domain.GuideTask; |
| | | 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.uuid.IdUtils; |
| | | import com.ruoyi.device.camera.service.IArdCamerasService; |
| | | import com.ruoyi.device.camera.strategy.SdkStrategy; |
| | | import com.ruoyi.device.camera.domain.ArdCameras; |
| | | import com.ruoyi.device.camera.domain.CameraCmd; |
| | | import com.ruoyi.device.channel.domain.ArdChannel; |
| | | import com.ruoyi.device.channel.service.IArdChannelService; |
| | | import com.ruoyi.media.domain.Vtdu; |
| | | import com.ruoyi.media.service.IVtduService; |
| | | import com.ruoyi.utils.gis.GisUtil; |
| | | import com.ruoyi.utils.minio.MinioUtil; |
| | | import com.ruoyi.utils.sdk.common.GlobalVariable; |
| | | import com.ruoyi.utils.sdk.hiksdk.lib.ExceptionCallBack; |
| | | import com.ruoyi.utils.sdk.hiksdk.lib.HCNetSDK; |
| | | import com.sun.jna.NativeLong; |
| | | import com.sun.jna.Platform; |
| | | import com.sun.jna.Pointer; |
| | | import com.sun.jna.ptr.IntByReference; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.scheduling.annotation.Async; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.io.*; |
| | | import java.math.BigDecimal; |
| | | import java.nio.ByteBuffer; |
| | | import java.text.DecimalFormat; |
| | | import java.util.*; |
| | | import java.util.concurrent.PriorityBlockingQueue; |
| | | |
| | | import static com.ruoyi.utils.sdk.hiksdk.lib.HCNetSDK.*; |
| | | import static com.ruoyi.utils.sdk.hiksdk.lib.HCNetSDK.NET_DVR_GET_GISINFO; |
| | | |
| | | /** |
| | | * @Description: 海康sdkçç¥ |
| | | * @ClassName: DhSdkStrategy |
| | | * @Author: åèä¹ |
| | | * @Date: 2023å¹´11æ07æ¥10:51:09 |
| | | **/ |
| | | @Service |
| | | @Slf4j(topic = "hikSdk") |
| | | public class HikSdkStrategy implements SdkStrategy { |
| | | @Resource |
| | | private IArdCamerasService ardCamerasService; |
| | | @Resource |
| | | private IArdChannelService ardChannelService; |
| | | @Resource |
| | | private IVtduService vtduService; |
| | | |
| | | public static HCNetSDK hCNetSDK = HCNetSDK.hCNetSDK; |
| | | private static HCNetSDK.FExceptionCallBack fExceptionCallBack;//å¼å¸¸åè° |
| | | |
| | | /** |
| | | * @æè¿° 注åç»å½ åªæ¯æåæ¥ç»éï¼ä¸å®æ¹ä¸å»ºè®®ç´æ¥å¨æ¤æ¥å£ä¸åèæ¶æä½ |
| | | * @åæ° [dvrLogin] |
| | | * @è¿åå¼ java.lang.Integer |
| | | * @å建人 åèä¹ |
| | | * @å建æ¶é´ 2023/1/17 16:12 |
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯ |
| | | */ |
| | | @Override |
| | | public boolean login(ArdCameras camera) { |
| | | try { |
| | | // åå§å |
| | | if (!hCNetSDK.NET_DVR_Init()) { |
| | | log.error("SDKåå§å失败"); |
| | | } |
| | | //æå°æµ·åº·sdkæ¥å¿ |
| | | if (Platform.isWindows()) { |
| | | String WIN_PATH = System.getProperty("user.dir") + File.separator + "ardLog" + File.separator + "logs" + File.separator; |
| | | hCNetSDK.NET_DVR_SetLogToFile(3, WIN_PATH, true); |
| | | } else { |
| | | hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", true); |
| | | } |
| | | String m_sDeviceIP = camera.getIp(); |
| | | String m_sUsername = camera.getUsername(); |
| | | String m_sPassword = camera.getPassword(); |
| | | short m_sPort = camera.getPort().shortValue(); |
| | | //è®¾ç½®è¿æ¥æ¶é´ä¸éè¿æ¶é´ |
| | | hCNetSDK.NET_DVR_SetConnectTime(2000, 1); |
| | | hCNetSDK.NET_DVR_SetReconnect(5000, true); |
| | | //设å¤ä¿¡æ¯, è¾åºåæ° |
| | | HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40(); |
| | | HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO(); |
| | | |
| | | // 注å设å¤-ç»å½åæ°ï¼å
æ¬è®¾å¤å°åãç»å½ç¨æ·ãå¯ç ç |
| | | m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN]; |
| | | System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length()); |
| | | m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN]; |
| | | System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length()); |
| | | m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN]; |
| | | System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length()); |
| | | m_strLoginInfo.wPort = m_sPort; |
| | | m_strLoginInfo.byVerifyMode = 0; |
| | | m_strLoginInfo.byLoginMode = 0; |
| | | //æ¯å¦å¼æ¥ç»å½ï¼0- å¦ï¼1- æ¯ windowsSDK鿝trueåfalse |
| | | m_strLoginInfo.bUseAsynLogin = false; |
| | | m_strLoginInfo.write(); |
| | | //忥ç»å½ |
| | | int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); |
| | | if (lUserID < 0) { |
| | | log.debug("Login Failed [ " + camera.getIp() + ":" + camera.getPort() + " ],é误ç ï¼" + hCNetSDK.NET_DVR_GetLastError()); |
| | | camera.setChanNum(0); |
| | | camera.setLoginId(-1); |
| | | camera.setState("0"); |
| | | //å é¤ç®¡çéé |
| | | ardChannelService.deleteArdChannelByDeviceId(camera.getId()); |
| | | ardCamerasService.updateArdCameras(camera); |
| | | return false; |
| | | } |
| | | |
| | | log.debug("Login Success [ " + camera.getIp() + ":" + camera.getPort() + " ]"); |
| | | if (fExceptionCallBack == null) { |
| | | fExceptionCallBack = new ExceptionCallBack();//å¼å¸¸åè° |
| | | //设置å¼å¸¸åè°å½æ°(å¯å¨åè°å½æ°ä¸è·å设å¤ä¸ä¸çº¿ç¶æç) |
| | | if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, null)) { |
| | | log.debug("Set fExceptionCallBack function fail"); |
| | | return false; |
| | | } else { |
| | | log.debug("Set fExceptionCallBack function successfully!"); |
| | | } |
| | | } |
| | | |
| | | if (GlobalVariable.loginMap.containsKey(camera.getId())) { |
| | | GlobalVariable.loginMap.remove(camera.getId()); |
| | | } |
| | | |
| | | //å é¤ç®¡çéé |
| | | ardChannelService.deleteArdChannelByDeviceId(camera.getId()); |
| | | GlobalVariable.loginMap.put(camera.getId(), lUserID); |
| | | GlobalVariable.loginCameraMap.put(lUserID, camera); |
| | | |
| | | camera.setLoginId(lUserID); |
| | | camera.setState("1"); |
| | | camera.setChanNum((int) m_strDeviceInfo.struDeviceV30.byChanNum); |
| | | camera.setStartDChan((int) m_strDeviceInfo.struDeviceV30.byStartDChan); |
| | | ardCamerasService.updateArdCameras(camera); |
| | | //è·åææ°éé |
| | | List<ArdChannel> cameraChannelList = getCameraChannelList(camera); |
| | | if (cameraChannelList.size() > 0) { |
| | | for (ArdChannel channel : cameraChannelList) { |
| | | channel.setId(IdUtils.simpleUUID()); |
| | | ardChannelService.insertArdChannel(channel); |
| | | } |
| | | //æ·»å å°æµåªä½ |
| | | for (ArdChannel channel : cameraChannelList) { |
| | | String name = camera.getId() + "_" + channel.getChanNo(); |
| | | String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/h264/ch" + channel.getChanNo() + "/main/av_stream"; |
| | | Vtdu vtdu = vtduService.selectVtduByName(name); |
| | | if (vtdu != null) { |
| | | vtduService.deleteVtduByName(name); |
| | | } |
| | | //æ·»å å°æµåªä½ |
| | | vtdu = new Vtdu(); |
| | | vtdu.setRtspSource(rtspSource); |
| | | vtdu.setName(camera.getId() + "_" + channel.getChanNo()); |
| | | CameraCmd cmd = new CameraCmd(camera.getId(), channel.getChanNo()); |
| | | Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd); |
| | | if (videoCompressionCfg.get("videoEncType").equals("æ åh264")) { |
| | | vtdu.setIsCode("0");//é»è®¤ä¸è½¬ç |
| | | } else { |
| | | vtdu.setIsCode("1");//é»è®¤è½¬ç |
| | | } |
| | | vtdu.setMode("1");//é»è®¤CPU软解ç |
| | | vtdu.setCameraId(camera.getId()); |
| | | vtduService.insertVtdu(vtdu); |
| | | } |
| | | } |
| | | //å建å¼å¯¼éå |
| | | if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) { |
| | | Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator(); |
| | | PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator); |
| | | GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue); |
| | | } |
| | | |
| | | } catch (Exception ex) { |
| | | log.error("注å设å¤å¼å¸¸", ex); |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * @æè¿° 注åç»å½ éæäºNET_DVR_Login_V30ï¼æ¯æåæ¥å弿¥ç»å½ |
| | | * @åæ° [dvrLogin] |
| | | * @è¿åå¼ java.lang.Integer |
| | | * @å建人 åèä¹ |
| | | * @å建æ¶é´ 2023/1/17 16:12 |
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯ |
| | | */ |
| | | @Override |
| | | @Async("loginExecutor") |
| | | public void asyncLogin(ArdCameras camera) { |
| | | try { |
| | | // åå§å |
| | | if (!hCNetSDK.NET_DVR_Init()) { |
| | | log.error("SDKåå§å失败"); |
| | | } |
| | | //æå°æµ·åº·sdkæ¥å¿ |
| | | if (Platform.isWindows()) { |
| | | String WIN_PATH = System.getProperty("user.dir") + File.separator + "ardLog" + File.separator + "logs" + File.separator; |
| | | hCNetSDK.NET_DVR_SetLogToFile(3, WIN_PATH, true); |
| | | } else { |
| | | hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", true); |
| | | } |
| | | String m_sDeviceIP = camera.getIp(); |
| | | String m_sUsername = camera.getUsername(); |
| | | String m_sPassword = camera.getPassword(); |
| | | short m_sPort = camera.getPort().shortValue(); |
| | | //è®¾ç½®è¿æ¥æ¶é´ä¸éè¿æ¶é´ |
| | | hCNetSDK.NET_DVR_SetConnectTime(2000, 1); |
| | | hCNetSDK.NET_DVR_SetReconnect(5000, true); |
| | | //设å¤ä¿¡æ¯, è¾åºåæ° |
| | | HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40(); |
| | | HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO(); |
| | | |
| | | // 注å设å¤-ç»å½åæ°ï¼å
æ¬è®¾å¤å°åãç»å½ç¨æ·ãå¯ç ç |
| | | m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN]; |
| | | System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length()); |
| | | m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN]; |
| | | System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length()); |
| | | m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN]; |
| | | System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length()); |
| | | m_strLoginInfo.wPort = m_sPort; |
| | | m_strLoginInfo.byVerifyMode = 0; |
| | | m_strLoginInfo.byLoginMode = 0; |
| | | //æ¯å¦å¼æ¥ç»å½ï¼0- å¦ï¼1- æ¯ windowsSDK鿝trueåfalse |
| | | m_strLoginInfo.bUseAsynLogin = false; |
| | | m_strLoginInfo.write(); |
| | | //忥ç»å½ |
| | | int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); |
| | | if (lUserID < 0) { |
| | | log.debug("Login Failed [ " + camera.getIp() + ":" + camera.getPort() + " ],é误ç ï¼" + hCNetSDK.NET_DVR_GetLastError()); |
| | | camera.setChanNum(0); |
| | | camera.setLoginId(-1); |
| | | camera.setState("0"); |
| | | //å é¤ç®¡çéé |
| | | ardChannelService.deleteArdChannelByDeviceId(camera.getId()); |
| | | ardCamerasService.updateArdCameras(camera); |
| | | return ; |
| | | } |
| | | |
| | | log.debug("Login Success [ " + camera.getIp() + ":" + camera.getPort() + " ]"); |
| | | if (fExceptionCallBack == null) { |
| | | fExceptionCallBack = new ExceptionCallBack();//å¼å¸¸åè° |
| | | //设置å¼å¸¸åè°å½æ°(å¯å¨åè°å½æ°ä¸è·å设å¤ä¸ä¸çº¿ç¶æç) |
| | | if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, null)) { |
| | | log.debug("Set fExceptionCallBack function fail"); |
| | | return ; |
| | | } else { |
| | | log.debug("Set fExceptionCallBack function successfully!"); |
| | | } |
| | | } |
| | | |
| | | if (GlobalVariable.loginMap.containsKey(camera.getId())) { |
| | | GlobalVariable.loginMap.remove(camera.getId()); |
| | | } |
| | | |
| | | //å é¤ç®¡çéé |
| | | ardChannelService.deleteArdChannelByDeviceId(camera.getId()); |
| | | GlobalVariable.loginMap.put(camera.getId(), lUserID); |
| | | GlobalVariable.loginCameraMap.put(lUserID, camera); |
| | | |
| | | camera.setLoginId(lUserID); |
| | | camera.setState("1"); |
| | | camera.setChanNum((int) m_strDeviceInfo.struDeviceV30.byChanNum); |
| | | camera.setStartDChan((int) m_strDeviceInfo.struDeviceV30.byStartDChan); |
| | | ardCamerasService.updateArdCameras(camera); |
| | | //è·åææ°éé |
| | | List<ArdChannel> cameraChannelList = getCameraChannelList(camera); |
| | | if (cameraChannelList.size() > 0) { |
| | | for (ArdChannel channel : cameraChannelList) { |
| | | channel.setId(IdUtils.simpleUUID()); |
| | | ardChannelService.insertArdChannel(channel); |
| | | } |
| | | //æ·»å å°æµåªä½ |
| | | for (ArdChannel channel : cameraChannelList) { |
| | | String name = camera.getId() + "_" + channel.getChanNo(); |
| | | String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/h264/ch" + channel.getChanNo() + "/main/av_stream"; |
| | | Vtdu vtdu = vtduService.selectVtduByName(name); |
| | | if (vtdu != null) { |
| | | vtduService.deleteVtduByName(name); |
| | | } |
| | | //æ·»å å°æµåªä½ |
| | | vtdu = new Vtdu(); |
| | | vtdu.setRtspSource(rtspSource); |
| | | vtdu.setName(camera.getId() + "_" + channel.getChanNo()); |
| | | CameraCmd cmd = new CameraCmd(camera.getId(), channel.getChanNo()); |
| | | Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd); |
| | | if (videoCompressionCfg.get("videoEncType").equals("æ åh264")) { |
| | | vtdu.setIsCode("0");//é»è®¤ä¸è½¬ç |
| | | } else { |
| | | vtdu.setIsCode("1");//é»è®¤è½¬ç |
| | | } |
| | | vtdu.setMode("1");//é»è®¤CPU软解ç |
| | | vtdu.setCameraId(camera.getId()); |
| | | vtduService.insertVtdu(vtdu); |
| | | } |
| | | } |
| | | //å建å¼å¯¼éå |
| | | if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) { |
| | | Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator(); |
| | | PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator); |
| | | GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue); |
| | | } |
| | | |
| | | } catch (Exception ex) { |
| | | log.error("注å设å¤å¼å¸¸", ex); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @æè¿° 注éç»å½ |
| | | * @åæ° [dvrLogin] |
| | | * @è¿åå¼ java.lang.Integer |
| | | * @å建人 åèä¹ |
| | | * @å建æ¶é´ 2023/1/17 16:12 |
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯ |
| | | */ |
| | | @Override |
| | | public boolean logout(String cameraId) { |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return false; |
| | | } |
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | boolean b = hCNetSDK.NET_DVR_Logout(userId); |
| | | if (b) { |
| | | GlobalVariable.loginMap.remove(cameraId); |
| | | } |
| | | return b; |
| | | } |
| | | |
| | | /** |
| | | * æ¯å¦å¨çº¿ |
| | | * |
| | | * @param cmd ç¸æºå½ä»¤ |
| | | */ |
| | | @Override |
| | | public boolean isOnLine(CameraCmd cmd) { |
| | | try { |
| | | String cameraId = cmd.getCameraId(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return false; |
| | | } |
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | return hCNetSDK.NET_DVR_RemoteControl(userId, NET_DVR_CHECK_USER_STATUS, null, 0); |
| | | } catch (Exception ex) { |
| | | log.error("æ£æµå¨çº¿å¼å¸¸ï¼" + ex.getMessage()); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @æè¿° 带é度çäºå°æ§å¶æä½ |
| | | * Code:1-å·¦ä¸ 2-ä¸ 3-å³ä¸ 4-å·¦ 5-å·¡èª 6-å³ 7-å·¦ä¸ 8-ä¸ 9-å³ä¸ 10-ç¦è·å大 11-ç¦è·åå° |
| | | * 12-ç¦ç¹åè° 13-ç¦ç¹åè° 14-å
忩大 15-å
åç¼©å° 16-é¨å·å¼å¯ |
| | | * @åæ° [userId, channelNum, speed] |
| | | * @è¿åå¼ boolean |
| | | * @å建人 åèä¹ |
| | | * @å建æ¶é´ 2023/1/17 16:14 |
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯ |
| | | */ |
| | | @Override |
| | | public boolean pTZControl(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | boolean enable = cmd.isEnable(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | Integer speed = cmd.getSpeed(); |
| | | Integer code = cmd.getCode(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return false; |
| | | } |
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | int dwStop; |
| | | if (enable) { |
| | | dwStop = 0;//å¼å¯ |
| | | } else { |
| | | dwStop = 1;//å
³é |
| | | } |
| | | int dwPTZCommand = -1; |
| | | switch (code) { |
| | | /*æ¹å*/ |
| | | case 1: |
| | | dwPTZCommand = HCNetSDK.UP_LEFT; |
| | | break; |
| | | case 2: |
| | | dwPTZCommand = HCNetSDK.TILT_UP; |
| | | break; |
| | | case 3: |
| | | dwPTZCommand = HCNetSDK.UP_RIGHT; |
| | | break; |
| | | case 4: |
| | | dwPTZCommand = HCNetSDK.PAN_LEFT; |
| | | break; |
| | | case 5: |
| | | dwPTZCommand = HCNetSDK.RUN_SEQ; |
| | | break; |
| | | case 6: |
| | | dwPTZCommand = HCNetSDK.PAN_RIGHT; |
| | | break; |
| | | case 7: |
| | | dwPTZCommand = HCNetSDK.DOWN_LEFT; |
| | | break; |
| | | case 8: |
| | | dwPTZCommand = HCNetSDK.TILT_DOWN; |
| | | break; |
| | | case 9: |
| | | dwPTZCommand = HCNetSDK.DOWN_RIGHT; |
| | | break; |
| | | /*ç¦è·*/ |
| | | case 10: |
| | | dwPTZCommand = HCNetSDK.ZOOM_IN; |
| | | break; |
| | | case 11: |
| | | dwPTZCommand = HCNetSDK.ZOOM_OUT; |
| | | break; |
| | | /*ç¦ç¹*/ |
| | | case 12: |
| | | dwPTZCommand = HCNetSDK.FOCUS_NEAR; |
| | | break; |
| | | case 13: |
| | | dwPTZCommand = HCNetSDK.FOCUS_FAR; |
| | | break; |
| | | /*å
å*/ |
| | | case 14: |
| | | dwPTZCommand = HCNetSDK.IRIS_OPEN; |
| | | break; |
| | | case 15: |
| | | dwPTZCommand = HCNetSDK.IRIS_CLOSE; |
| | | break; |
| | | /*é¨å·*/ |
| | | case 16: |
| | | dwPTZCommand = HCNetSDK.WIPER_PWRON; |
| | | break; |
| | | } |
| | | boolean bool = hCNetSDK.NET_DVR_PTZControlWithSpeed_Other(userId, channelNum, dwPTZCommand, dwStop, speed); |
| | | if (!bool) { |
| | | int errorCode = hCNetSDK.NET_DVR_GetLastError(); |
| | | log.error("æ§å¶å¤±è´¥,请ç¨åéè¯" + errorCode); |
| | | } |
| | | return bool; |
| | | } |
| | | |
| | | /** |
| | | * 设置èç¦å¼ |
| | | * |
| | | * @param cmd ç¸æºå½ä»¤ |
| | | */ |
| | | @Override |
| | | public boolean setFocusPos(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | Integer dwFocusPos = cmd.getDwFocusPos(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return false; |
| | | } |
| | | // è·ååæ° |
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | HCNetSDK.NET_DVR_STD_CONFIG struStdCfg = new HCNetSDK.NET_DVR_STD_CONFIG(); |
| | | HCNetSDK.NET_DVR_GIS_INFO struGisInfo = new HCNetSDK.NET_DVR_GIS_INFO(); |
| | | struGisInfo.struPtzPosEx.dwFocus = dwFocusPos; |
| | | struStdCfg.read(); |
| | | IntByReference lchannel = new IntByReference(channelNum); |
| | | struStdCfg.lpInBuffer = struGisInfo.getPointer(); |
| | | struStdCfg.lpCondBuffer = lchannel.getPointer(); |
| | | struStdCfg.dwCondSize = 4; |
| | | struStdCfg.dwInSize = struGisInfo.size(); |
| | | struStdCfg.write();//设置åä¹åè¦write() |
| | | boolean bool = hCNetSDK.NET_DVR_SetSTDConfig(userId, NET_DVR_GET_GISINFO, struStdCfg); |
| | | if (!bool) { |
| | | int code = hCNetSDK.NET_DVR_GetLastError(); |
| | | log.error("设置GISä¿¡æ¯æ°æ®å¤±è´¥,请ç¨åéè¯" + code); |
| | | return false; |
| | | } else { |
| | | return true; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è·åèç¦å¼ |
| | | * |
| | | * @param cmd ç¸æºå½ä»¤ |
| | | */ |
| | | @Override |
| | | public int getFocusPos(CameraCmd cmd) { |
| | | int result = 0; |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return result; |
| | | } |
| | | // è·ååæ° |
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | HCNetSDK.NET_DVR_STD_CONFIG struStdCfg = new HCNetSDK.NET_DVR_STD_CONFIG(); |
| | | HCNetSDK.NET_DVR_GIS_INFO struGisInfo = new HCNetSDK.NET_DVR_GIS_INFO(); |
| | | struStdCfg.read(); |
| | | IntByReference lchannel = new IntByReference(channelNum); |
| | | struStdCfg.lpCondBuffer = lchannel.getPointer(); |
| | | struStdCfg.dwCondSize = 4; |
| | | struStdCfg.lpOutBuffer = struGisInfo.getPointer(); |
| | | struStdCfg.dwOutSize = struGisInfo.size(); |
| | | struStdCfg.write();//设置åä¹åè¦write() |
| | | boolean bool = hCNetSDK.NET_DVR_GetSTDConfig(userId, NET_DVR_GET_GISINFO, struStdCfg); |
| | | if (!bool) { |
| | | int code = hCNetSDK.NET_DVR_GetLastError(); |
| | | log.error("è·åGISä¿¡æ¯æ°æ®å¤±è´¥,请ç¨åéè¯" + code); |
| | | return result; |
| | | } else { |
| | | struGisInfo.read(); |
| | | result = struGisInfo.struPtzPosEx.dwFocus; |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 设置é¢ç½®ç¹ |
| | | * |
| | | * @param cmd ç¸æºå½ä»¤ |
| | | */ |
| | | @Override |
| | | public boolean setPreset(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | Integer PresetIndex = cmd.getPresetIndex(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return false; |
| | | } |
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | boolean bool = hCNetSDK.NET_DVR_PTZPreset_Other(userId, channelNum, SET_PRESET, PresetIndex); |
| | | if (!bool) { |
| | | int code = hCNetSDK.NET_DVR_GetLastError(); |
| | | log.error("é¢ç½®ç¹è®¾ç½®å¤±è´¥,请ç¨åéè¯" + code); |
| | | } |
| | | return bool; |
| | | } |
| | | |
| | | /** |
| | | * 转å°é¢ç½®ç¹ |
| | | * |
| | | * @param cmd ç¸æºå½ä»¤ |
| | | */ |
| | | @Override |
| | | public boolean gotoPreset(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | Integer PresetIndex = cmd.getPresetIndex(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return false; |
| | | } |
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | boolean bool = hCNetSDK.NET_DVR_PTZPreset_Other(userId, channelNum, GOTO_PRESET, PresetIndex); |
| | | if (!bool) { |
| | | int code = hCNetSDK.NET_DVR_GetLastError(); |
| | | log.error("é¢ç½®ç¹è®¾ç½®å¤±è´¥,请ç¨åéè¯" + code); |
| | | } |
| | | return bool; |
| | | } |
| | | |
| | | /** |
| | | * @æè¿° è·åééåç¼©åæ° |
| | | * @åæ° [cameraId, channelNum] |
| | | * @è¿åå¼ java.lang.String |
| | | * @å建人 åèä¹ |
| | | * @å建æ¶é´ 2023/2/3 8:36 |
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯ |
| | | */ |
| | | @Override |
| | | public Map<String, Object> getVideoCompressionCfg(CameraCmd cmd) { |
| | | |
| | | Map<String, Object> map = new HashMap<>(); |
| | | try { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer chanNo = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return null; |
| | | } |
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | |
| | | NET_DVR_COMPRESSIONCFG_V30 compressioncfg = new NET_DVR_COMPRESSIONCFG_V30(); |
| | | compressioncfg.write(); |
| | | Pointer pioint = compressioncfg.getPointer(); |
| | | IntByReference ibrBytesReturned = new IntByReference(0); |
| | | |
| | | boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, HCNetSDK.NET_DVR_GET_COMPRESSCFG_V30, chanNo, pioint, compressioncfg.size(), ibrBytesReturned); |
| | | if (bool) { |
| | | compressioncfg.read(); |
| | | //ç æµç±»åï¼0-è§é¢æµï¼1-å¤åæµï¼0xfe- èªå¨ï¼åæºä¸è´ï¼ |
| | | String streamType = ""; |
| | | switch (compressioncfg.struNormHighRecordPara.byStreamType) { |
| | | case 0: |
| | | streamType = "è§é¢æµ"; |
| | | break; |
| | | case 1: |
| | | streamType = "å¤åæµ"; |
| | | break; |
| | | default: |
| | | streamType = "æªç¥"; |
| | | break; |
| | | } |
| | | //è§é¢ç¼ç ç±»åï¼0-ç§æ264ï¼1-æ åh264ï¼2-æ åmpeg4ï¼7-M-JPEGï¼8-MPEG2ï¼9-SVACï¼10-æ åh265ï¼0xfe- èªå¨ï¼åæºä¸è´ï¼ï¼0xff-æ æ |
| | | String videoEncType = ""; |
| | | switch (compressioncfg.struNormHighRecordPara.byVideoEncType) { |
| | | case 0: |
| | | videoEncType = "ç§æ264"; |
| | | break; |
| | | case 1: |
| | | videoEncType = "æ åh264"; |
| | | break; |
| | | case 2: |
| | | videoEncType = "æ åmpeg4"; |
| | | break; |
| | | case 7: |
| | | videoEncType = "M-JPEG"; |
| | | break; |
| | | case 8: |
| | | videoEncType = "MPEG2"; |
| | | break; |
| | | case 9: |
| | | videoEncType = "SVAC"; |
| | | break; |
| | | case 10: |
| | | videoEncType = "æ åh265"; |
| | | break; |
| | | default: |
| | | videoEncType = "æªç¥"; |
| | | break; |
| | | } |
| | | //è§é¢ç ç |
| | | String videoBitrate = ""; |
| | | switch (compressioncfg.struNormHighRecordPara.dwVideoBitrate) { |
| | | case 0: |
| | | videoBitrate = "ä¿ç"; |
| | | break; |
| | | case 1: |
| | | videoBitrate = "16(ä¿ç)"; |
| | | break; |
| | | case 2: |
| | | videoBitrate = "32"; |
| | | break; |
| | | case 3: |
| | | videoBitrate = "48"; |
| | | break; |
| | | case 4: |
| | | videoBitrate = "64"; |
| | | break; |
| | | case 5: |
| | | videoBitrate = "80"; |
| | | break; |
| | | case 6: |
| | | videoBitrate = "96"; |
| | | break; |
| | | case 7: |
| | | videoBitrate = "128"; |
| | | break; |
| | | case 8: |
| | | videoBitrate = "160"; |
| | | break; |
| | | case 9: |
| | | videoBitrate = "192"; |
| | | break; |
| | | case 10: |
| | | videoBitrate = "224"; |
| | | break; |
| | | case 11: |
| | | videoBitrate = "256"; |
| | | break; |
| | | case 12: |
| | | videoBitrate = "320"; |
| | | break; |
| | | case 13: |
| | | videoBitrate = "384"; |
| | | break; |
| | | case 14: |
| | | videoBitrate = "448"; |
| | | break; |
| | | case 15: |
| | | videoBitrate = "512"; |
| | | break; |
| | | case 16: |
| | | videoBitrate = "640"; |
| | | break; |
| | | case 17: |
| | | videoBitrate = "768"; |
| | | break; |
| | | case 18: |
| | | videoBitrate = "896"; |
| | | break; |
| | | case 19: |
| | | videoBitrate = "1024"; |
| | | break; |
| | | case 20: |
| | | videoBitrate = "1280"; |
| | | break; |
| | | case 21: |
| | | videoBitrate = "1536"; |
| | | break; |
| | | case 22: |
| | | videoBitrate = "1792"; |
| | | break; |
| | | case 23: |
| | | videoBitrate = "2048K"; |
| | | break; |
| | | case 24: |
| | | videoBitrate = "3072"; |
| | | break; |
| | | case 25: |
| | | videoBitrate = "4096"; |
| | | break; |
| | | case 26: |
| | | videoBitrate = "8192"; |
| | | break; |
| | | case 27: |
| | | videoBitrate = "16384"; |
| | | break; |
| | | default: |
| | | videoBitrate = "å
¶ä»"; |
| | | break; |
| | | } |
| | | //è§é¢è¾åºå£å辨çï¼0- 1024x768ï¼1- 1280x720ï¼2-1280x1024ï¼3- 1680x1050ï¼4- 1920x1080ï¼5- 3840*2160 |
| | | String resolution = ""; |
| | | switch (compressioncfg.struNormHighRecordPara.byResolution) { |
| | | case 0: |
| | | resolution = "528*384/528*320"; |
| | | break; |
| | | case 1: |
| | | resolution = "352*288/352*240"; |
| | | break; |
| | | case 2: |
| | | resolution = "176*144/176*120"; |
| | | break; |
| | | case 3: |
| | | resolution = "704*576/704*480"; |
| | | break; |
| | | case 4: |
| | | resolution = "704*288/704*240"; |
| | | break; |
| | | case 6: |
| | | resolution = "320*240"; |
| | | break; |
| | | case 7: |
| | | resolution = "160*120"; |
| | | break; |
| | | case 16: |
| | | resolution = "640*480"; |
| | | break; |
| | | case 17: |
| | | resolution = "1600*1200"; |
| | | break; |
| | | case 18: |
| | | resolution = "800*600"; |
| | | break; |
| | | case 19: |
| | | resolution = "1280*720"; |
| | | break; |
| | | case 20: |
| | | resolution = "1280*960"; |
| | | break; |
| | | case 21: |
| | | resolution = "1600*900"; |
| | | break; |
| | | case 22: |
| | | resolution = "1360*1024"; |
| | | break; |
| | | case 23: |
| | | resolution = "1536*1536"; |
| | | break; |
| | | case 24: |
| | | resolution = "1920*1920"; |
| | | break; |
| | | case 27: |
| | | resolution = "1920*1080"; |
| | | break; |
| | | case 28: |
| | | resolution = "2560*1920"; |
| | | break; |
| | | case 29: |
| | | resolution = "1600*304"; |
| | | break; |
| | | case 30: |
| | | resolution = "2048*1536"; |
| | | break; |
| | | default: |
| | | resolution = "ä¸å¨å½åå辨çç´¢å¼ï¼è¯·è系管çåæ·»å "; |
| | | break; |
| | | } |
| | | //帧ç |
| | | String nFrameRate = ""; |
| | | switch (compressioncfg.struNormHighRecordPara.dwVideoFrameRate) { |
| | | case 0: |
| | | nFrameRate = "0"; |
| | | break; |
| | | case 1: |
| | | nFrameRate = "1/16"; |
| | | break; |
| | | case 2: |
| | | nFrameRate = "1/8"; |
| | | break; |
| | | case 3: |
| | | nFrameRate = "1/4"; |
| | | break; |
| | | case 4: |
| | | nFrameRate = "1/2"; |
| | | break; |
| | | case 5: |
| | | nFrameRate = "1"; |
| | | break; |
| | | case 6: |
| | | nFrameRate = "2"; |
| | | break; |
| | | case 7: |
| | | nFrameRate = "4"; |
| | | break; |
| | | case 8: |
| | | nFrameRate = "6"; |
| | | break; |
| | | case 9: |
| | | nFrameRate = "8"; |
| | | break; |
| | | case 10: |
| | | nFrameRate = "10"; |
| | | break; |
| | | case 11: |
| | | nFrameRate = "12"; |
| | | break; |
| | | case 12: |
| | | nFrameRate = "16"; |
| | | break; |
| | | case 13: |
| | | nFrameRate = "20"; |
| | | break; |
| | | case 14: |
| | | nFrameRate = "15"; |
| | | break; |
| | | case 15: |
| | | nFrameRate = "18"; |
| | | break; |
| | | case 16: |
| | | nFrameRate = "22"; |
| | | break; |
| | | case 17: |
| | | nFrameRate = "25"; |
| | | break; |
| | | case 18: |
| | | nFrameRate = "30"; |
| | | break; |
| | | case 19: |
| | | nFrameRate = "35"; |
| | | break; |
| | | case 20: |
| | | nFrameRate = "40"; |
| | | break; |
| | | default: |
| | | nFrameRate = "æªç¥"; |
| | | break; |
| | | } |
| | | map.put("resolution", resolution);//å辨ç |
| | | map.put("videoBitrate", videoBitrate);//æ¯ç¹ç |
| | | map.put("videoEncType", videoEncType);//ç¼ç |
| | | map.put("nFrameRate", nFrameRate);//帧ç |
| | | |
| | | } else { |
| | | int code = hCNetSDK.NET_DVR_GetLastError(); |
| | | log.error("æ§å¶å¤±è´¥,请ç¨åéè¯" + code); |
| | | } |
| | | } catch (Exception ex) { |
| | | log.error(ex.getMessage()); |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | /** |
| | | * @æè¿° è·åptzä¿¡æ¯ |
| | | * @åæ° [userId, channelNum] |
| | | * @è¿åå¼ boolean |
| | | * @å建人 åèä¹ |
| | | * @å建æ¶é´ 2023/1/17 16:36 |
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯ |
| | | */ |
| | | @Override |
| | | public Map<String, Object> getPtz(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return new HashMap<>(); |
| | | } |
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | |
| | | NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS(); |
| | | Pointer pioint = m_ptzPosCurrent.getPointer(); |
| | | IntByReference ibrBytesReturned = new IntByReference(0); |
| | | m_ptzPosCurrent.write(); |
| | | boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, HCNetSDK.NET_DVR_GET_PTZPOS, channelNum, pioint, m_ptzPosCurrent.size(), ibrBytesReturned); |
| | | if (bool) { |
| | | m_ptzPosCurrent.read(); |
| | | // DecimalFormat df = new DecimalFormat("0.0");//设置ä¿ç使° |
| | | //16è¿å¶è½¬Integeråé¤10ï¼ä¿çå°æ°ç¹1ä½ |
| | | //å®é
æ¾ç¤ºçPTZ弿¯è·åå°çåå
è¿å¶å¼çååä¹ä¸ï¼ |
| | | //å¦è·åçæ°´å¹³åæ°Pç弿¯0x1750ï¼å®é
æ¾ç¤ºçPå¼ä¸º175åº¦ï¼ |
| | | //è·åå°çåç´åæ°Tç弿¯0x0789ï¼å®é
æ¾ç¤ºçTå¼ä¸º78.9åº¦ï¼ |
| | | //è·åå°çåååæ°Zç弿¯0x1100ï¼å®é
æ¾ç¤ºçZå¼ä¸º110åã |
| | | BigDecimal b = new BigDecimal((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wPanPos)) / 10); |
| | | BigDecimal c = new BigDecimal((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wTiltPos)) / 10); |
| | | BigDecimal d = new BigDecimal((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wZoomPos)) / 10); |
| | | double p = b.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); |
| | | double t = c.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); |
| | | double z = d.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); |
| | | //log.debug("Tåç´åæ°ä¸º: " + p + "Pæ°´å¹³åæ°ä¸º: " + t + "Zåååæ°ä¸º: " + z); |
| | | Map<String, Object> ptzMap = new HashMap<>(); |
| | | ptzMap.put("p", p); |
| | | ptzMap.put("t", t); |
| | | ptzMap.put("z", z); |
| | | return ptzMap; |
| | | } else { |
| | | int code = hCNetSDK.NET_DVR_GetLastError(); |
| | | log.error("æ§å¶å¤±è´¥,请ç¨åéè¯" + code); |
| | | return new HashMap<>(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @æè¿° 设置ptzä¿¡æ¯ |
| | | * @åæ° [userId, channelNum] |
| | | * @è¿åå¼ boolean |
| | | * @å建人 åèä¹ |
| | | * @å建æ¶é´ 2023/1/17 16:36 |
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯ 注æä¿¯ä»°è§åº¦è´å¼éè¦å ä¸360å¾å°çæ£å¼è¿è¡è®¾ç½® |
| | | */ |
| | | @Override |
| | | public boolean setPtz(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | Map<String, Double> ptz = cmd.getPtzMap(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return false; |
| | | } |
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS(); |
| | | m_ptzPosCurrent.wAction = 1; |
| | | try { |
| | | String p = String.valueOf((int) (ptz.get("p") * 10)); |
| | | String t = String.valueOf((int) (ptz.get("t") * 10)); |
| | | String z = String.valueOf((int) (ptz.get("z") * 10)); |
| | | m_ptzPosCurrent.wPanPos = (short) (Integer.parseInt(p, 16)); |
| | | m_ptzPosCurrent.wTiltPos = (short) (Integer.parseInt(t, 16)); |
| | | m_ptzPosCurrent.wZoomPos = (short) (Integer.parseInt(z, 16)); |
| | | Pointer point = m_ptzPosCurrent.getPointer(); |
| | | m_ptzPosCurrent.write(); |
| | | boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_PTZPOS, channelNum, point, m_ptzPosCurrent.size()); |
| | | if (!bool) { |
| | | int code = hCNetSDK.NET_DVR_GetLastError(); |
| | | log.error("设置ptz失败,请ç¨åéè¯" + code); |
| | | } |
| | | return bool; |
| | | } catch (Exception ex) { |
| | | log.error(ex.getMessage()); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public boolean guideTargetPosition(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return false; |
| | | } |
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS(); |
| | | m_ptzPosCurrent.wAction = 1; |
| | | 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); |
| | | String p = String.valueOf((int) (cameraPTZ[0] * 10)); |
| | | String t = String.valueOf((int) (cameraPTZ[1] * 10)); |
| | | String z = String.valueOf((int) (cameraPTZ[2] * 10)); |
| | | m_ptzPosCurrent.wPanPos = (short) (Integer.parseInt(p, 16)); |
| | | m_ptzPosCurrent.wTiltPos = (short) (Integer.parseInt(t, 16)); |
| | | m_ptzPosCurrent.wZoomPos = (short) (Integer.parseInt(z, 16)); |
| | | Pointer point = m_ptzPosCurrent.getPointer(); |
| | | m_ptzPosCurrent.write(); |
| | | boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_PTZPOS, channelNum, point, m_ptzPosCurrent.size()); |
| | | if (!bool) { |
| | | int code = hCNetSDK.NET_DVR_GetLastError(); |
| | | log.error("设置ptz失败,请ç¨åéè¯" + code); |
| | | } |
| | | return bool; |
| | | } catch (Exception ex) { |
| | | log.error("å¼å¯¼å¼å¸¸:" + ex.getMessage()); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @æè¿° è·åptzéå®ä¿¡æ¯ |
| | | * @åæ° [userId, channelNum] |
| | | * @è¿åå¼ boolean |
| | | * @å建人 åèä¹ |
| | | * @å建æ¶é´ 2023/1/17 16:36 |
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯ 0-è§£é 1-éå® |
| | | */ |
| | | public int getPTZLockInfo(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return -1; |
| | | } |
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | NET_DVR_PTZ_LOCKCFG netDvrPtzLockcfg = new NET_DVR_PTZ_LOCKCFG(); |
| | | Pointer point = netDvrPtzLockcfg.getPointer(); |
| | | IntByReference ibrBytesReturned = new IntByReference(0); |
| | | netDvrPtzLockcfg.write(); |
| | | boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_PTZLOCKCFG, channelNum, point, netDvrPtzLockcfg.size(), ibrBytesReturned); |
| | | if (!bool) { |
| | | int code = hCNetSDK.NET_DVR_GetLastError(); |
| | | log.error("è·åptzéå®ä¿¡æ¯å¤±è´¥,请ç¨åéè¯" + code); |
| | | return -1; |
| | | } else { |
| | | netDvrPtzLockcfg.read(); |
| | | return netDvrPtzLockcfg.byWorkMode; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @æè¿° è®¾ç½®é¶æ¹ä½è§ |
| | | * @åæ° [userId, channelNum] |
| | | * @è¿åå¼ boolean |
| | | * @å建人 åèä¹ |
| | | * @å建æ¶é´ 2023/1/17 16:36 |
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯ 注æä¿¯ä»°è§åº¦è´å¼éè¦å ä¸360å¾å°çæ£å¼è¿è¡è®¾ç½® |
| | | */ |
| | | @Override |
| | | public boolean setZeroPtz(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return false; |
| | | } |
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | NET_DVR_INITIALPOSITIONCTRL initialpositionctrl = new NET_DVR_INITIALPOSITIONCTRL(); |
| | | |
| | | initialpositionctrl.dwSize = initialpositionctrl.size(); |
| | | initialpositionctrl.byWorkMode = 0; |
| | | initialpositionctrl.dwChan = Short.parseShort(channelNum.toString()); |
| | | |
| | | Pointer point = initialpositionctrl.getPointer(); |
| | | initialpositionctrl.write(); |
| | | boolean bool = hCNetSDK.NET_DVR_RemoteControl(userId, NET_DVR_PTZ_INITIALPOSITIONCTRL, point, initialpositionctrl.size()); |
| | | if (!bool) { |
| | | int i = hCNetSDK.NET_DVR_GetLastError(); |
| | | log.error("é误ç ï¼" + i); |
| | | } |
| | | return bool; |
| | | } |
| | | |
| | | /** |
| | | * @æè¿° è·åçæºPTZåæ°åå¼èå´ |
| | | * @åæ° [cameraId, channelNum] |
| | | * @è¿åå¼ java.util.Map<java.lang.String, java.lang.Object> |
| | | * @å建人 åèä¹ |
| | | * @å建æ¶é´ 2023/2/8 10:58 |
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯ |
| | | */ |
| | | @Override |
| | | public Map<String, Object> getPtzScope(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return new HashMap<>(); |
| | | } |
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | NET_DVR_PTZSCOPE m_ptzPosCurrent = new NET_DVR_PTZSCOPE(); |
| | | Pointer point = m_ptzPosCurrent.getPointer(); |
| | | IntByReference ibrBytesReturned = new IntByReference(0); |
| | | m_ptzPosCurrent.write(); |
| | | boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_PTZSCOPE, channelNum, point, m_ptzPosCurrent.size(), ibrBytesReturned); |
| | | if (!bool) { |
| | | int code = hCNetSDK.NET_DVR_GetLastError(); |
| | | log.error("设置ptz失败,请ç¨åéè¯" + code); |
| | | return new HashMap<>(); |
| | | } else { |
| | | m_ptzPosCurrent.read(); |
| | | DecimalFormat df = new DecimalFormat("0.0");//设置ä¿ç使° |
| | | |
| | | String wPanPosMax = df.format((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wPanPosMax)) / 10); |
| | | String wPanPosMin = df.format((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wTiltPosMax)) / 10); |
| | | String wTiltPosMax = df.format((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wTiltPosMax)) / 10); |
| | | String wTiltPosMin = df.format((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wTiltPosMin)) / 10); |
| | | String wZoomPosMax = df.format((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wZoomPosMax)) / 10); |
| | | String wZoomPosMin = df.format((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wZoomPosMin)) / 10); |
| | | Map<String, Object> ptzScopeMap = new HashMap<>(); |
| | | ptzScopeMap.put("pMax", wPanPosMax); |
| | | ptzScopeMap.put("pMin", wPanPosMin); |
| | | ptzScopeMap.put("tMax", wTiltPosMax); |
| | | ptzScopeMap.put("tMin", wTiltPosMin); |
| | | ptzScopeMap.put("zMax", wZoomPosMax); |
| | | ptzScopeMap.put("zMin", wZoomPosMin); |
| | | return ptzScopeMap; |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * @æè¿° éé¾å¼å
³ |
| | | * @åæ° [userId, channelNum, enable] |
| | | * @è¿åå¼ boolean |
| | | * @å建人 åèä¹ |
| | | * @å建æ¶é´ 2023/1/18 13:07 |
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯ |
| | | */ |
| | | @Override |
| | | public boolean controlDefogcfg(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | boolean enable = cmd.isEnable(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return false; |
| | | } |
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | NET_DVR_CAMERAPARAMCFG_EX struCameraParam = new NET_DVR_CAMERAPARAMCFG_EX(); |
| | | Pointer point = struCameraParam.getPointer(); |
| | | IntByReference ibrBytesReturned = new IntByReference(0); |
| | | boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_CCDPARAMCFG_EX, channelNum, point, struCameraParam.size(), ibrBytesReturned); |
| | | if (!b_GetCameraParam) { |
| | | log.error("è·ååç«¯åæ°å¤±è´¥ï¼é误ç ï¼" + hCNetSDK.NET_DVR_GetLastError()); |
| | | } |
| | | struCameraParam.read(); |
| | | log.debug("æ¯å¦å¼å¯éé¾ï¼" + struCameraParam.struDefogCfg.byMode); |
| | | |
| | | NET_DVR_DEFOGCFG defogcfg = new NET_DVR_DEFOGCFG(); |
| | | if (enable) { |
| | | defogcfg.byMode = 2;//0-ä¸å¯ç¨ 1-èªå¨æ¨¡å¼ 2-叏弿¨¡å¼ |
| | | defogcfg.byLevel = 100;//åå¼èå´0-100 |
| | | } else { |
| | | defogcfg.byMode = 0;//0-ä¸å¯ç¨ 1-èªå¨æ¨¡å¼ 2-叏弿¨¡å¼ |
| | | } |
| | | struCameraParam.struDefogCfg = defogcfg; |
| | | struCameraParam.write(); |
| | | boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_CCDPARAMCFG_EX, channelNum, point, struCameraParam.size()); |
| | | if (!bool) { |
| | | int code = hCNetSDK.NET_DVR_GetLastError(); |
| | | log.error("设置éé¾å¤±è´¥,请ç¨åéè¯" + code); |
| | | } |
| | | log.debug("设置é龿å"); |
| | | return bool; |
| | | } |
| | | |
| | | /** |
| | | * @æè¿° 红å¤å¼å
³ |
| | | * @åæ° [userId, channelNum, enable] |
| | | * @è¿åå¼ boolean |
| | | * @å建人 åèä¹ |
| | | * @å建æ¶é´ 2023/1/18 13:07 |
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯ |
| | | */ |
| | | @Override |
| | | public boolean controlInfrarecfg(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | boolean enable = cmd.isEnable(); |
| | | Integer chanNo = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return false; |
| | | } |
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | NET_DVR_CAMERAPARAMCFG_EX struDayNigh = new NET_DVR_CAMERAPARAMCFG_EX(); |
| | | Pointer point = struDayNigh.getPointer(); |
| | | IntByReference ibrBytesReturned = new IntByReference(0); |
| | | boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_CCDPARAMCFG_EX, chanNo, point, struDayNigh.size(), ibrBytesReturned); |
| | | if (!b_GetCameraParam) { |
| | | log.error("è·ååç«¯åæ°å¤±è´¥ï¼é误ç ï¼" + hCNetSDK.NET_DVR_GetLastError()); |
| | | } |
| | | struDayNigh.read(); |
| | | String current = struDayNigh.struDayNight.byDayNightFilterType == 1 ? "å¼å¯" : "å
³é"; |
| | | log.debug("å½åç¶æ:" + current); |
| | | |
| | | NET_DVR_DAYNIGHT daynight = new NET_DVR_DAYNIGHT(); |
| | | if (enable) { |
| | | daynight.byDayNightFilterType = 1;//夿 |
| | | } else { |
| | | daynight.byDayNightFilterType = 0;//ç½å¤© |
| | | } |
| | | daynight.bySwitchScheduleEnabled = 1; |
| | | daynight.byDayNightFilterTime = 60; |
| | | struDayNigh.struDayNight = daynight; |
| | | struDayNigh.write(); |
| | | boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_CCDPARAMCFG_EX, chanNo, point, struDayNigh.size()); |
| | | if (!bool) { |
| | | int code = hCNetSDK.NET_DVR_GetLastError(); |
| | | log.error("设置å¤è§å¤±è´¥,请ç¨åéè¯" + code); |
| | | } |
| | | else { |
| | | log.debug("设置å¤è§æå"); |
| | | } |
| | | |
| | | return bool; |
| | | } |
| | | |
| | | /** |
| | | * @æè¿° èç¦å¼å
³ |
| | | * @åæ° [userId, channelNum, enable] |
| | | * @è¿åå¼ boolean |
| | | * @å建人 åèä¹ |
| | | * @å建æ¶é´ 2023/1/18 13:07 |
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯ |
| | | */ |
| | | @Override |
| | | public boolean controlFocusMode(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | boolean enable = cmd.isEnable(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return false; |
| | | } |
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | NET_DVR_FOCUSMODE_CFG struFocusMode = new NET_DVR_FOCUSMODE_CFG(); |
| | | Pointer point = struFocusMode.getPointer(); |
| | | IntByReference ibrBytesReturned = new IntByReference(0); |
| | | boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_FOCUSMODECFG, channelNum, point, struFocusMode.size(), ibrBytesReturned); |
| | | if (!b_GetCameraParam) { |
| | | log.error("è·ååç«¯åæ°å¤±è´¥ï¼é误ç ï¼" + hCNetSDK.NET_DVR_GetLastError()); |
| | | } |
| | | struFocusMode.read(); |
| | | log.debug("å½åèç¦æ¨¡å¼ï¼" + struFocusMode.byFocusMode); |
| | | |
| | | if (enable) { |
| | | struFocusMode.byFocusMode = 1;//æå¨èç¦ |
| | | } else { |
| | | struFocusMode.byAutoFocusMode = 1; |
| | | struFocusMode.byFocusMode = 2;//èªå¨èç¦ |
| | | } |
| | | struFocusMode.byFocusDefinitionDisplay = 1; |
| | | struFocusMode.byFocusSpeedLevel = 3; |
| | | struFocusMode.write(); |
| | | boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_FOCUSMODECFG, channelNum, point, struFocusMode.size()); |
| | | if (!bool) { |
| | | int code = hCNetSDK.NET_DVR_GetLastError(); |
| | | log.error("设置èç¦æ¨¡å¼å¤±è´¥,请ç¨åéè¯" + code); |
| | | } |
| | | log.debug("设置èç¦æ¨¡å¼æå"); |
| | | return bool; |
| | | } |
| | | |
| | | /** |
| | | * @æè¿° è·åèç¦æ¨¡å¼ |
| | | * @åæ° [userId, channelNum] |
| | | * @è¿åå¼ boolean |
| | | * @å建人 åèä¹ |
| | | * @å建æ¶é´ 2023/1/18 13:07 |
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯ |
| | | */ |
| | | public String getFocusMode(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return ""; |
| | | } |
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | NET_DVR_FOCUSMODE_CFG struFocusMode = new NET_DVR_FOCUSMODE_CFG(); |
| | | Pointer point = struFocusMode.getPointer(); |
| | | IntByReference ibrBytesReturned = new IntByReference(0); |
| | | boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_FOCUSMODECFG, channelNum, point, struFocusMode.size(), ibrBytesReturned); |
| | | if (!b_GetCameraParam) { |
| | | log.error("è·ååç«¯åæ°å¤±è´¥ï¼é误ç ï¼" + hCNetSDK.NET_DVR_GetLastError()); |
| | | } |
| | | struFocusMode.read(); |
| | | log.debug("å½åèç¦æ¨¡å¼ï¼" + struFocusMode.byFocusMode); |
| | | return String.valueOf(struFocusMode.byFocusMode); |
| | | } |
| | | |
| | | /** |
| | | * @æè¿° äºå°å çå¼å
³ |
| | | * @åæ° [userId, channelNum, enable] |
| | | * @è¿åå¼ boolean |
| | | * @å建人 åèä¹ |
| | | * @å建æ¶é´ 2023/1/18 13:07 |
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯ |
| | | */ |
| | | @Override |
| | | public boolean controlPTHeateRpwron(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | boolean enable = cmd.isEnable(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return false; |
| | | } |
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | int dwStop; |
| | | if (enable) { |
| | | dwStop = 0;//å¼å¯ |
| | | } else { |
| | | dwStop = 1;//å
³é |
| | | } |
| | | boolean bool = hCNetSDK.NET_DVR_PTZControl_Other(userId, channelNum, HEATER_PWRON, dwStop); |
| | | if (!bool) { |
| | | int code = hCNetSDK.NET_DVR_GetLastError(); |
| | | log.error("设置äºå°å ç失败,请ç¨åéè¯" + code); |
| | | } |
| | | log.debug("设置äºå°å çæå"); |
| | | return bool; |
| | | } |
| | | |
| | | /** |
| | | * @æè¿° é头å çå¼å
³ |
| | | * @åæ° [userId, channelNum, enable] |
| | | * @è¿åå¼ boolean |
| | | * @å建人 åèä¹ |
| | | * @å建æ¶é´ 2023/1/18 13:07 |
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯ |
| | | */ |
| | | @Override |
| | | public boolean controlCameraDeicing(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | boolean enable = cmd.isEnable(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return false; |
| | | } |
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | NET_DVR_DEVSERVER_CFG struDeicing = new NET_DVR_DEVSERVER_CFG(); |
| | | Pointer point = struDeicing.getPointer(); |
| | | IntByReference ibrBytesReturned = new IntByReference(0); |
| | | boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_DEVSERVER_CFG, channelNum, point, struDeicing.size(), ibrBytesReturned); |
| | | if (!b_GetCameraParam) { |
| | | log.error("è·ååç«¯åæ°å¤±è´¥ï¼é误ç ï¼" + hCNetSDK.NET_DVR_GetLastError()); |
| | | } |
| | | struDeicing.read(); |
| | | log.debug("æ¯å¦å¼å¯é¤å°ï¼" + struDeicing.byEnableDeicing); |
| | | |
| | | if (enable) { |
| | | struDeicing.byEnableDeicing = 1;//å¼å¯ |
| | | } else { |
| | | struDeicing.byEnableDeicing = 0;//å
³é |
| | | } |
| | | struDeicing.write(); |
| | | boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_DEVSERVER_CFG, channelNum, point, struDeicing.size()); |
| | | if (!bool) { |
| | | int code = hCNetSDK.NET_DVR_GetLastError(); |
| | | log.error("设置é头é¤å°å¤±è´¥,请ç¨åéè¯" + code); |
| | | } |
| | | log.debug("设置é头é¤å°æå"); |
| | | return bool; |
| | | } |
| | | |
| | | /** |
| | | * æªå¾ è¿ç»å端 |
| | | * |
| | | * @param cmd ç¸æºå½ä»¤ |
| | | */ |
| | | public String captureJPEGPicture(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return ""; |
| | | } |
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | NET_DVR_WORKSTATE_V30 devwork = new NET_DVR_WORKSTATE_V30(); |
| | | if (!hCNetSDK.NET_DVR_GetDVRWorkState_V30(userId, devwork)) { |
| | | // è¿åBooleanå¼ï¼å¤ææ¯å¦è·å设å¤è½å |
| | | log.error("æå¾å¤±è´¥ï¼è¯·ç¨åéè¯"); |
| | | } |
| | | //å¾çè´¨é |
| | | NET_DVR_JPEGPARA jpeg = new NET_DVR_JPEGPARA(); |
| | | //设置å¾çå辨ç |
| | | jpeg.wPicSize = 0; |
| | | //设置å¾çè´¨é |
| | | jpeg.wPicQuality = 0; |
| | | IntByReference a = new IntByReference(); |
| | | //设置å¾çå¤§å° |
| | | ByteBuffer jpegBuffer = ByteBuffer.allocate(1024 * 1024); |
| | | // æå¾å°å
åï¼åå¸§æ°æ®æè·å¹¶ä¿åæJPEG忾卿å®çå
å空é´ä¸ |
| | | boolean is = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(userId, channelNum, jpeg, jpegBuffer, 1024 * 1024, a); |
| | | log.debug("-----------è¿éå¼å§å¾çåå
¥å
å----------" + is); |
| | | |
| | | Base64.Encoder decoder = Base64.getEncoder(); |
| | | // BASE64Encoder encoder = new BASE64Encoder(); |
| | | String png_base64 = decoder.encodeToString(jpegBuffer.array());//è½¬æ¢æbase64串 |
| | | png_base64 = png_base64.replaceAll("\n", "").replaceAll("\r", "");//å é¤ \r\n |
| | | log.debug("-----------å¤ç宿æªå¾æ°æ®----------"); |
| | | return png_base64; |
| | | } |
| | | |
| | | /** |
| | | * @æè¿° æªå¾ åæå¡å¨ |
| | | * @åæ° [cameraId, channelNum] |
| | | * @è¿åå¼ java.lang.String |
| | | * @å建人 åèä¹ |
| | | * @å建æ¶é´ 2023/2/2 14:59 |
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯ |
| | | */ |
| | | @Override |
| | | public String picCutCate(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return ""; |
| | | } |
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | //å¾çä¿¡æ¯ |
| | | NET_DVR_JPEGPARA jpeg = new NET_DVR_JPEGPARA(); |
| | | //设置å¾çå辨ç |
| | | //å¾ç尺寸ï¼0-CIF(352*288/352*240)ï¼1-QCIF(176*144/176*120)ï¼2-4CIF(704*576/704*480)æD1(720*576/720*486)ï¼3-UXGA(1600*1200)ï¼ |
| | | // 4-SVGA(800*600)ï¼5-HD720P(1280*720)ï¼6-VGA(640*480)ï¼7-XVGA(1280*960)ï¼8-HD900P(1600*900)ï¼9-HD1080P(1920*1080)ï¼10-2560*1920ï¼ |
| | | // 11-1600*304ï¼12-2048*1536ï¼13-2448*2048ï¼14-2448*1200ï¼15-2448*800ï¼16-XGA(1024*768)ï¼17-SXGA(1280*1024)ï¼18-WD1(960*576/960*480), |
| | | // 19-1080I(1920*1080)ï¼20-576*576ï¼21-1536*1536ï¼22-1920*1920ï¼23-320*240ï¼24-720*720ï¼25-1024*768ï¼26-1280*1280ï¼27-1600*600ï¼ |
| | | // 28-2048*768ï¼29-160*120ï¼75-336*256ï¼78-384*256ï¼79-384*216ï¼80-320*256ï¼82-320*192ï¼83-512*384ï¼127-480*272ï¼128-512*272ï¼ 161-288*320ï¼ |
| | | // 162-144*176ï¼163-480*640ï¼164-240*320ï¼165-120*160ï¼166-576*720ï¼167-720*1280ï¼168-576*960ï¼180-180*240, 181-360*480, 182-540*720, |
| | | // 183-720*960, 184-960*1280, 185-1080*1440, 500-384*288, 0xff-Auto(使ç¨å½åç æµå辨ç) |
| | | jpeg.wPicSize = 0; |
| | | //设置å¾çè´¨éï¼0-æå¥½ï¼1-è¾å¥½ï¼2-ä¸è¬ |
| | | jpeg.wPicQuality = 0; |
| | | IntByReference a = new IntByReference(); |
| | | //设置å¾çå¤§å° |
| | | ByteBuffer jpegBuffer = ByteBuffer.allocate(1024 * 1024); |
| | | // æå¾å°å
åï¼åå¸§æ°æ®æè·å¹¶ä¿åæJPEG忾卿å®çå
å空é´ä¸ |
| | | log.debug("-----------è¿éå¼å§å°è£
NET_DVR_CaptureJPEGPicture_NEW---------"); |
| | | boolean is = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(userId, channelNum, jpeg, jpegBuffer, 1024 * 1024, a); |
| | | log.debug("-----------è¿éå¼å§å¾çåå
¥å
å----------" + is); |
| | | if (is) { |
| | | log.debug("hksdk(æå¾)-ç»æç¶æå¼(0表示æå):" + hCNetSDK.NET_DVR_GetLastError()); |
| | | byte[] array = jpegBuffer.array(); |
| | | //åå¨å°minio |
| | | String BucketName = "pic"; |
| | | String ObjectName = "capture/" + IdUtils.simpleUUID() + ".jpeg"; |
| | | InputStream input = new ByteArrayInputStream(array); |
| | | String url = ""; |
| | | try { |
| | | boolean b = MinioUtil.uploadObject(BucketName, ObjectName, input, input.available(), MimeTypeUtils.IMAGE_JPEG); |
| | | if (b) { |
| | | url = MinioUtil.getBucketObjectUrl(BucketName, ObjectName); |
| | | log.debug("ä¸ä¼ æä»¶æå!" + url); |
| | | } |
| | | } catch (IOException ex) { |
| | | log.error("ä¸ä¼ æä»¶å¼å¸¸ï¼" + ex.getMessage()); |
| | | } |
| | | return url; |
| | | } else { |
| | | int code = hCNetSDK.NET_DVR_GetLastError(); |
| | | log.error("æå¾å¤±è´¥,请ç¨åéè¯" + code); |
| | | return ""; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @æè¿° çæ¶å½å |
| | | * @åæ° [userId, channelNum, enable] |
| | | * @è¿åå¼ void |
| | | * @å建人 åèä¹ |
| | | * @å建æ¶é´ 2023/1/20 11:18 |
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯ |
| | | */ |
| | | @Override |
| | | public String record(CameraCmd cmd) { |
| | | try { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); |
| | | boolean enable = cmd.isEnable(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return ""; |
| | | } |
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | //强å¶Iå¸§ç»æä½å¯¹è±¡ |
| | | HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //æ°å»ºç»æä½å¯¹è±¡ |
| | | netDvrIFrame.read(); |
| | | netDvrIFrame.dwChannel = channelNum;//å ä¸ºä¸æä»£ç ä¸è®¾ç½®äºééå·ï¼æç
§ä¸æä¸ç设置 |
| | | netDvrIFrame.byStreamType = 0; |
| | | netDvrIFrame.dwSize = netDvrIFrame.size(); |
| | | netDvrIFrame.write(); |
| | | if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) { |
| | | log.error("强å¶I帧 é误ç 为: " + hCNetSDK.NET_DVR_GetLastError()); |
| | | } |
| | | //é¢è§åæ° |
| | | NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO(); |
| | | previewinfo.read(); |
| | | previewinfo.lChannel = channelNum; |
| | | previewinfo.dwStreamType = 0;//ç æµç±»åï¼0-ä¸»ç æµï¼1-åç æµï¼2-ä¸ç æµï¼3-èæç æµï¼ä»¥æ¤ç±»æ¨ |
| | | previewinfo.dwLinkMode = 0;//è¿æ¥æ¹å¼ï¼0-TCPæ¹å¼ï¼1-UDPæ¹å¼ï¼2-夿æ¹å¼ï¼3-RTPæ¹å¼ï¼4-RTP/RTSPï¼5-RTP/HTTPï¼6-HRUDPï¼å¯é ä¼ è¾ï¼ï¼7-RTSP/HTTPSï¼8-NPQ |
| | | previewinfo.hPlayWnd = null;//ææ¾çªå£ç奿ï¼ä¸ºNULL表示ä¸è§£ç æ¾ç¤ºã |
| | | previewinfo.bBlocked = 0;//0- éé»å¡åæµï¼1-é»å¡åæµ |
| | | previewinfo.byNPQMode = 0;//NPQ模å¼ï¼0-ç´è¿æ¨¡å¼ï¼1-è¿æµåªä½æ¨¡å¼ |
| | | previewinfo.write(); |
| | | String url = ""; |
| | | if (enable) { |
| | | if (!GlobalVariable.previewMap.containsKey(cameraId)) { |
| | | int lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null); |
| | | if (lRealHandle == -1) { |
| | | log.error("åæµå¤±è´¥" + hCNetSDK.NET_DVR_GetLastError()); |
| | | return ""; |
| | | } |
| | | log.debug("åæµæå"); |
| | | GlobalVariable.previewMap.put(cameraId, lRealHandle); |
| | | } |
| | | if (!hCNetSDK.NET_DVR_SaveRealData_V30(GlobalVariable.previewMap.get(cameraId), 2, path)) { |
| | | log.error("ä¿åè§é¢æä»¶å°ä¸´æ¶æä»¶å¤¹å¤±è´¥ é误ç 为: " + hCNetSDK.NET_DVR_GetLastError()); |
| | | return ""; |
| | | } |
| | | log.debug("å½åå¼å§"); |
| | | } else { |
| | | if (GlobalVariable.previewMap.containsKey(cameraId)) { |
| | | Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); |
| | | hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); |
| | | GlobalVariable.previewMap.remove(cameraId); |
| | | } |
| | | log.debug("å½å忢"); |
| | | //åå
¥minio |
| | | String BucketName = "record"; |
| | | String ObjectName = IdUtils.simpleUUID() + ".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 recordStart(CameraCmd cmd) { |
| | | try { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return false; |
| | | } |
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | //强å¶Iå¸§ç»æä½å¯¹è±¡ |
| | | HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //æ°å»ºç»æä½å¯¹è±¡ |
| | | netDvrIFrame.read(); |
| | | netDvrIFrame.dwChannel = channelNum;//å ä¸ºä¸æä»£ç ä¸è®¾ç½®äºééå·ï¼æç
§ä¸æä¸ç设置 |
| | | netDvrIFrame.byStreamType = 0; |
| | | netDvrIFrame.dwSize = netDvrIFrame.size(); |
| | | netDvrIFrame.write(); |
| | | if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) { |
| | | log.error("强å¶I帧 é误ç 为: " + hCNetSDK.NET_DVR_GetLastError()); |
| | | } |
| | | //é¢è§åæ° |
| | | NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO(); |
| | | previewinfo.read(); |
| | | previewinfo.lChannel = channelNum; |
| | | previewinfo.dwStreamType = 0;//ç æµç±»åï¼0-ä¸»ç æµï¼1-åç æµï¼2-ä¸ç æµï¼3-èæç æµï¼ä»¥æ¤ç±»æ¨ |
| | | previewinfo.dwLinkMode = 0;//è¿æ¥æ¹å¼ï¼0-TCPæ¹å¼ï¼1-UDPæ¹å¼ï¼2-夿æ¹å¼ï¼3-RTPæ¹å¼ï¼4-RTP/RTSPï¼5-RTP/HTTPï¼6-HRUDPï¼å¯é ä¼ è¾ï¼ï¼7-RTSP/HTTPSï¼8-NPQ |
| | | previewinfo.hPlayWnd = null;//ææ¾çªå£ç奿ï¼ä¸ºNULL表示ä¸è§£ç æ¾ç¤ºã |
| | | previewinfo.bBlocked = 0;//0- éé»å¡åæµï¼1-é»å¡åæµ |
| | | previewinfo.byNPQMode = 0;//NPQ模å¼ï¼0-ç´è¿æ¨¡å¼ï¼1-è¿æµåªä½æ¨¡å¼ |
| | | previewinfo.write(); |
| | | if (GlobalVariable.previewMap.containsKey(cameraId)) { |
| | | Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); |
| | | hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); |
| | | GlobalVariable.previewMap.remove(cameraId); |
| | | log.debug("忢å½åå½å"); |
| | | } |
| | | int lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null); |
| | | if (lRealHandle == -1) { |
| | | log.error("åæµå¤±è´¥" + hCNetSDK.NET_DVR_GetLastError()); |
| | | return false; |
| | | } |
| | | log.debug("åæµæå"); |
| | | GlobalVariable.threadMap.put(cameraId, Thread.currentThread().getName()); |
| | | GlobalVariable.previewMap.put(cameraId, lRealHandle); |
| | | if (!hCNetSDK.NET_DVR_SaveRealData_V30(GlobalVariable.previewMap.get(cameraId), 2, path)) { |
| | | log.error("ä¿åè§é¢æä»¶å°ä¸´æ¶æä»¶å¤¹å¤±è´¥ é误ç 为: " + hCNetSDK.NET_DVR_GetLastError()); |
| | | 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(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return ""; |
| | | } |
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | //region 强å¶I帧 |
| | | HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //æ°å»ºç»æä½å¯¹è±¡ |
| | | netDvrIFrame.read(); |
| | | netDvrIFrame.dwChannel = channelNum;//å ä¸ºä¸æä»£ç ä¸è®¾ç½®äºééå·ï¼æç
§ä¸æä¸ç设置 |
| | | netDvrIFrame.byStreamType = 0; |
| | | netDvrIFrame.dwSize = netDvrIFrame.size(); |
| | | netDvrIFrame.write(); |
| | | if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) { |
| | | log.error("强å¶I帧 é误ç 为: " + hCNetSDK.NET_DVR_GetLastError()); |
| | | } |
| | | //endregion |
| | | //region é¢è§åæ° |
| | | NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO(); |
| | | previewinfo.read(); |
| | | previewinfo.lChannel = channelNum; |
| | | previewinfo.dwStreamType = 0;//ç æµç±»åï¼0-ä¸»ç æµï¼1-åç æµï¼2-ä¸ç æµï¼3-èæç æµï¼ä»¥æ¤ç±»æ¨ |
| | | previewinfo.dwLinkMode = 0;//è¿æ¥æ¹å¼ï¼0-TCPæ¹å¼ï¼1-UDPæ¹å¼ï¼2-夿æ¹å¼ï¼3-RTPæ¹å¼ï¼4-RTP/RTSPï¼5-RTP/HTTPï¼6-HRUDPï¼å¯é ä¼ è¾ï¼ï¼7-RTSP/HTTPSï¼8-NPQ |
| | | previewinfo.hPlayWnd = null;//ææ¾çªå£ç奿ï¼ä¸ºNULL表示ä¸è§£ç æ¾ç¤ºã |
| | | previewinfo.bBlocked = 0;//0- éé»å¡åæµï¼1-é»å¡åæµ |
| | | previewinfo.byNPQMode = 0;//NPQ模å¼ï¼0-ç´è¿æ¨¡å¼ï¼1-è¿æµåªä½æ¨¡å¼ |
| | | previewinfo.write(); |
| | | //endregion |
| | | if (GlobalVariable.previewMap.containsKey(cameraId)) { |
| | | Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); |
| | | hCNetSDK.NET_DVR_StopRealPlay(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 recordStopNotToMinio(CameraCmd cmd) { |
| | | boolean result = false; |
| | | try { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return false; |
| | | } |
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | //强å¶Iå¸§ç»æä½å¯¹è±¡ |
| | | HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //æ°å»ºç»æä½å¯¹è±¡ |
| | | netDvrIFrame.read(); |
| | | netDvrIFrame.dwChannel = channelNum;//å ä¸ºä¸æä»£ç ä¸è®¾ç½®äºééå·ï¼æç
§ä¸æä¸ç设置 |
| | | netDvrIFrame.byStreamType = 0; |
| | | netDvrIFrame.dwSize = netDvrIFrame.size(); |
| | | netDvrIFrame.write(); |
| | | if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) { |
| | | log.error("强å¶I帧 é误ç 为: " + hCNetSDK.NET_DVR_GetLastError()); |
| | | } |
| | | //é¢è§åæ° |
| | | NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO(); |
| | | previewinfo.read(); |
| | | previewinfo.lChannel = channelNum; |
| | | previewinfo.dwStreamType = 0;//ç æµç±»åï¼0-ä¸»ç æµï¼1-åç æµï¼2-ä¸ç æµï¼3-èæç æµï¼ä»¥æ¤ç±»æ¨ |
| | | previewinfo.dwLinkMode = 0;//è¿æ¥æ¹å¼ï¼0-TCPæ¹å¼ï¼1-UDPæ¹å¼ï¼2-夿æ¹å¼ï¼3-RTPæ¹å¼ï¼4-RTP/RTSPï¼5-RTP/HTTPï¼6-HRUDPï¼å¯é ä¼ è¾ï¼ï¼7-RTSP/HTTPSï¼8-NPQ |
| | | previewinfo.hPlayWnd = null;//ææ¾çªå£ç奿ï¼ä¸ºNULL表示ä¸è§£ç æ¾ç¤ºã |
| | | previewinfo.bBlocked = 0;//0- éé»å¡åæµï¼1-é»å¡åæµ |
| | | previewinfo.byNPQMode = 0;//NPQ模å¼ï¼0-ç´è¿æ¨¡å¼ï¼1-è¿æµåªä½æ¨¡å¼ |
| | | previewinfo.write(); |
| | | if (GlobalVariable.previewMap.containsKey(cameraId)) { |
| | | Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); |
| | | hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); |
| | | GlobalVariable.previewMap.remove(cameraId); |
| | | } |
| | | log.debug("å½å忢"); |
| | | result = true; |
| | | } catch (Exception ex) { |
| | | log.error("å½å忢å¼å¸¸" + ex.getMessage()); |
| | | result = false; |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | //è·åIPéé |
| | | @Override |
| | | public List<ArdChannel> getCameraChannelList(ArdCameras camera) { |
| | | /*è·åéé*/ |
| | | List<ArdChannel> channelList = new ArrayList<>(); |
| | | try { |
| | | Integer chanNum = camera.getChanNum(); |
| | | Integer startDChan = camera.getStartDChan(); |
| | | if (chanNum > 0) { |
| | | // è·åééå· |
| | | for (int iChannum = 0; iChannum < chanNum; iChannum++) { |
| | | ArdChannel ardChannel = new ArdChannel(); |
| | | int channum = iChannum + startDChan + 1; |
| | | HCNetSDK.NET_DVR_PICCFG_V40 strPicCfg = new HCNetSDK.NET_DVR_PICCFG_V40(); |
| | | strPicCfg.dwSize = strPicCfg.size(); |
| | | strPicCfg.write(); |
| | | Pointer pStrPicCfg = strPicCfg.getPointer(); |
| | | NativeLong lChannel = new NativeLong(channum); |
| | | IntByReference pInt = new IntByReference(0); |
| | | boolean b_GetPicCfg = hCNetSDK.NET_DVR_GetDVRConfig(camera.getLoginId(), HCNetSDK.NET_DVR_GET_PICCFG_V40, lChannel.intValue(), |
| | | pStrPicCfg, strPicCfg.size(), pInt); |
| | | if (b_GetPicCfg) { |
| | | strPicCfg.read(); |
| | | String channelName = new String(strPicCfg.sChanName, "GBK").trim(); |
| | | ardChannel.setName(channelName); |
| | | } |
| | | ardChannel.setDeviceId(camera.getId()); |
| | | ardChannel.setChanNo(iChannum + 1); |
| | | channelList.add(ardChannel); |
| | | } |
| | | } |
| | | } catch (Exception ex) { |
| | | log.error("è·åç¸æºééå¼å¸¸:" + ex.getMessage()); |
| | | } |
| | | return channelList; |
| | | } |
| | | |
| | | /** |
| | | * @æè¿° è·åGISä¿¡æ¯æ°æ® |
| | | * @åæ° [userId, channelNum] |
| | | * @è¿åå¼ boolean |
| | | * @å建人 åèä¹ |
| | | * @å建æ¶é´ 2023/1/17 16:36 |
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯ 0-è§£é 1-éå® |
| | | */ |
| | | @Override |
| | | public Map<String, Object> getGisInfo(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return new HashMap<>(); |
| | | } |
| | | // è·ååæ° |
| | | Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | HCNetSDK.NET_DVR_STD_CONFIG struStdCfg = new HCNetSDK.NET_DVR_STD_CONFIG(); |
| | | HCNetSDK.NET_DVR_GIS_INFO struGisInfo = new HCNetSDK.NET_DVR_GIS_INFO(); |
| | | struStdCfg.read(); |
| | | IntByReference lchannel = new IntByReference(channelNum); |
| | | struStdCfg.lpCondBuffer = lchannel.getPointer(); |
| | | struStdCfg.dwCondSize = 4; |
| | | struStdCfg.lpOutBuffer = struGisInfo.getPointer(); |
| | | struStdCfg.dwOutSize = struGisInfo.size(); |
| | | struStdCfg.write();//设置åä¹åè¦write() |
| | | boolean bool = hCNetSDK.NET_DVR_GetSTDConfig(userId, NET_DVR_GET_GISINFO, struStdCfg); |
| | | if (!bool) { |
| | | int code = hCNetSDK.NET_DVR_GetLastError(); |
| | | log.error("è·åGISä¿¡æ¯æ°æ®å¤±è´¥,请ç¨åéè¯" + code); |
| | | return new HashMap<>(); |
| | | } else { |
| | | struGisInfo.read(); |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("p", struGisInfo.struPtzPos.fPanPos); |
| | | map.put("t", struGisInfo.struPtzPos.fTiltPos < 0 ? struGisInfo.struPtzPos.fTiltPos + 360 : struGisInfo.struPtzPos.fTiltPos); |
| | | map.put("z", struGisInfo.struPtzPos.fZoomPos); |
| | | map.put("fHorFieldAngle", struGisInfo.fHorizontalValue);// æ°´å¹³è§åºè§ |
| | | map.put("fVerFieldAngle", struGisInfo.fVerticalValue);// åç´è§åºè§ |
| | | return map; |
| | | } |
| | | } |
| | | } |