|
@@ -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);
|
|
|
}
|
|
|
|