zhangqiankun 3 years ago
parent
commit
dedea68926

+ 118 - 81
src/main/java/com/persagy/cameractl/service/windows/Nvr9CameraExecuteApi.java

@@ -255,57 +255,62 @@ public class Nvr9CameraExecuteApi {
 			
 			int errCode = -1;
 			Boolean result = null;
-			Camera camera = channel.getCamera();
-			int wChanUsed = camera.getWChanUsed();
-			byte streamType = camera.getStreamType();
+			try {
+				Camera camera = channel.getCamera();
+				int wChanUsed = camera.getWChanUsed();
+				byte streamType = camera.getStreamType();
 
-			// 用户
-			IPC_ArrayEx IPC_ArrayEx = new IPC_ArrayEx();
-			IPC_ArrayEx.Ipclogin.username = camera.getUsername().getBytes();
-			IPC_ArrayEx.Ipclogin.password = camera.getPassword().getBytes();
-			
-			// 通道
-			IPC_ArrayEx.ipc.ip = camera.getIp().getBytes();
-			IPC_ArrayEx.ipc.port = camera.getPort();
-			IPC_ArrayEx.ipc.wChanUsed = wChanUsed;
-			if (streamType == 0) {
-				IPC_ArrayEx.ipc.mediaStream.stream_uri = camera.getStreamUri().getBytes();
-				IPC_ArrayEx.ipc.mediaStream.uri_size = camera.getUriSize();
-			} else {
-				IPC_ArrayEx.ipc.device_addrs = camera.getDeviceAddrs().getBytes();
-			}
-			
-			IPC_ArrayEx.ipc.frameRate = camera.getFrameRate();
-			IPC_ArrayEx.ipc.streamType = streamType;
-			IPC_ArrayEx.ipc.deviceType = 0;
-			//IPC_ArrayEx.ipc.channelID = channel.getChannelID();
-			//IPC_ArrayEx.ipc.manufacterID = IPC_MACHINE_TYPE.ONVIF_AXIS;
-			IPC_ArrayEx.ipc.manufacturer = camera.getManufactername().getBytes();
-			IPC_ArrayEx.ipc.model = camera.getModel().getBytes();
-			
-			// nUser
-			IPC_ArrayEx.nUser = (wChanUsed << 16) + windowId;	// 添加到的通道号与窗口号
-			
-			// 删除通道预览
-			DECV2_PROTO_IPC deletePreview = new DECV2_PROTO_IPC();
-			deletePreview.proHead.master = sdkChannelId;		//输出屏号从0开始
-			deletePreview.proHead.dataLen = IPC_ArrayEx.size();
-			result = NVR9Config.vskDevNet.NS_NET_SetNVRConfig(login_id, new WinDef.UINT(142), new WinDef.LONG(1), 
-					deletePreview.getPointer(), new WinDef.UINT(deletePreview.size()));
-			if (BooleanUtil.isTrue(result)) {
-				// 添加通道预览
-				DECV2_PROTO_IPC updatePreview = new DECV2_PROTO_IPC();
-				updatePreview.proHead.master = sdkChannelId;	//输出屏号从0开始
-				updatePreview.proHead.dataLen = IPC_ArrayEx.size();
-				result = NVR9Config.vskDevNet.NS_NET_SetNVRConfig(login_id, new WinDef.UINT(141), new WinDef.LONG(1), 
+				// 用户
+				IPC_ArrayEx IPC_ArrayEx = new IPC_ArrayEx();
+				IPC_ArrayEx.Ipclogin.username = camera.getUsername().getBytes();
+				IPC_ArrayEx.Ipclogin.password = camera.getPassword().getBytes();
+				
+				// 通道
+				IPC_ArrayEx.ipc.ip = camera.getIp().getBytes();
+				IPC_ArrayEx.ipc.port = camera.getPort();
+				IPC_ArrayEx.ipc.wChanUsed = wChanUsed;
+				if (streamType == 0) {
+					IPC_ArrayEx.ipc.mediaStream.stream_uri = camera.getStreamUri().getBytes();
+					IPC_ArrayEx.ipc.mediaStream.uri_size = camera.getUriSize();
+				} else {
+					IPC_ArrayEx.ipc.device_addrs = camera.getDeviceAddrs().getBytes();
+				}
+				
+				IPC_ArrayEx.ipc.frameRate = camera.getFrameRate();
+				IPC_ArrayEx.ipc.streamType = streamType;
+				IPC_ArrayEx.ipc.deviceType = 0;
+				//IPC_ArrayEx.ipc.channelID = channel.getChannelID();
+				//IPC_ArrayEx.ipc.manufacterID = IPC_MACHINE_TYPE.ONVIF_AXIS;
+				IPC_ArrayEx.ipc.manufacturer = camera.getManufactername().getBytes();
+				IPC_ArrayEx.ipc.model = camera.getModel().getBytes();
+				
+				// nUser
+				IPC_ArrayEx.nUser = (wChanUsed << 16) + windowId;	// 添加到的通道号与窗口号
+				
+				// 删除通道预览
+				DECV2_PROTO_IPC deletePreview = new DECV2_PROTO_IPC();
+				deletePreview.proHead.master = sdkChannelId;		//输出屏号从0开始
+				deletePreview.proHead.dataLen = IPC_ArrayEx.size();
+				result = NVR9Config.vskDevNet.NS_NET_SetNVRConfig(login_id, new WinDef.UINT(142), new WinDef.LONG(1), 
 						deletePreview.getPointer(), new WinDef.UINT(deletePreview.size()));
-				if (!BooleanUtil.isTrue(result)) {
+				if (BooleanUtil.isTrue(result)) {
+					// 添加通道预览
+					DECV2_PROTO_IPC updatePreview = new DECV2_PROTO_IPC();
+					updatePreview.proHead.master = sdkChannelId;	//输出屏号从0开始
+					updatePreview.proHead.dataLen = IPC_ArrayEx.size();
+					result = NVR9Config.vskDevNet.NS_NET_SetNVRConfig(login_id, new WinDef.UINT(141), new WinDef.LONG(1), 
+							deletePreview.getPointer(), new WinDef.UINT(deletePreview.size()));
+					if (!BooleanUtil.isTrue(result)) {
+						errCode = NVR9Config.getErrCode();
+						log.warn("添加通道预览失败,错误码: " + errCode);
+					}
+				} else {
 					errCode = NVR9Config.getErrCode();
-					log.warn("添加通道预览失败,错误码: " + errCode);
+					log.warn("删除通道预览失败,错误码: " + errCode);
 				}
-			} else {
-				errCode = NVR9Config.getErrCode();
-				log.warn("删除通道预览失败,错误码: " + errCode);
+			} catch (Exception e) {
+				e.printStackTrace();
+				log.error("投屏操作失败", e);
 			}
 			
 			// 退出登录
@@ -334,22 +339,30 @@ public class Nvr9CameraExecuteApi {
 			}
 		}
 		
-		CurShowDevEx curShowDevEx = new CurShowDevEx();
-		Boolean result = this.getCurShowDevExConfig(curShowDevEx, sdkChannelId);
-		if (!BooleanUtil.isTrue(result)) {
-			int errCode = NVR9Config.getErrCode();
-			return this.executeErr(false, errCode + "", "获取解码器当前预览视频信息失败");
+		String message = null;
+		try {
+			CurShowDevEx curShowDevEx = new CurShowDevEx();
+			Boolean result = this.getCurShowDevExConfig(curShowDevEx, sdkChannelId);
+			if (!BooleanUtil.isTrue(result)) {
+				int errCode = NVR9Config.getErrCode();
+				return this.executeErr(false, errCode + "", "获取解码器当前预览视频信息失败");
+			}
+			
+			JSONObject jsonObject = new JSONObject();
+			jsonObject.put("ChlNum", curShowDevEx.ChlNum);
+			jsonObject.put("WindowsNum", curShowDevEx.WindowsNum);
+			
+			IPC_ArrayEx[] arrayExs = curShowDevEx.ChlInfo;
+			JSONArray chlInfos = this.parseIPC_ArrayEx(arrayExs);
+			jsonObject.put("ChlInfo", chlInfos);
+			return this.executeSuccess(true, jsonObject);
+		} catch (Exception e) {
+			message = e.getMessage();
+			e.printStackTrace();
+			log.error("获取解码器当前预览视频信息失败", e);
 		}
 		
-		JSONObject jsonObject = new JSONObject();
-		jsonObject.put("ChlNum", curShowDevEx.ChlNum);
-		jsonObject.put("WindowsNum", curShowDevEx.WindowsNum);
-		
-		IPC_ArrayEx[] arrayExs = curShowDevEx.ChlInfo;
-		JSONArray chlInfos = this.parseIPC_ArrayEx(arrayExs);
-		jsonObject.put("ChlInfo", chlInfos);
-		
-		return this.executeSuccess(true, jsonObject);
+		return this.executeErr(true, "获取解码器当前预览视频信息失败,失败原因:" + message) ;
 	}
 	
 	/**
@@ -428,22 +441,43 @@ public class Nvr9CameraExecuteApi {
 	 * 初始化及登录
 	 */
 	private boolean login(NvrSceneRelation relation) {
-		if (NVR9Config.vskDevNet == null) {
-			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);
-		long userId = login_id == null ? -1L : login_id.longValue();
-		if (userId < 0) {
-			log.warn("登录失败,错误码:{}", NVR9Config.getErrCode());
-			return false;
+		try {
+			if (NVR9Config.vskDevNet == null) {
+				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);
+			long userId = login_id == null ? -1L : login_id.longValue();
+			if (userId < 0) {
+				log.warn("登录失败,错误码:{}", NVR9Config.getErrCode());
+				return false;
+			}
+			
+			return true;
+		} catch (Exception e) {
+			e.printStackTrace();
+			log.error("NVR9 SDK登录失败", e);
 		}
 
-		return true;
+		return false;
+	}
+	
+
+	/**
+	 * 代码执行失败,退出
+	 * 
+	 * @param isLogingout
+	 * @param message
+	 * @return
+	 * @date 2021年11月17日 下午3:06:27
+	 */
+	private ResultClass executeErr(boolean isLogingout, String message) {
+		this.logout(isLogingout);
+		return OtherTools.executeErr(message);
 	}
 	
 	/**
@@ -475,13 +509,16 @@ public class Nvr9CameraExecuteApi {
 	 */
 	private void logout(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 注销失败");
+		if (isLogingout && login_id != null) {
+			try {
+				Boolean logout = NVR9Config.vskDevNet.NS_NET_Logout(this.login_id);
+				if (BooleanUtil.isTrue(logout)) {
+					log.info("NVR9000 SDK 注销成功");
+				}
+			} catch (Exception e) {
+				e.printStackTrace();
 			}
+			log.error("NVR9000 SDK 注销失败");
 		}
 	}