From b80cff6055cd8c261393698deb897e86a6f4dc1d Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: Tue, 17 Oct 2023 13:18:55 +0800
Subject: [PATCH] 1. 增加聚焦模式切换接口 2. 增加短时录像接口 3. 增加目标引导接口 4. 增加预置点设置调取接口
---
ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java | 48 +---
ard-work/src/main/java/com/ruoyi/device/dhsdk/module/ConfigModule.java | 36 +++
ard-work/src/main/java/com/ruoyi/device/dhsdk/module/LoginModule.java | 6
ard-work/src/main/java/com/ruoyi/device/dhsdk/service/IDhClientService.java | 7
ard-work/src/main/java/com/ruoyi/device/dhsdk/module/RealPlayModule.java | 75 ++++++
ard-work/src/main/java/com/ruoyi/device/dhsdk/module/CapturePictureModule.java | 4
ard-work/src/main/java/com/ruoyi/device/dhsdk/module/PtzControlModule.java | 309 ++++++++++++++-------------
ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java | 3
ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java | 164 +++++++++++++-
ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java | 2
10 files changed, 437 insertions(+), 217 deletions(-)
diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java b/ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java
index 7bb9070..81adfa8 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java
@@ -210,7 +210,7 @@
@ApiOperation("设置零方位角")
@PostMapping("/setZeroPTZ")
@Log(title = "设置零方位角", businessType = BusinessType.CONTROL)
- @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.cmd.chanNo"})
+ @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"})
public @ResponseBody
AjaxResult setZeroPTZ(@RequestBody CameraCmd cmd) {
cmd.setOperator(SecurityUtils.getUserId());
diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java b/ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java
index c39fe05..dc7f5cf 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java
@@ -17,9 +17,6 @@
//异步登录
void asyncLogin(ArdCameras cameras);
- //登录所有相机
- void loginAll();
-
//注销
boolean logout(String cameraId);
diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java
index bc888e1..97591be 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java
@@ -48,7 +48,6 @@
dhClientService.loginAll();//登录全部大华相机
}
}
-
@Override
public void syncLogin(ArdCameras cameras) {
@@ -60,15 +59,10 @@
}
@Override
- public void loginAll() {
-
- }
-
- @Override
public boolean logout(String cameraId) {
return false;
}
-
+ //在线检测
@Override
public boolean isOnLine(CameraCmd cmd) {
try {
@@ -89,7 +83,7 @@
return false;
}
}
-
+ //云台控制
@Override
public boolean pTZControl(CameraCmd cmd) {
try {
@@ -110,7 +104,6 @@
return false;
}
}
-
//设置聚焦值
@Override
public boolean setFocusPos(CameraCmd cmd) {
@@ -132,8 +125,6 @@
}
return result;
}
-
-
//获取聚焦值
@Override
public Map<String, Object> getFocusPos(CameraCmd cmd) {
@@ -154,7 +145,6 @@
}
return map;
}
-
//设置预置位
@Override
public boolean setPreset(CameraCmd cmd) {
@@ -167,7 +157,7 @@
if (factory.equals("1")) {
result = hikClientService.setPreset(cmd);
} else if (factory.equals("2")) {
-
+ result = dhClientService.setPreset(cmd);
}
}
} catch (Exception ex) {
@@ -175,7 +165,6 @@
}
return result;
}
-
//调用预置位
@Override
public boolean gotoPreset(CameraCmd cmd) {
@@ -188,7 +177,7 @@
if (factory.equals("1")) {
result = hikClientService.gotoPreset(cmd);
} else if (factory.equals("2")) {
-
+ result = dhClientService.gotoPreset(cmd);
}
}
} catch (Exception ex) {
@@ -196,7 +185,6 @@
}
return result;
}
-
//获取码流压缩参数
@Override
public Map<String, String> getVideoCompressionCfg(CameraCmd cmd) {
@@ -217,7 +205,6 @@
}
return map;
}
-
//透雾开关
@Override
public boolean controlDefogcfg(CameraCmd cmd) {
@@ -238,7 +225,6 @@
}
return result;
}
-
//红外开关
@Override
public boolean controlInfrarecfg(CameraCmd cmd) {
@@ -259,8 +245,6 @@
}
return result;
}
-
-
//手动/自动聚焦
@Override
public boolean controlFocusMode(CameraCmd cmd) {
@@ -273,7 +257,7 @@
if (factory.equals("1")) {
result = hikClientService.controlFocusMode(cmd);
} else if (factory.equals("2")) {
-
+ result = dhClientService.controlFocusMode(cmd);
}
}
} catch (Exception ex) {
@@ -281,7 +265,6 @@
}
return result;
}
-
//获取聚焦模式
@Override
public String getFocusMode(CameraCmd cmd) {
@@ -302,7 +285,6 @@
}
return result;
}
-
//云台加热
@Override
public boolean controlPTHeateRpwron(CameraCmd cmd) {
@@ -323,7 +305,6 @@
}
return result;
}
-
//镜头加热
@Override
public boolean controlCameraDeicing(CameraCmd cmd) {
@@ -344,7 +325,6 @@
}
return result;
}
-
//操控锁定
@Override
public boolean controlLock(CameraCmd cmd) {
@@ -365,8 +345,6 @@
}
return result;
}
-
-
//设置解锁
@Override
public boolean controlUnLock(CameraCmd cmd) {
@@ -387,7 +365,6 @@
}
return result;
}
-
//获取云台锁定信息
@Override
public int getPTZLockInfo(CameraCmd cmd) {
@@ -413,7 +390,7 @@
public String captureJPEGPicture(CameraCmd cmd) {
return null;
}
-
+ //抓图
@Override
public String picCutCate(CameraCmd cmd) {
String url = "";
@@ -453,7 +430,6 @@
}
return map;
}
-
//获取ptz范围
@Override
public Map<String, Object> getPtzScope(CameraCmd cmd) {
@@ -474,7 +450,7 @@
}
return map;
}
-
+ //设置ptz
@Override
public boolean setPtz(CameraCmd cmd) {
boolean result = false;
@@ -494,7 +470,7 @@
}
return result;
}
-
+ //设置零方位角
@Override
public boolean setZeroPtz(CameraCmd cmd) {
boolean result = false;
@@ -514,8 +490,6 @@
}
return result;
}
-
-
//引导指向目标
@Override
public boolean guideTargetPosition(CameraCmd cmd) {
@@ -536,7 +510,7 @@
}
return result;
}
-
+ //开始录像
@Override
public boolean recordStart(CameraCmd cmd) {
boolean result = false;
@@ -556,7 +530,7 @@
}
return result;
}
-
+ //停止录像并存入minio
@Override
public String recordStopToMinio(CameraCmd cmd) {
String url = "";
@@ -576,7 +550,7 @@
}
return url;
}
-
+ //停止录像并不存入minio
@Override
public void recordStopNotToMinio(CameraCmd cmd) {
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/CapturePictureModule.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/CapturePictureModule.java
index 8c15c38..0b1c73d 100644
--- a/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/CapturePictureModule.java
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/CapturePictureModule.java
@@ -14,6 +14,8 @@
*/
public class CapturePictureModule {
+ public static NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE;
+
/**
* \if ENGLISH_LANG
* Local Capture Picture
@@ -23,7 +25,7 @@
*/
public static boolean localCapturePicture(NetSDKLib.LLong hPlayHandle, String picFileName) {
- if (!LoginModule.netsdk.CLIENT_CapturePictureEx(hPlayHandle, picFileName, NetSDKLib.NET_CAPTURE_FORMATS.NET_CAPTURE_JPEG)) {
+ if (!netsdk.CLIENT_CapturePictureEx(hPlayHandle, picFileName, NetSDKLib.NET_CAPTURE_FORMATS.NET_CAPTURE_JPEG)) {
System.err.printf("CLIENT_CapturePicture Failed!" + ToolKits.getErrorCodePrint());
return false;
} else {
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/ConfigModule.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/ConfigModule.java
index a435d75..bb99075 100644
--- a/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/ConfigModule.java
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/ConfigModule.java
@@ -3,6 +3,7 @@
import com.ruoyi.device.dhsdk.lib.NetSDKLib;
import com.sun.jna.Structure;
import com.sun.jna.ptr.IntByReference;
+import static com.ruoyi.device.dhsdk.lib.ToolKits.getErrorCodePrint;
/**
* @Description:
@@ -12,6 +13,7 @@
**/
public class ConfigModule {
public static NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE;
+ public static NetSDKLib configsdk = NetSDKLib.CONFIG_INSTANCE;
/**
* 查询设备状态
*/
@@ -19,10 +21,42 @@
IntByReference intRetLen = new IntByReference();
stuInfo.write();
- if (!LoginModule.netsdk.CLIENT_QueryDevState(hLoginHandle, nType, stuInfo.getPointer(), stuInfo.size(), intRetLen, 3000)) {
+ if (!netsdk.CLIENT_QueryDevState(hLoginHandle, nType, stuInfo.getPointer(), stuInfo.size(), intRetLen, 3000)) {
return false;
}
stuInfo.read();
return true;
}
+ /**
+ * 设置单个配置
+ * @param hLoginHandle 登陆句柄
+ * @param nChn 通道号,-1 表示全通道
+ * @param strCmd 配置名称
+ * @param cmdObject 配置对应的结构体对象
+ * @return 成功返回 true
+ */
+ public static boolean SetDevConfig(NetSDKLib.LLong hLoginHandle, int nChn, String strCmd, Structure cmdObject) {
+ boolean result = false;
+ int nBufferLen = 2*1024*1024;
+ byte szBuffer[] = new byte[nBufferLen];
+ for(int i=0; i<nBufferLen; i++)szBuffer[i]=0;
+ IntByReference error = new IntByReference(0);
+ IntByReference restart = new IntByReference(0);
+ cmdObject.write();
+ if (configsdk.CLIENT_PacketData(strCmd, cmdObject.getPointer(), cmdObject.size(), szBuffer, nBufferLen)) {
+ cmdObject.read();
+ if( configsdk.CLIENT_SetNewDevConfig(hLoginHandle, strCmd , nChn , szBuffer, nBufferLen, error, restart, 3000)) {
+ result = true;
+ } else {
+ System.err.printf("Set %s Config Failed! Last Error = %s\n" , strCmd , getErrorCodePrint());
+ result = false;
+ }
+ } else {
+ System.err.println("Packet " + strCmd + " Config Failed!" + getErrorCodePrint());
+ result = false;
+ }
+
+ return result;
+ }
+
}
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/LoginModule.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/LoginModule.java
index dff3f36..da42a76 100644
--- a/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/LoginModule.java
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/LoginModule.java
@@ -4,13 +4,8 @@
import com.ruoyi.device.dhsdk.lib.NetSDKLib.LLong;
import com.ruoyi.device.dhsdk.lib.NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY;
import com.ruoyi.device.dhsdk.lib.NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY;
-import com.ruoyi.device.dhsdk.lib.ToolKits;
-import com.sun.jna.Structure;
import com.sun.jna.ptr.IntByReference;
import lombok.extern.slf4j.Slf4j;
-
-import java.io.File;
-
import static com.ruoyi.device.dhsdk.lib.ToolKits.getErrorCodePrint;
/**
@@ -21,7 +16,6 @@
public class LoginModule {
public static NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE;
- public static NetSDKLib configsdk = NetSDKLib.CONFIG_INSTANCE;
// 设备信息
public static NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/PtzControlModule.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/PtzControlModule.java
index 5885eee..31ecfe6 100644
--- a/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/PtzControlModule.java
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/PtzControlModule.java
@@ -7,200 +7,215 @@
* 主要有 :八个方向控制、变倍、变焦、光圈功能
*/
public class PtzControlModule {
+ public static NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE;
- /**
- * 向上
- */
- public static boolean ptzControlUpStart(NetSDKLib.LLong lLoginID,int nChannelID, int lParam1, int lParam2) {
- return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
- NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL,
- lParam1, lParam2, 0, 0);
- }
- public static boolean ptzControlUpEnd(int nChannelID) {
- return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
- NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL,
- 0, 0, 0, 1);
- }
-
- /**
- * 向下
- */
- public static boolean ptzControlDownStart(int nChannelID, int lParam1, int lParam2) {
- return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
- NetSDKLib.NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL,
- lParam1, lParam2, 0, 0);
- }
- public static boolean ptzControlDownEnd(int nChannelID) {
- return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
- NetSDKLib.NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL,
- 0, 0, 0, 1);
- }
-
- /**
- * 向左
- */
- public static boolean ptzControlLeftStart(int nChannelID, int lParam1, int lParam2) {
- return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
- NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL,
- lParam1, lParam2, 0, 0);
- }
- public static boolean ptzControlLeftEnd(int nChannelID) {
- return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
- NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL,
- 0, 0, 0, 1);
- }
-
- /**
- * 向右
- */
- public static boolean ptzControlRightStart(int nChannelID, int lParam1,int lParam2) {
- return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
- NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL,
- lParam1, lParam2, 0, 0);
- }
- public static boolean ptzControlRightEnd(int nChannelID) {
- return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
- NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL,
- 0, 0, 0, 1);
- }
-
- /**
- * 向左上
- */
- public static boolean ptzControlLeftUpStart(int nChannelID, int lParam1, int lParam2) {
- return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
- NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP,
- lParam1, lParam2, 0, 0);
- }
- public static boolean ptzControlLeftUpEnd(int nChannelID) {
- return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
- NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP,
- 0, 0, 0, 1);
- }
-
- /**
- * 向右上
- */
- public static boolean ptzControlRightUpStart(int nChannelID, int lParam1, int lParam2) {
- return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
- NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP,
- lParam1, lParam2, 0, 0);
- }
- public static boolean ptzControlRightUpEnd(int nChannelID) {
- return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
- NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP,
- 0, 0, 0, 1);
- }
+ /**
+ * 向上
+ */
+ public static boolean ptzControlUpStart(NetSDKLib.LLong lLoginID, int nChannelID, int lParam1, int lParam2) {
+ return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL,
+ lParam1, lParam2, 0, 0);
+ }
- /**
- * 向左下
- */
- public static boolean ptzControlLeftDownStart(int nChannelID, int lParam1, int lParam2) {
- return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
- NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN,
- lParam1, lParam2, 0, 0);
- }
- public static boolean ptzControlLeftDownEnd(int nChannelID) {
- return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
- NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN,
- 0, 0, 0, 1);
- }
-
- /**
- * 向右下
- */
- public static boolean ptzControlRightDownStart(int nChannelID, int lParam1, int lParam2) {
- return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
- NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN,
- lParam1, lParam2, 0, 0);
- }
- public static boolean ptzControlRightDownEnd(int nChannelID) {
- return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
- NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN,
- 0, 0, 0, 1);
- }
-
+ public static boolean ptzControlUpEnd(int nChannelID) {
+ return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL,
+ 0, 0, 0, 1);
+ }
+
+ /**
+ * 向下
+ */
+ public static boolean ptzControlDownStart(int nChannelID, int lParam1, int lParam2) {
+ return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL,
+ lParam1, lParam2, 0, 0);
+ }
+
+ public static boolean ptzControlDownEnd(int nChannelID) {
+ return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL,
+ 0, 0, 0, 1);
+ }
+
+ /**
+ * 向左
+ */
+ public static boolean ptzControlLeftStart(int nChannelID, int lParam1, int lParam2) {
+ return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL,
+ lParam1, lParam2, 0, 0);
+ }
+
+ public static boolean ptzControlLeftEnd(int nChannelID) {
+ return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL,
+ 0, 0, 0, 1);
+ }
+
+ /**
+ * 向右
+ */
+ public static boolean ptzControlRightStart(int nChannelID, int lParam1, int lParam2) {
+ return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL,
+ lParam1, lParam2, 0, 0);
+ }
+
+ public static boolean ptzControlRightEnd(int nChannelID) {
+ return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL,
+ 0, 0, 0, 1);
+ }
+
+ /**
+ * 向左上
+ */
+ public static boolean ptzControlLeftUpStart(int nChannelID, int lParam1, int lParam2) {
+ return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP,
+ lParam1, lParam2, 0, 0);
+ }
+
+ public static boolean ptzControlLeftUpEnd(int nChannelID) {
+ return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP,
+ 0, 0, 0, 1);
+ }
+
+ /**
+ * 向右上
+ */
+ public static boolean ptzControlRightUpStart(int nChannelID, int lParam1, int lParam2) {
+ return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP,
+ lParam1, lParam2, 0, 0);
+ }
+
+ public static boolean ptzControlRightUpEnd(int nChannelID) {
+ return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP,
+ 0, 0, 0, 1);
+ }
+
+ /**
+ * 向左下
+ */
+ public static boolean ptzControlLeftDownStart(int nChannelID, int lParam1, int lParam2) {
+ return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN,
+ lParam1, lParam2, 0, 0);
+ }
+
+ public static boolean ptzControlLeftDownEnd(int nChannelID) {
+ return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN,
+ 0, 0, 0, 1);
+ }
+
+ /**
+ * 向右下
+ */
+ public static boolean ptzControlRightDownStart(int nChannelID, int lParam1, int lParam2) {
+ return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN,
+ lParam1, lParam2, 0, 0);
+ }
+
+ public static boolean ptzControlRightDownEnd(int nChannelID) {
+ return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN,
+ 0, 0, 0, 1);
+ }
+
/**
* 变倍+
*/
public static boolean ptzControlZoomAddStart(int nChannelID, int lParam2) {
- return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
- NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL,
- 0, lParam2, 0, 0);
+ return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL,
+ 0, lParam2, 0, 0);
}
+
public static boolean ptzControlZoomAddEnd(int nChannelID) {
- return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
- NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL,
- 0, 0, 0, 1);
+ return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL,
+ 0, 0, 0, 1);
}
/**
* 变倍-
*/
public static boolean ptzControlZoomDecStart(int nChannelID, int lParam2) {
- return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
- NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL,
- 0, lParam2, 0, 0);
+ return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL,
+ 0, lParam2, 0, 0);
}
+
public static boolean ptzControlZoomDecEnd(int nChannelID) {
- return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
- NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL,
- 0, 0, 0, 1);
+ return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL,
+ 0, 0, 0, 1);
}
/**
* 变焦+
*/
public static boolean ptzControlFocusAddStart(int nChannelID, int lParam2) {
- return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
- NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL,
- 0, lParam2, 0, 0);
+ return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL,
+ 0, lParam2, 0, 0);
}
+
public static boolean ptzControlFocusAddEnd(int nChannelID) {
- return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
- NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL,
- 0, 0, 0, 1);
+ return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL,
+ 0, 0, 0, 1);
}
/**
* 变焦-
*/
public static boolean ptzControlFocusDecStart(int nChannelID, int lParam2) {
- return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
- NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL,
- 0, lParam2, 0, 0);
+ return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL,
+ 0, lParam2, 0, 0);
}
+
public static boolean ptzControlFocusDecEnd(int nChannelID) {
- return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
- NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL,
- 0, 0, 0, 1);
+ return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL,
+ 0, 0, 0, 1);
}
/**
* 光圈+
*/
public static boolean ptzControlIrisAddStart(int nChannelID, int lParam2) {
- return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
- NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL,
- 0, lParam2, 0, 0);
+ return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL,
+ 0, lParam2, 0, 0);
}
+
public static boolean ptzControlIrisAddEnd(int nChannelID) {
- return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
- NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL,
- 0, 0, 0, 1);
+ return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL,
+ 0, 0, 0, 1);
}
/**
* 光圈-
*/
public static boolean ptzControlIrisDecStart(int nChannelID, int lParam2) {
- return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
- NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL,
- 0, lParam2, 0, 0);
+ return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL,
+ 0, lParam2, 0, 0);
}
+
public static boolean ptzControlIrisDecEnd(int nChannelID) {
- return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
- NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL,
- 0, 0, 0, 1);
+ return netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL,
+ 0, 0, 0, 1);
}
}
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/RealPlayModule.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/RealPlayModule.java
index 46e6fc7..a397132 100644
--- a/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/RealPlayModule.java
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/RealPlayModule.java
@@ -2,6 +2,10 @@
import com.ruoyi.device.dhsdk.lib.NetSDKLib;
import com.ruoyi.device.dhsdk.lib.ToolKits;
+import com.sun.jna.Pointer;
+
+import static com.ruoyi.device.dhsdk.module.LoginModule.netsdk;
+
/**
* 实时预览接口实现
* 主要有 :开始拉流、停止拉流功能
@@ -15,7 +19,26 @@
* \endif
*/
public static NetSDKLib.LLong startRealPlay(NetSDKLib.LLong m_hLoginHandle, int channel, int stream) {
- NetSDKLib.LLong m_hPlayHandle = LoginModule.netsdk.CLIENT_RealPlayEx(m_hLoginHandle, channel, null, stream);
+ NetSDKLib.LLong m_hPlayHandle = netsdk.CLIENT_RealPlayEx(m_hLoginHandle, channel, null, stream);
+ if (m_hPlayHandle.longValue() == 0) {
+ System.err.println("开始实时预览失败,错误码" + ToolKits.getErrorCodePrint());
+ } else {
+ System.out.println("Success to start realplay");
+ // netsdk.CLIENT_SetRealDataCallBackEx(m_hPlayHandle, CbfRealDataCallBackEx.getInstance(),null, 0x0000001f);
+ }
+ return m_hPlayHandle;
+ }
+
+ public static NetSDKLib.LLong startRealPlay1(NetSDKLib.LLong m_hLoginHandle, int channel, String path) {
+ NetSDKLib.NET_IN_REALPLAY_BY_DATA_TYPE net_in_realplay_by_data_type = new NetSDKLib.NET_IN_REALPLAY_BY_DATA_TYPE();
+ net_in_realplay_by_data_type.nChannelID = channel;
+ net_in_realplay_by_data_type.hWnd = null;
+ net_in_realplay_by_data_type.rType = 0;
+ net_in_realplay_by_data_type.emDataType = NetSDKLib.EM_REAL_DATA_TYPE.EM_REAL_DATA_TYPE_MP4;
+ net_in_realplay_by_data_type.szSaveFileName = path;
+ //net_in_realplay_by_data_type.cbRealData = CbfRealDataCallBackEx.getInstance();
+ NetSDKLib.NET_OUT_REALPLAY_BY_DATA_TYPE net_out_realplay_by_data_type = new NetSDKLib.NET_OUT_REALPLAY_BY_DATA_TYPE();
+ NetSDKLib.LLong m_hPlayHandle = netsdk.CLIENT_RealPlayByDataType(m_hLoginHandle, net_in_realplay_by_data_type, net_out_realplay_by_data_type, 5000);
if (m_hPlayHandle.longValue() == 0) {
System.err.println("开始实时预览失败,错误码" + ToolKits.getErrorCodePrint());
} else {
@@ -35,10 +58,56 @@
if (m_hPlayHandle.longValue() == 0) {
return;
}
-
- boolean bRet = LoginModule.netsdk.CLIENT_StopRealPlayEx(m_hPlayHandle);
+ boolean bRet = netsdk.CLIENT_StopRealPlayEx(m_hPlayHandle);
if (bRet) {
m_hPlayHandle.setValue(0);
}
}
+
+ /**
+ * 实时预览数据回调函数--扩展(pBuffer内存由SDK内部申请释放)
+ */
+ private static class CbfRealDataCallBackEx implements NetSDKLib.fRealDataCallBackEx {
+ private CbfRealDataCallBackEx() {
+ }
+
+ private static class CallBackHolder {
+ private static CbfRealDataCallBackEx instance = new CbfRealDataCallBackEx();
+ }
+
+ public static CbfRealDataCallBackEx getInstance() {
+ return CallBackHolder.instance;
+ }
+
+ @Override
+ public void invoke(NetSDKLib.LLong lRealHandle, int dwDataType, Pointer pBuffer,
+ int dwBufSize, int param, Pointer dwUser) {
+ int bInput = 0;
+ if (0 != lRealHandle.longValue()) {
+ switch (dwDataType) {
+ case 0:
+ System.out.println("码流大小为" + dwBufSize + "\n" + "码流类型为原始音视频混合数据");
+ break;
+ case 1:
+ //标准视频数据
+ System.out.println("码流大小为" + dwBufSize + "\n" + "码流类型为标准视频数据");
+ break;
+ case 2:
+ //yuv 数据
+ System.out.println("码流大小为" + dwBufSize + "\n" + "码流类型为yuv数据");
+ break;
+ case 3:
+ //pcm 音频数据
+ System.out.println("码流大小为" + dwBufSize + "\n" + "码流类型为音频数据");
+ break;
+ case 4:
+ //原始音频数据
+ System.out.println("码流大小为" + dwBufSize + "\n" + "码流类型为原始音频数据");
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ }
}
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/IDhClientService.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/IDhClientService.java
index 538a049..32ad998 100644
--- a/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/IDhClientService.java
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/IDhClientService.java
@@ -54,4 +54,11 @@
//引导目标位置
boolean guideTargetPosition(CameraCmd cmd);
+
+ //调用预置位
+ boolean gotoPreset(CameraCmd cmd);
+ //设置预置位
+ boolean setPreset(CameraCmd cmd);
+ //聚焦模式
+ boolean controlFocusMode(CameraCmd cmd);
}
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java
index 5e66b18..b7aadfb 100644
--- a/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java
@@ -13,6 +13,8 @@
import com.ruoyi.device.dhsdk.common.Res;
import com.ruoyi.device.dhsdk.lib.NetSDKLib;
import com.ruoyi.device.dhsdk.lib.NetSDKLib.LLong;
+import com.ruoyi.device.dhsdk.lib.structure.CFG_VIDEO_IN_FOCUS;
+import com.ruoyi.device.dhsdk.lib.structure.CFG_VIDEO_IN_FOCUS_UNIT;
import com.ruoyi.device.dhsdk.module.CapturePictureModule;
import com.ruoyi.device.dhsdk.module.ConfigModule;
import com.ruoyi.device.dhsdk.module.LoginModule;
@@ -38,6 +40,8 @@
import static com.ruoyi.device.dhsdk.lib.NetSDKLib.NET_DEVSTATE_ONLINE;
import static com.ruoyi.device.dhsdk.lib.NetSDKLib.NET_DEVSTATE_PTZ_LOCATION;
+import static com.ruoyi.device.dhsdk.lib.NetSDKLib.NET_PTZ_ControlType.NET_PTZ_POINT_MOVE_CONTROL;
+import static com.ruoyi.device.dhsdk.lib.NetSDKLib.NET_PTZ_ControlType.NET_PTZ_POINT_SET_CONTROL;
import static com.ruoyi.device.dhsdk.lib.ToolKits.getErrorCodePrint;
import static com.ruoyi.device.dhsdk.module.LoginModule.netsdk;
import static com.ruoyi.device.hiksdk.sdk.HCNetSDK.NET_DVR_SET_PTZPOS;
@@ -66,7 +70,11 @@
// 网络连接恢复
private static HaveReConnect haveReConnect = new HaveReConnect();
-
+ /**
+ * 登录所有相机
+ * 刘苏义
+ * 2023/10/17 8:28:13
+ */
@Override
public void loginAll() {
try {
@@ -83,11 +91,21 @@
}
}
+ /**
+ * sdk初始化
+ * 刘苏义
+ * 2023/10/17 8:28:13
+ */
@Override
public Boolean init() {
return LoginModule.init(disConnect, haveReConnect); // 打开工程,初始化
}
+ /**
+ * 登录
+ * 刘苏义
+ * 2023/10/17 8:28:13
+ */
@Override
@Async
public Boolean login(ArdCameras camera) {
@@ -127,6 +145,11 @@
return true;
}
+ /**
+ * 注销
+ * 刘苏义
+ * 2023/10/17 8:28:13
+ */
@Override
public Boolean logout(String cameraId) {
if (!GlobalVariable.loginMap.containsKey(cameraId)) {
@@ -136,6 +159,11 @@
return LoginModule.logout(loginId);
}
+ /**
+ * 是否在线检测
+ * 刘苏义
+ * 2023/10/17 8:28:13
+ */
@Override
public boolean isOnLine(CameraCmd cmd) {
try {
@@ -156,6 +184,11 @@
return true;
}
+ /**
+ * 云台控制
+ * 刘苏义
+ * 2023/10/17 8:28:13
+ */
@Override
public boolean pTZControl(CameraCmd cmd) {
String cameraId = cmd.getCameraId();
@@ -189,7 +222,7 @@
dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL;
break;
case 5:
- dwPTZCommand = HCNetSDK.RUN_SEQ;
+ dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_POINT_LOOP_CONTROL;
break;
case 6:
dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL;
@@ -224,6 +257,9 @@
case 15:
dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL;
break;
+ case 16:
+ dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LAMP_CONTROL;
+ break;
}
boolean bool = netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, dwPTZCommand, speed, speed, 0, dwStop);
if (!bool) {
@@ -232,6 +268,11 @@
return bool;
}
+ /**
+ * 获取PTZ值
+ * 刘苏义
+ * 2023/10/17 8:28:13
+ */
@Override
public Map<String, Object> getPtz(CameraCmd cmd) {
Map<String, Object> ptzMap = new HashMap<>();
@@ -276,6 +317,9 @@
int p = (int) (ptz.get("p") * 10);
int t = (int) (ptz.get("t") * 10);
int z = ptz.get("z").intValue();
+ if (z == 0) {
+ z = 1;
+ }
boolean bool = netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_EXACTGOTO, p, t, z, 0);
if (!bool) {
log.error("控制失败,请稍后重试" + getErrorCodePrint());
@@ -304,7 +348,7 @@
return false;
}
LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
- boolean bool = NetSDKLib.NETSDK_INSTANCE.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RESETZERO, 0, 0, 1, 0);
+ boolean bool = NetSDKLib.NETSDK_INSTANCE.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RESETZERO, 0, 0, 0, 0);
if (!bool) {
log.error("控制失败,请稍后重试" + getErrorCodePrint());
}
@@ -352,7 +396,7 @@
@Override
public String record(CameraCmd cmd) {
try {
- String url="";
+ String url = "";
String cameraId = cmd.getCameraId();
Integer chanNo = cmd.getChanNo();
String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4");
@@ -392,6 +436,7 @@
return "";
}
}
+
@Override
public boolean recordStart(CameraCmd cmd) {
try {
@@ -401,25 +446,25 @@
if (!GlobalVariable.loginMap.containsKey(cameraId)) {
return false;
}
- LLong loginId = (LLong)GlobalVariable.loginMap.get(cameraId);
+ LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
LLong lRealHandle;
if (GlobalVariable.previewMap.containsKey(cameraId)) {
lRealHandle = new LLong(GlobalVariable.previewMap.get(cameraId));
- netsdk.CLIENT_StopSaveRealData(lRealHandle);
+ netsdk.CLIENT_StopRealPlayEx(lRealHandle);
GlobalVariable.previewMap.remove(cameraId);
log.debug("停止当前录像");
}
- lRealHandle = RealPlayModule.startRealPlay(loginId, chanNo-1, 0);
+ lRealHandle = RealPlayModule.startRealPlay1(loginId, chanNo - 1, path);
if (lRealHandle.longValue() <= 0) {
log.error("取流失败" + getErrorCodePrint());
}
log.debug("取流成功");
GlobalVariable.previewMap.put(cameraId, lRealHandle.intValue());
GlobalVariable.threadMap.put(cameraId, Thread.currentThread().getName());
- if (!netsdk.CLIENT_SaveRealData(lRealHandle, path)) {
- log.error("保存视频文件到临时文件夹失败 错误码为: " +getErrorCodePrint());
- return false;
- }
+ //if (!netsdk.CLIENT_SaveRealData(lRealHandle, path)) {
+ // log.error("保存视频文件到临时文件夹失败 错误码为: " +getErrorCodePrint());
+ // return false;
+ //}
log.debug("录像开始");
return true;
} catch (Exception ex) {
@@ -427,6 +472,7 @@
return false;
}
}
+
@Override
public String recordStopToMinio(CameraCmd cmd) {
String url = "";
@@ -439,7 +485,7 @@
LLong lRealHandle;
if (GlobalVariable.previewMap.containsKey(cameraId)) {
lRealHandle = new LLong(GlobalVariable.previewMap.get(cameraId));
- netsdk.CLIENT_StopSaveRealData(lRealHandle);
+ netsdk.CLIENT_StopRealPlayEx(lRealHandle);
GlobalVariable.previewMap.remove(cameraId);
log.debug("停止当前录像");
}
@@ -459,6 +505,11 @@
}
}
+ /**
+ * 引导目标位置
+ * 刘苏义
+ * 2023/10/17 8:27:48
+ */
@Override
public boolean guideTargetPosition(CameraCmd cmd) {
String cameraId = cmd.getCameraId();
@@ -466,7 +517,7 @@
if (!GlobalVariable.loginMap.containsKey(cameraId)) {
return false;
}
- LLong loginId = (LLong)GlobalVariable.loginMap.get(cameraId);
+ LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
try {
ArdCameras cameras = ardCamerasService.selectArdCamerasById(cameraId);
double[] cameraPositon = new double[]{cameras.getLongitude(), cameras.getLatitude(), cameras.getAltitude()};
@@ -474,7 +525,7 @@
double[] cameraPTZ = GisUtil.getCameraPTZ(cameraPositon, targetPositions, 20, 150);
int p = (int) (cameraPTZ[0] * 10);
int t = (int) (cameraPTZ[1] * 10);
- int z = (int)(cameraPTZ[2]);
+ int z = (int) (cameraPTZ[2]);
boolean bool = netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_EXACTGOTO, p, t, z, 0);
if (!bool) {
log.error("控制失败,请稍后重试" + getErrorCodePrint());
@@ -486,22 +537,99 @@
}
}
- // 设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数
+ //转至预置点
+ @Override
+ public boolean gotoPreset(CameraCmd cmd) {
+ String cameraId = cmd.getCameraId();
+ Integer chanNo = cmd.getChanNo();
+ Integer PresetIndex = cmd.getPresetIndex();
+ if (!GlobalVariable.loginMap.containsKey(cameraId)) {
+ return false;
+ }
+ LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
+ try {
+
+ boolean bool = netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NET_PTZ_POINT_MOVE_CONTROL, 0, PresetIndex, 0, 0);
+ if (!bool) {
+ log.error("控制失败,请稍后重试" + getErrorCodePrint());
+ }
+ return bool;
+ } catch (Exception ex) {
+ log.error("转至预置点异常:" + ex.getMessage());
+ return false;
+ }
+ }
+
+ @Override
+ //设置预置位
+ public boolean setPreset(CameraCmd cmd) {
+ String cameraId = cmd.getCameraId();
+ Integer chanNo = cmd.getChanNo();
+ Integer PresetIndex = cmd.getPresetIndex();
+ if (!GlobalVariable.loginMap.containsKey(cameraId)) {
+ return false;
+ }
+ LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
+ try {
+
+ boolean bool = netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NET_PTZ_POINT_SET_CONTROL, 0, PresetIndex, 0, 0);
+ if (!bool) {
+ log.error("控制失败,请稍后重试" + getErrorCodePrint());
+ }
+ return bool;
+ } catch (Exception ex) {
+ log.error("设置预置点异常:" + ex.getMessage());
+ return false;
+ }
+ }
+
+ //切换聚焦模式
+ @Override
+ public boolean controlFocusMode(CameraCmd cmd) {
+ String cameraId = cmd.getCameraId();
+ Integer chanNo = cmd.getChanNo();
+ boolean enable = cmd.isEnable();
+ if (!GlobalVariable.loginMap.containsKey(cameraId)) {
+ return false;
+ }
+ LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
+ try {
+ CFG_VIDEO_IN_FOCUS cfg_video_in_focus = new CFG_VIDEO_IN_FOCUS();
+ CFG_VIDEO_IN_FOCUS_UNIT[] stVideoInFocusUnit = new CFG_VIDEO_IN_FOCUS_UNIT[32];
+ if (enable) {
+ stVideoInFocusUnit[0].nMode = 4;//手动聚焦
+ } else {
+ stVideoInFocusUnit[0].nMode = 2;//手动聚焦
+ }
+ cfg_video_in_focus.nChannelIndex = chanNo - 1;
+ cfg_video_in_focus.stVideoInFocusUnit = stVideoInFocusUnit;
+ boolean bool = ConfigModule.SetDevConfig(loginId, chanNo - 1, NetSDKLib.CFG_CMD_VIDEOIN_FOCUS, cfg_video_in_focus);
+ if (!bool) {
+ log.error("控制失败,请稍后重试" + getErrorCodePrint());
+ }
+ return bool;
+ } catch (Exception ex) {
+ log.error("切换聚焦模式异常:" + ex.getMessage());
+ return false;
+ }
+ }
+
+ // 设备断线回调: 当设备出现断线时,SDK会调用该函数
private static class DisConnect implements NetSDKLib.fDisConnect {
public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);
}
}
- // 网络连接恢复,设备重连成功回调
- // 通过 CLIENT_SetAutoReconnect 设置该回调函数,当已断线的设备重连成功时,SDK会调用该函数
+ // 网络连接恢复回调:设备重连成功回调,当已断线的设备重连成功时,SDK会调用该函数
private static class HaveReConnect implements NetSDKLib.fHaveReConnect {
@Override
public void invoke(LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) {
System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort);
}
}
- // 抓图接收回调
+
+ // 抓图接收回调:当抓图成功,sdk会调用该函数
public static class fCaptureReceiveCB implements NetSDKLib.fSnapRev {
private String minioEndPoint;
private String ObjectName;
--
Gitblit v1.9.3