|
@@ -10,16 +10,17 @@ import java.util.Timer;
|
|
|
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.web.bind.annotation.PathVariable;
|
|
|
import org.springframework.web.bind.annotation.RequestBody;
|
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
import org.springframework.web.bind.annotation.RequestMethod;
|
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
|
|
|
-import com.persagy.cameractl.conf.CameraApiConfig;
|
|
|
+import com.persagy.cameractl.conf.CameraStream;
|
|
|
import com.persagy.cameractl.cvr.HCNetSDK.NET_DVR_USER_LOGIN_INFO;
|
|
|
import com.persagy.cameractl.cvr.HCNetSDK.NET_DVR_VOD_PARA;
|
|
|
+import com.persagy.cameractl.init.StreamInfoInit;
|
|
|
+import com.persagy.cameractl.init.SystemInit;
|
|
|
import com.persagy.cameractl.utils.Camera;
|
|
|
import com.persagy.cameractl.utils.OtherTools;
|
|
|
import com.persagy.cameractl.utils.ResultClass;
|
|
@@ -27,6 +28,7 @@ import com.sun.jna.Pointer;
|
|
|
import com.sun.jna.ptr.IntByReference;
|
|
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
|
|
|
/**
|
|
|
*
|
|
@@ -39,20 +41,27 @@ import cn.hutool.core.date.DateUtil;
|
|
|
public class PlayBackController {
|
|
|
public static Logger logger = LoggerFactory.getLogger(PlayBackController.class);
|
|
|
|
|
|
- public static volatile HCNetSDK hCNetSDK;
|
|
|
-
|
|
|
- private volatile boolean isInit = false;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private CameraApiConfig cameraApiConfig;
|
|
|
-
|
|
|
@RequestMapping(value = "/playback/{operType}", method = RequestMethod.POST)
|
|
|
public ResultClass play(@RequestBody Camera camera, @PathVariable("operType") String operType) throws Exception {
|
|
|
ResultClass returnResult = new ResultClass();
|
|
|
returnResult.name = false;
|
|
|
|
|
|
+ // 验证是否需要走配置
|
|
|
+ if (StrUtil.isBlank(camera.streamId)) {
|
|
|
+ CameraStream stream = StreamInfoInit.CAMERA_2_STREAM.get(camera.cameraIndexCode);
|
|
|
+ if (stream == null) {
|
|
|
+ returnResult.reason = "不存在此设备的配置信息";
|
|
|
+ return returnResult;
|
|
|
+ }
|
|
|
+ camera.cameraIp = stream.getCvrIp();
|
|
|
+ camera.cameraPort = stream.getCvrPort();
|
|
|
+ camera.userName = stream.getUsername();
|
|
|
+ camera.password = stream.getPassword();
|
|
|
+ camera.streamId = stream.getStreamId();
|
|
|
+ }
|
|
|
+
|
|
|
// SDK初始化
|
|
|
- boolean init = this.init();
|
|
|
+ boolean init = SystemInit.init();
|
|
|
if (!init) {
|
|
|
returnResult.reason = "SDK初始化失败";
|
|
|
return returnResult;
|
|
@@ -60,10 +69,10 @@ public class PlayBackController {
|
|
|
|
|
|
//登录设备,每一台设备分别登录; 登录句柄是唯一的,可以区分设备
|
|
|
HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();//设备信息
|
|
|
- NET_DVR_USER_LOGIN_INFO m_strLoginInfo = this.getLoginObject(cameraApiConfig.getDecodeDeviceUserName(), cameraApiConfig.getDecodeDevicePassword(), cameraApiConfig.getDecodeDeviceIp(), (short)cameraApiConfig.getDecodeDevicePort());
|
|
|
- int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
|
|
|
+ NET_DVR_USER_LOGIN_INFO m_strLoginInfo = SystemInit.getLoginObject(camera.userName, camera.password, camera.cameraIp, (short)camera.cameraPort);
|
|
|
+ int lUserID = SystemInit.hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
|
|
|
if (lUserID == -1) {
|
|
|
- int errCode = hCNetSDK.NET_DVR_GetLastError();
|
|
|
+ int errCode = SystemInit.hCNetSDK.NET_DVR_GetLastError();
|
|
|
returnResult.reason = "设备注册失败,失败码: " + errCode;
|
|
|
return returnResult;
|
|
|
}
|
|
@@ -86,7 +95,7 @@ public class PlayBackController {
|
|
|
}
|
|
|
|
|
|
//退出程序时调用,每一台设备分别注销
|
|
|
- if (hCNetSDK.NET_DVR_Logout(lUserID)) {
|
|
|
+ if (SystemInit.hCNetSDK.NET_DVR_Logout(lUserID)) {
|
|
|
logger.info("logout success");
|
|
|
}
|
|
|
|
|
@@ -114,16 +123,16 @@ public class PlayBackController {
|
|
|
*/
|
|
|
public String playBackBytime(File file, String startParam, String endParam, int userID, String streamId) throws IOException {
|
|
|
NET_DVR_VOD_PARA net_dvr_vod_para = getPlayBackHkTime(startParam, endParam, streamId);
|
|
|
- int iPlayBack = hCNetSDK.NET_DVR_PlayBackByTime_V40(userID, net_dvr_vod_para);
|
|
|
+ int iPlayBack = SystemInit.hCNetSDK.NET_DVR_PlayBackByTime_V40(userID, net_dvr_vod_para);
|
|
|
if (iPlayBack <= -1) {
|
|
|
- logger.warn("playback failure, errorCode: " + hCNetSDK.NET_DVR_GetLastError());
|
|
|
- return "取流失败,失败码: " + hCNetSDK.NET_DVR_GetLastError();
|
|
|
+ logger.warn("playback failure, errorCode: " + SystemInit.hCNetSDK.NET_DVR_GetLastError());
|
|
|
+ return "取流失败,失败码: " + SystemInit.hCNetSDK.NET_DVR_GetLastError();
|
|
|
}
|
|
|
|
|
|
// 开启取流
|
|
|
- if (!hCNetSDK.NET_DVR_PlayBackControl_V40(iPlayBack, HCNetSDK.NET_DVR_PLAYSTART, null, 0, null, new IntByReference(0))) {
|
|
|
- logger.warn("NET_DVR_PlayBackControl_V40 failure, errorCode: " + hCNetSDK.NET_DVR_GetLastError());
|
|
|
- return "取流失败,失败码: " + hCNetSDK.NET_DVR_GetLastError();
|
|
|
+ if (!SystemInit.hCNetSDK.NET_DVR_PlayBackControl_V40(iPlayBack, HCNetSDK.NET_DVR_PLAYSTART, null, 0, null, new IntByReference(0))) {
|
|
|
+ logger.warn("NET_DVR_PlayBackControl_V40 failure, errorCode: " + SystemInit.hCNetSDK.NET_DVR_GetLastError());
|
|
|
+ return "取流失败,失败码: " + SystemInit.hCNetSDK.NET_DVR_GetLastError();
|
|
|
}
|
|
|
|
|
|
// 保存回调函数的音频数据
|
|
@@ -131,7 +140,7 @@ public class PlayBackController {
|
|
|
|
|
|
// 设置回放回调函数
|
|
|
PlayDataCallBack playBackCallBack = new PlayDataCallBack(outputStream);
|
|
|
- hCNetSDK.NET_DVR_SetPlayDataCallBack_V40(iPlayBack, playBackCallBack, Pointer.NULL);
|
|
|
+ SystemInit.hCNetSDK.NET_DVR_SetPlayDataCallBack_V40(iPlayBack, playBackCallBack, Pointer.NULL);
|
|
|
|
|
|
// 开始计时器
|
|
|
Timer playbacktimer = new Timer();// 新建定时器
|
|
@@ -149,7 +158,7 @@ public class PlayBackController {
|
|
|
|
|
|
// 如果还没有释放回放资源,需要调用NET_DVR_StopPlayBack释放
|
|
|
if (iPlayBack > 0) {
|
|
|
- hCNetSDK.NET_DVR_StopPlayBack(iPlayBack);
|
|
|
+ SystemInit.hCNetSDK.NET_DVR_StopPlayBack(iPlayBack);
|
|
|
iPlayBack = -1;
|
|
|
}
|
|
|
|
|
@@ -157,49 +166,6 @@ public class PlayBackController {
|
|
|
return "true";
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 获取登录对象
|
|
|
- *
|
|
|
- * @param m_sUsername
|
|
|
- * @param m_sPassword
|
|
|
- * @param m_sDeviceIP
|
|
|
- * @param wPort
|
|
|
- * @return
|
|
|
- * @date 2022年6月23日 下午1:21:08
|
|
|
- */
|
|
|
- private HCNetSDK.NET_DVR_USER_LOGIN_INFO getLoginObject(String m_sUsername, String m_sPassword, String m_sDeviceIP, short wPort) {
|
|
|
- HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();//设备登录信息
|
|
|
-
|
|
|
- m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN];
|
|
|
- System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length());
|
|
|
-
|
|
|
- m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN];
|
|
|
- System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length());
|
|
|
-
|
|
|
- m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN];
|
|
|
- System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length());
|
|
|
-
|
|
|
- m_strLoginInfo.wPort = wPort; //SDK端口
|
|
|
- m_strLoginInfo.bUseAsynLogin = false; //是否异步登录:0- 否,1- 是
|
|
|
- m_strLoginInfo.write();
|
|
|
-
|
|
|
- return m_strLoginInfo;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 初始化SDK
|
|
|
- *
|
|
|
- * @return
|
|
|
- */
|
|
|
- private boolean init() {
|
|
|
- if (!isInit) {
|
|
|
- // 初始化
|
|
|
- hCNetSDK = HCNetSDK.INSTANCE;
|
|
|
- isInit = hCNetSDK.NET_DVR_Init();
|
|
|
- }
|
|
|
- return isInit;
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 获取海康录像机格式的时间
|
|
|
*
|