Browse Source

新增视频监控

master
刘力 2 years ago
parent
commit
0bcc363fbf
  1. 59
      storeroom/src/main/java/com/storeroom/modules/device/domain/DeviceCamerBind.java
  2. 8
      storeroom/src/main/java/com/storeroom/modules/device/repository/DeviceCamerBindRepository.java
  3. 143
      storeroom/src/main/java/com/storeroom/modules/storeroom3d/config/common/VideoClient.java
  4. 12
      storeroom/src/main/java/com/storeroom/modules/storeroom3d/service/DeviceCamerBindService.java
  5. 22
      storeroom/src/main/java/com/storeroom/modules/storeroom3d/service/impl/DeviceCamerBindImpl.java

59
storeroom/src/main/java/com/storeroom/modules/device/domain/DeviceCamerBind.java

@ -0,0 +1,59 @@
package com.storeroom.modules.device.domain;
import com.storeroom.base.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Objects;
@Entity
@Getter
@Setter
public class DeviceCamerBind extends BaseEntity implements Serializable {
@Id
@Column(name = "id")
@NotNull(groups = Update.class)
@ApiModelProperty(value = "ID", hidden = true)
private String id;
@Column(name = "device_info_id")
@ApiModelProperty(value = "设备信息id")
private String deviceInfoId;
@Column(name = "storeroom_name")
@ApiModelProperty(value = "库房名称")
private String StoreroomName;
@Column(name = "camera_id")
@ApiModelProperty(value = "摄像头id")
private String cameraId;
@Column(name = "time_size")
@ApiModelProperty(value = "视频时长")
private String timeSize;
@Column(name = "bind_state")
@ApiModelProperty(value = "绑定状态")
private Integer bindState;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
DeviceCamerBind that = (DeviceCamerBind) o;
return Objects.equals(id, that.id) && Objects.equals(deviceInfoId, that.deviceInfoId) && Objects.equals(cameraId, that.cameraId);
}
@Override
public int hashCode() {
return Objects.hash(id, deviceInfoId, cameraId);
}
}

8
storeroom/src/main/java/com/storeroom/modules/device/repository/DeviceCamerBindRepository.java

@ -0,0 +1,8 @@
package com.storeroom.modules.device.repository;
import com.storeroom.modules.device.domain.DeviceCamerBind;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
public interface DeviceCamerBindRepository extends JpaRepository<DeviceCamerBind,String> , JpaSpecificationExecutor<DeviceCamerBind> {
}

143
storeroom/src/main/java/com/storeroom/modules/storeroom3d/config/common/VideoClient.java

@ -1,16 +1,23 @@
package com.storeroom.modules.storeroom3d.config.common;
import com.storeroom.modules.storeroom3d.config.common.NVSSDK.DOWNLOAD_TIMESPAN;
import com.storeroom.modules.storeroom3d.config.common.NVSSDK.RAWFRAME_INFO;
import com.storeroom.modules.storeroom3d.config.common.NVSSDK.RAWFRAME_NOTIFY;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class VideoClient {
int m_iLogonID = -1;
int m_iConnectID = -1;
int m_iTotalCount = 0;
int m_iCurrentCount = 0;
String[] suffix = {".sdv", "", "", ".ps", "", "", ".ts"};
String[] suffix = {".sdv", ".mp4", "", ".ps", "", "", ".ts"};
public void LogonNotify(String strIP, String strID, int iLogonID, int iLogonState) {
String strMsg = new String();
@ -47,7 +54,7 @@ public class VideoClient {
+ "),ID(" + strID + "),LogonID(" + iLogonID + ")");
}
;
NVSSDK.ALARM_NOTIFY cbkAlarm = new NVSSDK.ALARM_NOTIFY() {
public void AlarmNotify(int _iLogonID, int _iChannel,
@ -170,15 +177,15 @@ public class VideoClient {
VideoClient tPlayback = new VideoClient();
tPlayback.SDKInit(); //初始化SDK
// Scanner scanInput = new Scanner(System.in);
System.out.println("Logon" + strIP + ":" + iPort + "-" +strUserName + "-" + strUserPwd);
// Scanner scanInput = new Scanner(System.in);
System.out.println("Logon" + strIP + ":" + iPort + "-" + strUserName + "-" + strUserPwd);
while (true) {
m_iLogonID = NetClient.Logon("", strIP, strUserName, strUserPwd, "", iPort);
int iLogonStatus = NetClient.GetLogonStatus(m_iLogonID);
if (iLogonStatus == NVSSDK.LOGON_SUCCESS) {
break;
}
tPlayback.PlaybackByTimespanMode();
try {
Thread.currentThread();
Thread.sleep(1000);
@ -189,4 +196,130 @@ public class VideoClient {
return 0;
}
RAWFRAME_NOTIFY cbkRawFrame = new RAWFRAME_NOTIFY() {
public void rawFrameNotify(int _uiID, Pointer _pcData, int _iLen, RAWFRAME_INFO _ptRawFrameInfo, Pointer _lpUserData) {
//打印数据信息
System.out.println("recvRawData: _uiID=" + _uiID + ", _iLen=" + _iLen + ", nType=" + _ptRawFrameInfo.nType);
//上层可保存处理裸流数据
if (null != _pcData && 0 != _iLen) {
SaveRawData(_ptRawFrameInfo.nType, _pcData, _iLen);
}
}
};
public int SaveRawData(int type, Pointer data, int len) {
FileOutputStream fopRawVideo = null;
File fileRawVideo;
FileOutputStream fopRawAudio = null;
File fileRawAudio;
try {
if (null == fopRawVideo) {
fileRawVideo = new File("myVideoRawData.raw");
fopRawVideo = new FileOutputStream(fileRawVideo, true);
// if file doesnt exists, then create it
if (!fileRawVideo.exists()) {
fileRawVideo.createNewFile();
}
}
if (null == fopRawAudio) {
fileRawAudio = new File("myAudioRawData.raw");
fopRawAudio = new FileOutputStream(fileRawAudio, true);
// if file doesnt exists, then create it
if (!fileRawAudio.exists()) {
fileRawAudio.createNewFile();
}
}
// get the content in bytes
byte[] contentInBytes = data.getByteArray(0, len);
if (NVSSDK.AUDIO_FRAME == type) {
//保存原始流音频数据
fopRawAudio.write(contentInBytes);
fopRawAudio.flush();
fopRawAudio.close();
} else {
//保存原始流视频数据
fopRawVideo.write(contentInBytes);
fopRawVideo.flush();
fopRawVideo.close();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (null != fopRawVideo) {
fopRawVideo.close();
fopRawVideo = null;
}
if (null != fopRawAudio) {
fopRawAudio.close();
fopRawAudio = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
return 0;
}
public int PlaybackByTimespanMode() {
DOWNLOAD_TIMESPAN tDownloadTimeSpan = new DOWNLOAD_TIMESPAN();
tDownloadTimeSpan.m_iSize = tDownloadTimeSpan.size();
//Scanner scanInput = new Scanner(System.in);
System.out.print("请输入录像文件类型(sdv=0;PS=3;TS=6):");
int iSaveFileType = 1; //scanInput.nextInt();
tDownloadTimeSpan.m_iSaveFileType = iSaveFileType;
tDownloadTimeSpan.m_iFileFlag = 0; //0:Download multiple files 1:Download into a single file
String strLocalSaveFileName = new String("myTimespanDownload" + suffix[iSaveFileType]);
tDownloadTimeSpan.m_cLocalFilename = strLocalSaveFileName.getBytes();
tDownloadTimeSpan.m_iChannelNO = 0; //通道号按实际下载的设备通道号赋值
tDownloadTimeSpan.m_iStreamNo = 0; //码流号0-主码流1-副码流
//按时间段下载开始时间
tDownloadTimeSpan.m_tTimeBegin.iYear = 2022;
tDownloadTimeSpan.m_tTimeBegin.iMonth = 8;
tDownloadTimeSpan.m_tTimeBegin.iDay = 24;
tDownloadTimeSpan.m_tTimeBegin.iHour = 0;
tDownloadTimeSpan.m_tTimeBegin.iMinute = 0;
tDownloadTimeSpan.m_tTimeBegin.iSecond = 0;
//按时间段下载结束时间
tDownloadTimeSpan.m_tTimeEnd.iYear = 2022;
tDownloadTimeSpan.m_tTimeEnd.iMonth = 8;
tDownloadTimeSpan.m_tTimeEnd.iDay = 24;
tDownloadTimeSpan.m_tTimeEnd.iHour = 0;
tDownloadTimeSpan.m_tTimeEnd.iMinute = 5;
tDownloadTimeSpan.m_tTimeEnd.iSecond = 0;
tDownloadTimeSpan.m_iPosition = -1; //定位功能使用
tDownloadTimeSpan.m_iSpeed = 32; //下载速度最大32老设备按最大速度下载容易出现中断因此下载成功后可将速度调成16倍速
tDownloadTimeSpan.m_iReqMode = 1; //1:down frame mode,0= Flow pattern; if (mode == 0) Device do not send download time !
tDownloadTimeSpan.write();
IntByReference iConnID = new IntByReference();
int iRet = NetClient.NetFileDownload(iConnID, m_iLogonID, NVSSDK.DOWNLOAD_CMD_TIMESPAN, tDownloadTimeSpan.getPointer(), tDownloadTimeSpan.size());
if (0 == iRet) {
//设置裸流回调在回调里接收音视频裸流数据
m_iConnectID = iConnID.getValue();
NetClient.SetRawFrameCallBack(m_iConnectID, cbkRawFrame, null);
//调整速度
NVSSDK.DOWNLOAD_CONTROL tControl = new NVSSDK.DOWNLOAD_CONTROL();
tControl.m_iSize = tControl.size();
tControl.m_iPosition = -1;
tControl.m_iSpeed = 16;
tControl.m_iReqMode = 1;
tControl.write();
NetClient.NetFileDownload(iConnID, m_iLogonID, NVSSDK.DOWNLOAD_CMD_CONTROL, tControl.getPointer(), tControl.size());
} else {
System.err.println("NetFileDownload:DOWNLOAD_CMD_TIMESPAN fail! iRet=" + iRet);
}
return iRet;
}
}

12
storeroom/src/main/java/com/storeroom/modules/storeroom3d/service/DeviceCamerBindService.java

@ -0,0 +1,12 @@
package com.storeroom.modules.storeroom3d.service;
import com.storeroom.modules.device.domain.DeviceCamerBind;
public interface DeviceCamerBindService {
/**
* 设备摄像头绑定
*/
void bind(DeviceCamerBind deviceCamerBind);
}

22
storeroom/src/main/java/com/storeroom/modules/storeroom3d/service/impl/DeviceCamerBindImpl.java

@ -0,0 +1,22 @@
package com.storeroom.modules.storeroom3d.service.impl;
import com.storeroom.modules.device.domain.DeviceCamerBind;
import com.storeroom.modules.device.repository.DeviceCamerBindRepository;
import com.storeroom.modules.storeroom3d.service.DeviceCamerBindService;
import com.storeroom.utils.NanoIdUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class DeviceCamerBindImpl implements DeviceCamerBindService {
private final DeviceCamerBindRepository deviceCamerBindRepository;
@Override
public void bind(DeviceCamerBind deviceCamerBind) {
deviceCamerBind.setId(NanoIdUtils.randomNanoId());
deviceCamerBindRepository.save(deviceCamerBind);
}
}
Loading…
Cancel
Save