Browse Source

轮询参数设置修正

zhangqiankun 3 years ago
parent
commit
a372b577a6

+ 33 - 0
src/main/java/com/persagy/cameractl/model/Channel.java

@@ -0,0 +1,33 @@
+package com.persagy.cameractl.model;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 
+ * @version 1.0.0
+ * @company persagy 
+ * @author zhangqiankun
+ * @date 2021年10月8日 下午6:10:56
+ */
+@Getter
+@Setter
+public class Channel {
+
+	private String username;
+	private String password;
+	private int wChanUsed;
+	private byte channelID;
+	private String deviceAddrs;
+	private byte streamType;		// 0-主,1-子
+	/** 标示device_addrs数组的实际有效值长度。 */
+	private int addrsSize;
+	private String streamUri;
+	private int uriSize;
+	private String ip;
+	private int port;
+	private byte frameRate = 25;
+	private String qstrmanufactername;
+	private String qstrmodel;
+	
+}

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

@@ -1,21 +1,21 @@
 package com.persagy.cameractl.service.windows;
 
+import java.util.List;
+
 import com.persagy.cameractl.conf.NVR9Config;
+import com.persagy.cameractl.model.Channel;
 import com.persagy.cameractl.utils.Camera;
-import com.persagy.cameractl.utils.CameraLoop;
 import com.persagy.cameractl.utils.OtherTools;
 import com.persagy.cameractl.utils.ResultClass;
 import com.persagy.vsknet.structure.DECV2_PROTO_DecCircleStrateryEx;
 import com.persagy.vsknet.structure.DECV2_PROTO_HEADER_T;
 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.persagy.vsknet.tmp.STREAM_URI;
 import com.sun.jna.platform.win32.WinDef;
 import com.sun.jna.platform.win32.WinDef.DWORD;
 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;
 
@@ -26,8 +26,8 @@ public class NVR9MainWindows {
 	int wait_time = 5000;
 
 	// 摄像头对象
-	Camera _camera;
-
+	Camera tagCircle;
+	
 	// 登录句柄
 	DWORD loginHandler;
 
@@ -37,8 +37,8 @@ public class NVR9MainWindows {
 	// LLong m_hDownLoadHandle = new LLong(0);
 
 	public NVR9MainWindows(Camera cameraI) {
-		this._camera = cameraI;
-	};
+		this.tagCircle = cameraI;
+	}
 
 	/**
 	 * 初始化及登录
@@ -64,85 +64,85 @@ public class NVR9MainWindows {
 	 * 轮巡入口
 	 */
 	public ResultClass lunx() {
-		String layoutCode = _camera.layoutCode;
-		CameraLoop[] cameraLoopArr = _camera.cameraLoopArr;
-		if (layoutCode == null || "".equals(layoutCode) || cameraLoopArr == null || cameraLoopArr.length == 0) {
-			return this.executeErr(false, "非法的参数", "轮巡失败");
-		}
-		// 获取将要使用的布局方式
-		int currLayoutIndex = NVR9Config.layoutNameList.indexOf(layoutCode);
-		if (currLayoutIndex == -1) {
-			return this.executeErr(false, "非法的布局", "轮巡失败");
-		}
-
 		// 初始化
 		ResultClass initResult = this.initAndLoginNVR9();
 		if (!initResult.name) {
 			return this.executeErr(false, null, "初始化失败");
 		}
-
-		// 清屏、开窗操作
-		/**
-		 * String isOpenWindowResult = isOpenWindow(); if
-		 * (!isOpenWindowResult.equals("true")) { return this.executeErr(true,
-		 * isOpenWindowResult, "轮巡时:"); }
-		 */
-
-		for (int x = 0; x < cameraLoopArr.length; x++) {
-			CameraLoop _camerLoop = cameraLoopArr[x];
-
-			DECV2_PROTO_DecCircleStrateryEx DECV2_PROTO_DecCircleStrateryEx = new DECV2_PROTO_DecCircleStrateryEx();
-
-			DECV2_PROTO_HEADER_T proHead = new DECV2_PROTO_HEADER_T();
-			proHead.master = (byte) _camerLoop.windowId;
-
-			DecCircleStrateryEx decStratery = new DecCircleStrateryEx();
-			for (int y = 0; y < _camerLoop.videoSourceArr.length; y++) {
-				int channel = _camerLoop.videoSourceArr[y].channel;
-				int streamType = _camerLoop.videoSourceArr[y].streamType;	// 码流类型 0:主码流 ;	1:子码流 
-				
-				DecCircleTimeEx decCircleTimeEx = new DecCircleTimeEx();
-				decCircleTimeEx.nTimeId = 1;
-				decCircleTimeEx.uistarttime = 100;
-				decCircleTimeEx.uiendtime = 500;
-				decCircleTimeEx.nwinnum = 1;
-				decCircleTimeEx.nchanggeTime = 400;
-
-				IPC_ArrayEx ChlInfo = new IPC_ArrayEx();
-				SERVER_URI ipc = new SERVER_URI();
-				ipc.wChanUsed = 0;
-				ipc.channelID = (byte)channel;
-				ipc.ip = _camerLoop.videoSourceArr[y].cameraIp.getBytes();
-				ipc.port = _camerLoop.videoSourceArr[y].cameraPort;
-				ipc.frameRate = 25;
-				ipc.deviceType = 0;
-				if (streamType == 0) {
+		
+		byte nweek = tagCircle.nweek;
+		int ntimeindex = tagCircle.ntimeindex;
+		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;
 				}
 				
-				AUTHORIZATION Ipclogin = new AUTHORIZATION();
-				Ipclogin.username = _camerLoop.videoSourceArr[y].userName.getBytes();
-				Ipclogin.password = _camerLoop.videoSourceArr[y].password.getBytes();
-
-				ChlInfo.ipc = ipc;
-				ChlInfo.Ipclogin = Ipclogin;
-				ChlInfo.nUser = (channel << 16 | _camerLoop.windowId);
-
-				decCircleTimeEx.ChlInfo[x + y] = ChlInfo;
-				decStratery.DecCircleStrateryChl[x][y] = decCircleTimeEx;
-			}
-
-			DECV2_PROTO_DecCircleStrateryEx.proHead = proHead;
-			DECV2_PROTO_DecCircleStrateryEx.decStratery = decStratery;
+				int nChlNum = channels.size();
+				for (int j = 0; j <nChlNum; j++) {
+					Channel channel = channels.get(j);
+					int channelID = channel.getChannelID();
+					byte streamType = channel.getStreamType();
+
+					// 用户
+					decStratery.DecCircleStrateryChl[i][ntimeindex].ChlInfo[j].Ipclogin.username = channel.getUsername().getBytes();
+					decStratery.DecCircleStrateryChl[i][ntimeindex].ChlInfo[j].Ipclogin.password = channel.getPassword().getBytes();
+					
+					// 通道
+					decStratery.DecCircleStrateryChl[i][ntimeindex].ChlInfo[j].ipc.ip = channel.getIp().getBytes();
+					decStratery.DecCircleStrateryChl[i][ntimeindex].ChlInfo[j].ipc.port = channel.getPort();
+					decStratery.DecCircleStrateryChl[i][ntimeindex].ChlInfo[j].ipc.wChanUsed = channel.getWChanUsed();
+					if (streamType == 0) {
+						STREAM_URI mediaStream = new STREAM_URI();
+						mediaStream.stream_uri = channel.getStreamUri().getBytes();
+						mediaStream.uri_size = channel.getUriSize();
+						decStratery.DecCircleStrateryChl[i][ntimeindex].ChlInfo[j].ipc.mediaStream = mediaStream;
+					} else {
+						decStratery.DecCircleStrateryChl[i][ntimeindex].ChlInfo[j].ipc.device_addrs = channel.getDeviceAddrs().getBytes();
+					}
+					
+					decStratery.DecCircleStrateryChl[i][ntimeindex].ChlInfo[j].ipc.frameRate = channel.getFrameRate();
+					decStratery.DecCircleStrateryChl[i][ntimeindex].ChlInfo[j].ipc.streamType = streamType;
+					decStratery.DecCircleStrateryChl[i][ntimeindex].ChlInfo[j].ipc.deviceType = 0;
+					decStratery.DecCircleStrateryChl[i][ntimeindex].ChlInfo[j].ipc.channelID = channel.getChannelID();
+					decStratery.DecCircleStrateryChl[i][ntimeindex].ChlInfo[j].ipc.manufacturer = channel.getQstrmanufactername().getBytes();
+					decStratery.DecCircleStrateryChl[i][ntimeindex].ChlInfo[j].ipc.model = channel.getQstrmodel().getBytes();
+					
+					// nUser
+					decStratery.DecCircleStrateryChl[i][ntimeindex].ChlInfo[j].nUser = (channelID << 16 | 0);
+				}
 
-			// 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 + ",窗口号:" + _camerLoop.windowId, "");
+				decStratery.DecCircleStrateryChl[i][ntimeindex].nchanggeTime = tagCircle.nchanggeTime;
+				decStratery.DecCircleStrateryChl[i][ntimeindex].nChlNum = nChlNum;
+				decStratery.DecCircleStrateryChl[i][ntimeindex].nTimeId = ntimeindex;
+				decStratery.DecCircleStrateryChl[i][ntimeindex].nwinnum = tagCircle.nwndnumber;
+				decStratery.DecCircleStrateryChl[i][ntimeindex].uistarttime = tagCircle.ulstarttime;
+				decStratery.DecCircleStrateryChl[i][ntimeindex].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);
 	}
 

+ 27 - 0
src/main/java/com/persagy/cameractl/utils/Camera.java

@@ -1,5 +1,9 @@
 package com.persagy.cameractl.utils;
 
+import java.util.List;
+
+import com.persagy.cameractl.model.Channel;
+
 /**
  * 摄像头对象
  * */
@@ -79,5 +83,28 @@ public class Camera {
 	public int isUseCustomCall=0;
 	
 	public CameraLoop[] cameraLoopArr;
+	
+	/** 轮巡时间 */
+	public int nchanggeTime;
+	
+	/** 时间段ID,取值 1,2,3 */
+	public int ntimeindex;
+	
+	/** 星期,从星期日开始0-6,全部为7 */
+	public byte nweek;
+
+	/** 窗口分割数量 */
+	public int nwndnumber;
+	
+	/** 开始时间,距离:00:00 的秒数。 */
+	public int ulstarttime;
+	
+	/** 结束时间距离:00:00 的秒数。 */
+	public int ulendtime;
+	
+	/** 输出屏号 */
+	public byte noutputscreenno;
+	
+	public List<Channel> channels;
 
 }