소스 검색

优化代码逻辑

zhangqiankun 3 년 전
부모
커밋
33a917eeb6

+ 8 - 0
pom.xml

@@ -132,11 +132,19 @@
 	</repositories>
 
 	<build>
+		<finalName>${project.artifactId}</finalName>
 		<plugins>
 			<plugin>
 				<groupId>org.springframework.boot</groupId>
 				<artifactId>spring-boot-maven-plugin</artifactId>
 				<version>${spring-boot-dependencies.version}</version>
+				<executions>
+					<execution>
+						<goals>
+							<goal>repackage</goal>
+						</goals>
+					</execution>
+				</executions>
 			</plugin>
 		</plugins>
 		<resources>

+ 4 - 3
src/main/java/com/persagy/cameractl/controller/HelloController.java

@@ -126,15 +126,16 @@ public class HelloController {
      */
     @RequestMapping(value = "/vision/{opertype}", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
     public String hikvisionOper(@PathVariable("opertype") String operType, @RequestBody SceneConfig sceneConfig) {
-
         log.info("调用NVR9平台接口开始,操作类型:{},场景配置:{}", operType, sceneConfig);
         long start = System.currentTimeMillis();
 
         Nvr9CameraExecuteApi dahCameraExecuteApi = new Nvr9CameraExecuteApi();
         
         ResultClass executeResult = operType.equals("currentVideo") ? dahCameraExecuteApi.currentVideo(sceneConfig.getNvrSceneRelation())
-                : operType.equals("toup") ? dahCameraExecuteApi.toup(sceneConfig) 
-                	: new ResultClass(false, "非法请求");
+        		: operType.equals("currentlunx") ? dahCameraExecuteApi.currentlunx(sceneConfig.getNvrSceneRelation())
+        				: operType.equals("lunx") ? dahCameraExecuteApi.lunx(sceneConfig) 
+        						: operType.equals("toup") ? dahCameraExecuteApi.toup(sceneConfig) 
+        								: new ResultClass(false, "非法请求");
 
         switch (String.valueOf(executeResult.name)) {
             case "true":

+ 22 - 1
src/main/java/com/persagy/cameractl/model/Channel.java

@@ -18,9 +18,30 @@ import lombok.ToString;
 @ToString
 public class Channel {
 
-	/** 每个场景中的窗口ID,从左到右,从上到下,从0开始 */
+	/** 每个场景中的窗口ID,从左到右,从上到下,从1开始 */
 	private int windowId;
 	
+	/** 轮巡时间,单位:秒 */
+	private int nchanggeTime;
+	
+	/** 时间段ID,取值 1,2,3 */
+	private int ntimeindex;
+	
+	/** 星期,从星期日开始0-6,全部为7 */
+	private byte nweek;
+	
+	/** 窗口分割数量 */
+	private int nwndnumber;
+	
+	/** 开始时间,距离:00:00 的秒数 */
+	private int ulstarttime;
+	
+	/** 结束时间,距离:00:00 的秒数 */
+	private int ulendtime;
+	
+	/** 输出屏号 */
+	private byte noutputscreenno;
+	
 	/** 摄像头信息集合 */
 	private List<Camera> cameras;
 	

+ 2 - 0
src/main/java/com/persagy/cameractl/model/NvrSceneRelation.java

@@ -2,6 +2,7 @@ package com.persagy.cameractl.model;
 
 import lombok.Getter;
 import lombok.Setter;
+import lombok.ToString;
 
 /**
  * 解码器输出口与TCL入口号之间的关系
@@ -13,6 +14,7 @@ import lombok.Setter;
  */
 @Getter
 @Setter
+@ToString
 public class NvrSceneRelation {
 
 	/** 组ID */

+ 0 - 21
src/main/java/com/persagy/cameractl/model/SceneConfig.java

@@ -25,27 +25,6 @@ public class SceneConfig {
 	/** 场景ID */
 	private int scene;
 	
-	/** 轮巡时间,单位:秒 */
-	private String nchanggeTime;
-	
-	/** 时间段ID,取值 1,2,3 */
-	private String ntimeindex;
-	
-	/** 星期,从星期日开始0-6,全部为7 */
-	private String nweek;
-	
-	/** 窗口分割数量 */
-	private String nwndnumber;
-	
-	/** 开始时间,距离:00:00 的秒数 */
-	private String ulstarttime;
-	
-	/** 结束时间,距离:00:00 的秒数 */
-	private String ulendtime;
-	
-	/** 输出屏号 */
-	private String noutputscreenno;
-	
 	/** 通道集合 */
 	private List<Channel> channels;
 	

+ 0 - 180
src/main/java/com/persagy/cameractl/service/windows/NVR9MainWindows.java

@@ -1,180 +0,0 @@
-package com.persagy.cameractl.service.windows;
-
-import com.persagy.cameractl.conf.NVR9Config;
-import com.persagy.cameractl.utils.Camera;
-import com.persagy.cameractl.utils.OtherTools;
-import com.persagy.cameractl.utils.ResultClass;
-import com.sun.jna.platform.win32.WinDef.DWORD;
-import com.sun.jna.platform.win32.WinDef.UINT;
-
-import cn.hutool.core.util.BooleanUtil;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-public class NVR9MainWindows {
-
-	// 默认连接超时时间,单位:毫秒
-	int wait_time = 5000;
-
-	// 摄像头对象
-	Camera tagCircle;
-	
-	// 登录句柄
-	DWORD loginHandler;
-
-	UINT login_id;
-
-	// 下载句柄
-	// LLong m_hDownLoadHandle = new LLong(0);
-
-	public NVR9MainWindows(Camera cameraI) {
-		this.tagCircle = cameraI;
-	}
-
-	/**
-	 * 初始化及登录
-	 */
-	/*private ResultClass initAndLoginNVR9() {
-		if (NVR9Config.vskDevNet == null)
-			return this.executeErr(false, "NVR9 SDK未初始化成功,请重启应用程序", "");
-
-		// 登录
-		login_id = NVR9Config.vskDevNet.NS_NET_Login(NVR9Config.nvr9Ip.getBytes(), new WinDef.WORD(NVR9Config.nvr9Port),
-				NVR9Config.nvr9UserName.getBytes(), NVR9Config.nvr9Password.getBytes(), null, null);
-		long userId = login_id == null ? -1L : login_id.longValue();
-		if (userId < 0) {
-			return this.executeErr(false, userId + "", "登录失败");
-		}
-
-		ResultClass resultClass = new ResultClass();
-		resultClass.name = true;
-		return resultClass;
-	}*/
-
-	/**
-	 * 轮巡入口
-	 */
-	public ResultClass lunx() {
-		// 初始化
-		/*ResultClass initResult = this.initAndLoginNVR9();
-		if (!initResult.name) {
-			return this.executeErr(false, null, "初始化失败");
-		}
-		
-		byte nweek = tagCircle.nweek;
-		int ntimeindex = tagCircle.ntimeindex;
-		int index = ntimeindex - 1;
-		int windowId = tagCircle.windowId;
-		List<Channel> channels = tagCircle.channels;
-		byte noutputscreenno = tagCircle.noutputscreenno;
-		
-		DecCircleStrateryEx decStratery = new DecCircleStrateryEx();
-		if (nweek == 7) {
-			for (int i = 0; i < nweek; i++) {
-				if (CollectionUtil.isEmpty(channels)) {
-					continue;
-				}
-				
-				int nChlNum = channels.size();
-				for (int j = 0; j <nChlNum; j++) {
-					Channel channel = channels.get(j);
-					int wChanUsed = channel.getWChanUsed();
-					byte streamType = channel.getStreamType();
-
-					// 用户
-					decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].Ipclogin.username = channel.getUsername().getBytes();
-					decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].Ipclogin.password = channel.getPassword().getBytes();
-					
-					// 通道
-					decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].ipc.ip = channel.getIp().getBytes();
-					decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].ipc.port = channel.getPort();
-					decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].ipc.wChanUsed = wChanUsed;
-					if (streamType == 0) {
-						decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].ipc.mediaStream.stream_uri = channel.getStreamUri().getBytes();
-						decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].ipc.mediaStream.uri_size = channel.getUriSize();
-					} else {
-						decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].ipc.device_addrs = channel.getDeviceAddrs().getBytes();
-					}
-					
-					decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].ipc.frameRate = channel.getFrameRate();
-					decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].ipc.streamType = streamType;
-					decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].ipc.deviceType = 0;
-					//decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].ipc.channelID = channel.getChannelID();
-					//decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].ipc.manufacterID = IPC_MACHINE_TYPE.ONVIF_PROTOCOL;
-					decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].ipc.manufacturer = channel.getQstrmanufactername().getBytes();
-					decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].ipc.model = channel.getQstrmodel().getBytes();
-					
-					// nUser
-					decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].nUser = (wChanUsed << 16 | windowId);
-				}
-
-				decStratery.DecCircleStrateryChl[i][index].nchanggeTime = tagCircle.nchanggeTime;
-				decStratery.DecCircleStrateryChl[i][index].nChlNum = nChlNum;
-				decStratery.DecCircleStrateryChl[i][index].nTimeId = ntimeindex;
-				decStratery.DecCircleStrateryChl[i][index].nwinnum = tagCircle.nwndnumber;
-				decStratery.DecCircleStrateryChl[i][index].uistarttime = tagCircle.ulstarttime;
-				decStratery.DecCircleStrateryChl[i][index].uiendtime = tagCircle.ulendtime;
-			}
-		}
-		
-		DECV2_PROTO_DecCircleStrateryEx DECV2_PROTO_DecCircleStrateryEx = new DECV2_PROTO_DecCircleStrateryEx();
-		
-		DECV2_PROTO_HEADER_T proHead = new DECV2_PROTO_HEADER_T();
-		proHead.master = (byte)(noutputscreenno - 1);
-		proHead.weekday = nweek;
-		proHead.dataLen = decStratery.size();
-		DECV2_PROTO_DecCircleStrateryEx.proHead = proHead;
-		DECV2_PROTO_DecCircleStrateryEx.decStratery = decStratery;
-
-		// NS_NET_SetNVRConfig
-		Boolean setResult = NVR9Config.vskDevNet.NS_NET_SetNVRConfig(login_id, new WinDef.UINT(140),
-				new WinDef.LONG(0xFFFFFFFF), DECV2_PROTO_DecCircleStrateryEx.getPointer(),
-				new WinDef.UINT(decStratery.size()));
-		if (!BooleanUtil.isTrue(setResult)) {
-			int errCode = NVR9Config.getErrCode();
-			return this.executeErr(true, "设置视频源轮巡策略失败,错误码:" + errCode + ",窗口号:" + tagCircle.noutputscreenno, "");
-		}*/
-		
-		return this.executeSuccess(null);
-	}
-
-	/**
-	 * 返回错误结果,同时释放资源 isLogingout 是否注销登录,在注册失败时只需要释放SDK不需要注销登录 errCode
-	 * 调用sdk的结果,一般为错误码 errPrefix 返回给客户端调用者的错误信息前缀
-	 * 
-	 * @param isLogingout
-	 * @param errCode
-	 * @param errPrefix
-	 * @return
-	 * @date 2021年9月30日 上午11:23:43
-	 */
-	private ResultClass executeErr(boolean isLogingout, String errCode, String errPrefix) {
-		this.sdkCleanup(isLogingout);
-		String errReason = OtherTools.joinErrStr(errCode, errPrefix);
-		return OtherTools.executeErr(errReason);
-	}
-
-	/**
-	 * 返回调用成功及结果数据,同时注销登陆
-	 */
-	private ResultClass executeSuccess(Object resultData) {
-		this.sdkCleanup(true);
-		return OtherTools.executeSuccess(resultData);
-	}
-
-	/**
-	 * 注销登录 isLogingout 是否注销登录,在注册失败时只需要释放SDK不需要注销登录
-	 */
-	private void sdkCleanup(boolean isLogingout) {
-		// 注销设备,即注销登录
-		if (isLogingout) {
-			Boolean logout = NVR9Config.vskDevNet.NS_NET_Logout(this.login_id);
-			if (BooleanUtil.isTrue(logout)) {
-				log.info("NVR9000 SDK 注销成功");
-			} else {
-				log.error("NVR9000 SDK 注销失败");
-			}
-		}
-	}
-
-}

+ 261 - 49
src/main/java/com/persagy/cameractl/service/windows/Nvr9CameraExecuteApi.java

@@ -1,6 +1,8 @@
 package com.persagy.cameractl.service.windows;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -12,16 +14,19 @@ import com.persagy.cameractl.model.NvrSceneRelation;
 import com.persagy.cameractl.model.SceneConfig;
 import com.persagy.cameractl.utils.OtherTools;
 import com.persagy.cameractl.utils.ResultClass;
-import com.persagy.vsknet.enums.IPC_MACHINE_TYPE;
 import com.persagy.vsknet.structure.CurShowDevEx;
+import com.persagy.vsknet.structure.DECV2_PROTO_DecCircleStrateryEx;
 import com.persagy.vsknet.structure.DECV2_PROTO_HEADER_T;
 import com.persagy.vsknet.structure.DECV2_PROTO_IPC;
+import com.persagy.vsknet.structure.DecCircleStrateryEx;
+import com.persagy.vsknet.structure.DecCircleTimeEx;
 import com.persagy.vsknet.structure.IPC_ArrayEx;
 import com.persagy.vsknet.tmp.AUTHORIZATION;
 import com.persagy.vsknet.tmp.SERVER_URI;
 import com.sun.jna.platform.win32.WinDef;
 import com.sun.jna.platform.win32.WinDef.UINT;
 
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.BooleanUtil;
 import lombok.extern.slf4j.Slf4j;
 
@@ -37,7 +42,185 @@ public class Nvr9CameraExecuteApi {
 
 	/** 当前登陆者 */
 	private UINT login_id;
+	
+	
+	public ResultClass lunx(SceneConfig sceneConfig) {
+		List<Channel> channels = sceneConfig.getChannels();
+		for (Channel channel : channels) {
+			int windowId = channel.getWindowId();
+			byte nweek = channel.getNweek();
+			int ntimeindex = channel.getNtimeindex();
+			int index = ntimeindex - 1;
+			byte noutputscreenno = channel.getNoutputscreenno();
+			
+			// 登录
+			NvrSceneRelation relation = SceneConfigCache.SCENE_CONFIG.get(SceneConfigCache.getCacheKey(sceneConfig.getGroup(), sceneConfig.getScene(), windowId));
+			//byte sdkChannelId = relation.getSdkChannelId();
+			boolean initAndLoginNVR9 = this.login(relation);
+			if (!initAndLoginNVR9) {
+				return this.executeErr(false, null, "登录失败");
+			}
+			
+			DecCircleStrateryEx decStratery = new DecCircleStrateryEx();
+			if (nweek == 7) {
+				for (int i = 0; i < nweek; i++) {
+					if (CollectionUtil.isEmpty(channels)) {
+						continue;
+					}
+					
+					List<Camera> cameras = channel.getCameras();
+					for (int j = 0; j < cameras.size(); j++) {
+						Camera camera = cameras.get(j);
+						int wChanUsed = camera.getWChanUsed();
+						byte streamType = camera.getStreamType();
 
+						// 用户
+						decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].Ipclogin.username = camera.getUsername().getBytes();
+						decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].Ipclogin.password = camera.getPassword().getBytes();
+						
+						// 通道
+						decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].ipc.ip = camera.getIp().getBytes();
+						decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].ipc.port = camera.getPort();
+						decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].ipc.wChanUsed = wChanUsed;
+						if (streamType == 0) {
+							decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].ipc.mediaStream.stream_uri = camera.getStreamUri().getBytes();
+							decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].ipc.mediaStream.uri_size = camera.getUriSize();
+						} else {
+							decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].ipc.device_addrs = camera.getDeviceAddrs().getBytes();
+						}
+						
+						decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].ipc.frameRate = camera.getFrameRate();
+						decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].ipc.streamType = streamType;
+						decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].ipc.deviceType = 0;
+						//decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].ipc.channelID = channel.getChannelID();
+						//decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].ipc.manufacterID = IPC_MACHINE_TYPE.ONVIF_PROTOCOL;
+						decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].ipc.manufacturer = camera.getManufactername().getBytes();
+						decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].ipc.model = camera.getModel().getBytes();
+						
+						// nUser
+						decStratery.DecCircleStrateryChl[i][index].ChlInfo[j].nUser = (wChanUsed << 16 | windowId);
+					}
+
+					decStratery.DecCircleStrateryChl[i][index].nchanggeTime = channel.getNchanggeTime();
+					decStratery.DecCircleStrateryChl[i][index].nChlNum = cameras.size();
+					decStratery.DecCircleStrateryChl[i][index].nTimeId = ntimeindex;
+					decStratery.DecCircleStrateryChl[i][index].nwinnum = channel.getNwndnumber();
+					decStratery.DecCircleStrateryChl[i][index].uistarttime = channel.getUlstarttime();
+					decStratery.DecCircleStrateryChl[i][index].uiendtime = channel.getUlendtime();
+				}
+			}
+			
+			DECV2_PROTO_DecCircleStrateryEx DECV2_PROTO_DecCircleStrateryEx = new DECV2_PROTO_DecCircleStrateryEx();
+			
+			DECV2_PROTO_HEADER_T proHead = new DECV2_PROTO_HEADER_T();
+			proHead.master = (byte)(noutputscreenno - 1);
+			proHead.weekday = nweek;
+			proHead.dataLen = decStratery.size();
+			DECV2_PROTO_DecCircleStrateryEx.proHead = proHead;
+			DECV2_PROTO_DecCircleStrateryEx.decStratery = decStratery;
+
+			// NS_NET_SetNVRConfig
+			Boolean setResult = NVR9Config.vskDevNet.NS_NET_SetNVRConfig(login_id, new WinDef.UINT(140),
+					new WinDef.LONG(0xFFFFFFFF), DECV2_PROTO_DecCircleStrateryEx.getPointer(),
+					new WinDef.UINT(decStratery.size()));
+			if (BooleanUtil.isTrue(setResult)) {
+				this.executeSuccess(true, null);
+			} else {
+				int errCode = NVR9Config.getErrCode();
+				return this.executeErr(true, "设置视频源轮巡策略失败,错误码:" + errCode + ",窗口号:" + noutputscreenno, "");
+			}
+		}
+		
+		return this.executeSuccess(false, "设置视频源轮巡策略成功");
+	}
+	
+	/**
+	 * 获取当前的轮询策略
+	 * 
+	 * @param sceneRelation
+	 * @return
+	 * @date 2021年10月26日 上午10:15:08
+	 */
+	public ResultClass currentlunx(NvrSceneRelation sceneRelation) {
+		byte sdkChannelId = sceneRelation.getSdkChannelId();
+		if (login_id == null) {
+			boolean initAndLoginNVR9 = this.login(sceneRelation);
+			if (!initAndLoginNVR9) {
+				return this.executeErr(false, null, "登录失败");
+			}
+		}
+		
+		// 获取当前的轮询策略
+		DecCircleStrateryEx decCircleStrateryEx = new DecCircleStrateryEx();
+		Boolean result = this.getDecCircleTimeExConfig(decCircleStrateryEx, sdkChannelId);
+		if (!BooleanUtil.isTrue(result)) {
+			int errCode = NVR9Config.getErrCode();
+			return this.executeErr(false, errCode + "", "获取解码器当前轮询策略信息失败");
+		}
+		
+		// 数据解析
+		Map<String, JSONObject> resultMap = this.parseDecCircleStrateryEx(decCircleStrateryEx);
+		return this.executeSuccess(true, resultMap);
+	}
+	
+	/**
+	 * 获取解码器的轮询策略配置信息
+	 * 
+	 * @param decCircleStrateryEx
+	 * @date 2021年10月26日 上午10:40:40
+	 */
+	private Boolean getDecCircleTimeExConfig(DecCircleStrateryEx decCircleStrateryEx, byte sdkChannelId) {
+		DECV2_PROTO_HEADER_T DECV2_PROTO_HEADER_T = new DECV2_PROTO_HEADER_T();
+		DECV2_PROTO_HEADER_T.master = sdkChannelId;
+		
+		Boolean result = NVR9Config.vskDevNet.NS_NET_GetNVRConfigEx(login_id, new WinDef.UINT(136), new WinDef.LONG(0), 
+				DECV2_PROTO_HEADER_T.getPointer(), new WinDef.UINT(DECV2_PROTO_HEADER_T.size()), decCircleStrateryEx.getPointer(), 
+				new WinDef.UINT(decCircleStrateryEx.size()), null);
+		return result;
+	}
+	
+	/**
+	 * 解析DecCircleStrateryEx结构体
+	 * 
+	 * @param decCircleStrateryEx
+	 * @return
+	 * @date 2021年10月26日 上午10:51:39
+	 */
+	private Map<String, JSONObject> parseDecCircleStrateryEx(DecCircleStrateryEx decCircleStrateryEx) {
+		Map<String, JSONObject> resultMap = new HashMap<String, JSONObject>();
+		DecCircleTimeEx[][] circleStrateryChl = decCircleStrateryEx.DecCircleStrateryChl;
+		for (int i = 0; i < circleStrateryChl.length; i++) {
+			// 获取二维中的数据
+			DecCircleTimeEx[] circleTimeExs = circleStrateryChl[i];
+			for (int j = 0; j < circleTimeExs.length; j++) {
+				String key = i + "_" + j;
+				
+				JSONObject jsonObject = new JSONObject();
+				jsonObject.put("nTimeId", circleStrateryChl[i][j].nTimeId);
+				jsonObject.put("uistarttime", circleStrateryChl[i][j].uistarttime);
+				jsonObject.put("uiendtime", circleStrateryChl[i][j].uiendtime);
+				jsonObject.put("nwinnum", circleStrateryChl[i][j].nwinnum);
+				jsonObject.put("nchanggeTime", circleStrateryChl[i][j].nchanggeTime);
+				jsonObject.put("nChlNum", circleStrateryChl[i][j].nChlNum);
+				
+				IPC_ArrayEx[] arrayExs = circleStrateryChl[i][j].ChlInfo;
+				JSONArray chlInfos = this.parseIPC_ArrayEx(arrayExs);
+				jsonObject.put("ChlInfo", chlInfos);
+				
+				resultMap.put(key, jsonObject);
+			}
+		}
+		
+		return resultMap;
+	}
+	
+	/**
+	 * 投屏
+	 * 
+	 * @param sceneConfig
+	 * @return
+	 * @date 2021年10月26日 上午10:14:59
+	 */
 	public ResultClass toup(SceneConfig sceneConfig) {
 		// 设置通道预览
 		List<Channel> channels = sceneConfig.getChannels();
@@ -139,16 +322,11 @@ public class Nvr9CameraExecuteApi {
 			}
 		}
 		
-		DECV2_PROTO_HEADER_T DECV2_PROTO_HEADER_T = new DECV2_PROTO_HEADER_T();
-		DECV2_PROTO_HEADER_T.master = sdkChannelId;
-		
 		CurShowDevEx curShowDevEx = new CurShowDevEx();
-		Boolean result = NVR9Config.vskDevNet.NS_NET_GetNVRConfigEx(login_id, new WinDef.UINT(136), new WinDef.LONG(0), 
-				DECV2_PROTO_HEADER_T.getPointer(), new WinDef.UINT(DECV2_PROTO_HEADER_T.size()), curShowDevEx.getPointer(), 
-				new WinDef.UINT(curShowDevEx.size()), null);
+		Boolean result = this.getCurShowDevExConfig(curShowDevEx, sdkChannelId);
 		if (!BooleanUtil.isTrue(result)) {
 			int errCode = NVR9Config.getErrCode();
-			log.warn("获取解码器当前预览视频信息,错误码: " + errCode);
+			return this.executeErr(false, errCode + "", "获取解码器当前预览视频信息失败");
 		}
 		
 		JSONObject jsonObject = new JSONObject();
@@ -156,48 +334,81 @@ public class Nvr9CameraExecuteApi {
 		jsonObject.put("WindowsNum", curShowDevEx.WindowsNum);
 		
 		IPC_ArrayEx[] arrayExs = curShowDevEx.ChlInfo;
-		if (arrayExs != null) {
-			JSONArray chlInfos = new JSONArray();
-			for (int i = 0; i < arrayExs.length; i++) {
-				JSONObject chlInfo = new JSONObject();
-				IPC_ArrayEx ipc_ArrayEx = arrayExs[0];
-				
-				SERVER_URI server_URI = ipc_ArrayEx.ipc;
-				JSONObject ipc = new JSONObject();
-				
-				ipc.put("wChanUsed", server_URI.wChanUsed);
-				ipc.put("device_addrs", new String(server_URI.device_addrs));
-				
-				JSONObject mediaStream = new JSONObject();
-				mediaStream.put("stream_uri", new String(server_URI.mediaStream.stream_uri));
-				mediaStream.put("uri_size", server_URI.mediaStream.uri_size);
-				ipc.put("mediaStream", mediaStream);
-				
-				ipc.put("addrs_size", server_URI.addrs_size);
-				ipc.put("ip", server_URI.wChanUsed);
-				ipc.put("wChanUsed", new String(server_URI.ip));
-				ipc.put("port", server_URI.port);
-				ipc.put("manufacterID", server_URI.manufacterID);
-				ipc.put("frameRate", server_URI.frameRate);
-				ipc.put("streamType", server_URI.streamType);
-				ipc.put("deviceType", server_URI.deviceType);
-				ipc.put("channelID", server_URI.channelID);
-				ipc.put("manufacturer", new String(server_URI.manufacturer));
-				ipc.put("model", new String(server_URI.model));
-				
-				AUTHORIZATION authorization = ipc_ArrayEx.Ipclogin;
-				JSONObject Ipclogin = new JSONObject();
-				Ipclogin.put("username", new String(authorization.username));
-				Ipclogin.put("password", new String(authorization.password));
-				
-				chlInfo.put("ipc", ipc);
-				chlInfo.put("Ipclogin", Ipclogin);
-				chlInfo.put("nUser", ipc_ArrayEx.nUser);
-			}
+		JSONArray chlInfos = this.parseIPC_ArrayEx(arrayExs);
+		jsonObject.put("ChlInfo", chlInfos);
+		
+		return this.executeSuccess(true, jsonObject);
+	}
+	
+	/**
+	 * 获取解码器当前预览视频信息
+	 * 
+	 * @param decCircleStrateryEx
+	 * @date 2021年10月26日 上午10:40:40
+	 */
+	private Boolean getCurShowDevExConfig(CurShowDevEx curShowDevEx, byte sdkChannelId) {
+		DECV2_PROTO_HEADER_T DECV2_PROTO_HEADER_T = new DECV2_PROTO_HEADER_T();
+		DECV2_PROTO_HEADER_T.master = sdkChannelId;
+		
+		Boolean result = NVR9Config.vskDevNet.NS_NET_GetNVRConfigEx(login_id, new WinDef.UINT(136), new WinDef.LONG(0), 
+				DECV2_PROTO_HEADER_T.getPointer(), new WinDef.UINT(DECV2_PROTO_HEADER_T.size()), curShowDevEx.getPointer(), 
+				new WinDef.UINT(curShowDevEx.size()), null);
+		return result;
+	}
+	
+	/**
+	 * 解析IPC_ArrayEx结构体
+	 * 
+	 * @param arrayExs
+	 * @return
+	 * @date 2021年10月26日 上午10:31:01
+	 */
+	private JSONArray parseIPC_ArrayEx(IPC_ArrayEx[] arrayExs) {
+		if (arrayExs == null) {
+			return null;
+		}
+		
+		JSONArray chlInfos = new JSONArray();
+		for (int i = 0; i < arrayExs.length; i++) {
+			JSONObject chlInfo = new JSONObject();
+			IPC_ArrayEx ipc_ArrayEx = arrayExs[i];
+			
+			SERVER_URI server_URI = ipc_ArrayEx.ipc;
+			JSONObject ipc = new JSONObject();
+			
+			ipc.put("wChanUsed", server_URI.wChanUsed);
+			ipc.put("device_addrs", new String(server_URI.device_addrs));
+			
+			JSONObject mediaStream = new JSONObject();
+			mediaStream.put("stream_uri", new String(server_URI.mediaStream.stream_uri));
+			mediaStream.put("uri_size", server_URI.mediaStream.uri_size);
+			ipc.put("mediaStream", mediaStream);
 			
-			jsonObject.put("ChlInfo", chlInfos);
+			ipc.put("addrs_size", server_URI.addrs_size);
+			ipc.put("ip", server_URI.wChanUsed);
+			ipc.put("wChanUsed", new String(server_URI.ip));
+			ipc.put("port", server_URI.port);
+			ipc.put("manufacterID", server_URI.manufacterID);
+			ipc.put("frameRate", server_URI.frameRate);
+			ipc.put("streamType", server_URI.streamType);
+			ipc.put("deviceType", server_URI.deviceType);
+			ipc.put("channelID", server_URI.channelID);
+			ipc.put("manufacturer", new String(server_URI.manufacturer));
+			ipc.put("model", new String(server_URI.model));
+			
+			AUTHORIZATION authorization = ipc_ArrayEx.Ipclogin;
+			JSONObject Ipclogin = new JSONObject();
+			Ipclogin.put("username", new String(authorization.username));
+			Ipclogin.put("password", new String(authorization.password));
+			
+			chlInfo.put("ipc", ipc);
+			chlInfo.put("Ipclogin", Ipclogin);
+			chlInfo.put("nUser", ipc_ArrayEx.nUser);
+			
+			chlInfos.add(chlInfo);
 		}
-		return this.executeSuccess(true, jsonObject);
+		
+		return chlInfos;
 	}
 	
 	
@@ -209,7 +420,8 @@ public class Nvr9CameraExecuteApi {
 			log.warn("NVR9 SDK未初始化成功,请重启应用程序");
 			return false;
 		}
-
+		log.info(relation.toString());
+		
 		// 登录
 		login_id = NVR9Config.vskDevNet.NS_NET_Login(relation.getIp().getBytes(), new WinDef.WORD(relation.getPort()),
 				relation.getUsername().getBytes(), relation.getPassword().getBytes(), null, null);

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 1 - 1
src/main/resources/application.yml