package com.whyc.hik;
|
|
import com.sun.jna.NativeLong;
|
import com.sun.jna.Pointer;
|
import com.sun.jna.ptr.IntByReference;
|
import com.whyc.hik.NetSDKDemo.HCNetSDK;
|
|
import java.io.File;
|
import java.io.FileOutputStream;
|
import java.io.IOException;
|
import java.io.UnsupportedEncodingException;
|
import java.text.SimpleDateFormat;
|
import java.util.Date;
|
|
import static com.whyc.hik.TestDemo.hCNetSDK;
|
|
/**
|
* 通道参数配置
|
* @Author: jiangxin14
|
* @Date: 2024-08-26 09:46
|
*/
|
public class ChannelParamCfg {
|
|
|
/**
|
* 获取与设置设备图像参数
|
* @param iUserID
|
*/
|
//获取设备的图像参数-移动侦测高亮显示
|
public static void GetandSetPicCfg(int iUserID) {
|
HCNetSDK.NET_DVR_PICCFG_V40 strPicCfg = new HCNetSDK.NET_DVR_PICCFG_V40();
|
strPicCfg.dwSize = strPicCfg.size();
|
Pointer pStrPicCfg = strPicCfg.getPointer();
|
NativeLong lChannel = new NativeLong(1);
|
IntByReference pInt = new IntByReference(0);
|
boolean b_GetPicCfg = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_PICCFG_V40, lChannel.intValue(),
|
pStrPicCfg, strPicCfg.size(), pInt);
|
if (b_GetPicCfg == false) {
|
System.out.println("获取图像参数失败,错误码:" + hCNetSDK.NET_DVR_GetLastError());
|
}
|
strPicCfg.read();
|
System.out.println("通道号:" + lChannel );
|
System.out.println("预览的图像是否显示OSD:" + strPicCfg.dwShowOsd);
|
System.out.println("移动侦测高亮显示是否开启:"+strPicCfg.struMotion.byEnableDisplay);
|
strPicCfg.read();
|
|
//直接把获取到的参数设置回去,如果有需要可以自行修改其中需要修改的字段
|
boolean b_SetPicCfg = hCNetSDK.NET_DVR_SetDVRConfig(iUserID, HCNetSDK.NET_DVR_SET_PICCFG_V40,lChannel.intValue(),
|
pStrPicCfg, strPicCfg.size());
|
if (b_SetPicCfg == false) {
|
System.out.println("设置图像参数移动侦测高亮参数失败,错误码:" + hCNetSDK.NET_DVR_GetLastError());
|
}
|
else {
|
System.out.println("设置移动侦测高亮参数成功");
|
|
}
|
}
|
|
/**
|
* 球机PTZ参数获取设置
|
* @param iUserID
|
*/
|
|
public static void SetPTZcfg(int iUserID) {
|
HCNetSDK.NET_DVR_PTZPOS struPtTZPos = new HCNetSDK.NET_DVR_PTZPOS();
|
IntByReference pUsers = new IntByReference(1);
|
boolean b_GetPTZ = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_PTZPOS, 1, struPtTZPos.getPointer(), struPtTZPos.size(), pUsers);
|
if (b_GetPTZ == false) {
|
System.out.println("获取PTZ坐标信息失败,错误码:" + hCNetSDK.NET_DVR_GetLastError());
|
} else {
|
struPtTZPos.read();
|
int wPanPos = Integer.parseInt(Integer.toHexString(struPtTZPos.wPanPos).trim());
|
float WPanPos = wPanPos * 0.1f;
|
int wTiltPos = Integer.parseInt(Integer.toHexString(struPtTZPos.wTiltPos).trim());
|
float WTiltPos = wTiltPos * 0.1f;
|
int wZoomPos = Integer.parseInt(Integer.toHexString(struPtTZPos.wZoomPos).trim());
|
float WZoomPos = wZoomPos * 0.1f;
|
System.out.println("P参数:" + WPanPos + "\n");
|
System.out.println("T参数:" + wTiltPos + "\n");
|
System.out.println("Z参数:" + wZoomPos + "\n");
|
}
|
// struPtTZPos.wAction = 2;
|
//本结构体中的wAction参数是设置时的操作类型,因此获取时该参数无效。实际显示的PTZ值是获取到的十六进制值的十分之一,
|
// 如获取的水平参数P的值是0x1750,实际显示的P值为175度;获取到的垂直参数T的值是0x0789,实际显示的T值为78.9度,如果T未负值,获取的值减去360
|
// 获取到的变倍参数Z的值是0x1100,实际显示的Z值为110倍。
|
// String pHex="13669";
|
// int pInter=Integer.parseInt(pHex);
|
// short pInter = 13669;
|
// System.out.println(pInter);
|
// struPtTZPos.wPanPos = (short) pInter;
|
// struPtTZPos.write();
|
// boolean b_SetPTZ = hCNetSDK.NET_DVR_SetDVRConfig(iUserID, HCNetSDK.NET_DVR_SET_PTZPOS, 1, struPtTZPos.getPointer(), struPtTZPos.size());
|
// if (b_GetPTZ == false) {
|
// System.out.println("设置PTZ坐标信息失败,错误码:" + hCNetSDK.NET_DVR_GetLastError());
|
// } else {
|
//
|
// System.out.println("设置PTZ成功");
|
// }
|
|
}
|
|
/**
|
* 设置云台锁定信息
|
* @param iUserID
|
*/
|
public static void SetPTZLOCKCFG(int iUserID) {
|
HCNetSDK.NET_DVR_PTZ_LOCKCFG struPtzLockCfg =new HCNetSDK.NET_DVR_PTZ_LOCKCFG();
|
struPtzLockCfg.dwSize =struPtzLockCfg.size();
|
Pointer pStrPtzLockCfg = struPtzLockCfg.getPointer();
|
NativeLong lChannel = new NativeLong(1);
|
IntByReference pInt = new IntByReference(0);
|
boolean b_GetPtzLockCfg = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_PTZLOCKCFG, lChannel.intValue(),
|
pStrPtzLockCfg, struPtzLockCfg.size(), pInt);
|
if (b_GetPtzLockCfg == false) {
|
System.out.println("获取云台锁定信息失败,错误码:" + hCNetSDK.NET_DVR_GetLastError());
|
}
|
struPtzLockCfg.read();
|
System.out.println("通道号:" + lChannel );
|
System.out.println("云台锁定控制状态为:" + struPtzLockCfg.byWorkMode);
|
|
struPtzLockCfg.read();
|
struPtzLockCfg.byWorkMode= 1; //0- 解锁,1- 锁定
|
struPtzLockCfg.write();
|
boolean b_SetPtzLockCfg = hCNetSDK.NET_DVR_SetDVRConfig(iUserID, HCNetSDK.NET_DVR_SET_PTZLOCKCFG,lChannel.intValue(),
|
pStrPtzLockCfg, struPtzLockCfg.size());
|
if (b_SetPtzLockCfg== false) {
|
System.out.println("设置云台锁定信息失败,错误码:" + hCNetSDK.NET_DVR_GetLastError());
|
}
|
else {
|
System.out.println("设置云台锁定信息成功");
|
System.out.println("云台锁定控制状态当前为:" + struPtzLockCfg.byWorkMode);
|
}
|
}
|
|
// public static void PTZControlOther(int iUserID){
|
// boolean b_ptzcontrol=hCNetSDK.NET_DVR_PTZControl_Other(iUserID,1,HCNetSDK.TILT_UP,0);
|
//
|
// if( b_ptzcontrol==false){
|
// System.out.println("云台向上转动失败,错误码:" + hCNetSDK.NET_DVR_GetLastError());
|
// }else{
|
// System.out.println("设置向上转动成功");
|
// }
|
|
// }
|
|
/**
|
* 获取(设置)前端参数(扩展)
|
* @param iUserID
|
*/
|
public static void GetCameraPara(int iUserID) {
|
HCNetSDK.NET_DVR_CAMERAPARAMCFG_EX struCameraParam = new HCNetSDK.NET_DVR_CAMERAPARAMCFG_EX();
|
Pointer pstruCameraParam = struCameraParam.getPointer();
|
IntByReference ibrBytesReturned = new IntByReference(0);
|
boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_CCDPARAMCFG_EX, 1, pstruCameraParam, struCameraParam.size(), ibrBytesReturned);
|
if (!b_GetCameraParam) {
|
System.out.println("获取前端参数失败,错误码:" + hCNetSDK.NET_DVR_GetLastError());
|
}
|
struCameraParam.read();
|
System.out.println("是否开启旋转:" + struCameraParam.struCorridorMode.byEnableCorridorMode);
|
|
//直接把获取到的参数设置回去,如果有需要可以自行修改其中需要修改的字段
|
boolean b_SetCameraParam = hCNetSDK.NET_DVR_SetDVRConfig(iUserID, HCNetSDK.NET_DVR_SET_CCDPARAMCFG_EX, 1, pstruCameraParam, struCameraParam.size());
|
if (!b_SetCameraParam) {
|
System.out.println("设置前端参数失败,错误码:" + hCNetSDK.NET_DVR_GetLastError());
|
}
|
struCameraParam.read();
|
System.out.println("设置成功");
|
}
|
|
|
|
//获取和设置网络参数
|
public static void GetNetCfg(int iUserID) {
|
HCNetSDK.NET_DVR_NETCFG_V50 struNetCfg = new HCNetSDK.NET_DVR_NETCFG_V50();
|
Pointer pstruNetCfg = struNetCfg.getPointer();
|
IntByReference ibrBytesReturned = new IntByReference(0);
|
boolean b_GetNetCfg = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_NETCFG_V50, 1, pstruNetCfg, struNetCfg.size(), ibrBytesReturned);
|
if (!b_GetNetCfg) {
|
System.out.println("获取网络参数失败,错误码:" + hCNetSDK.NET_DVR_GetLastError());
|
}
|
struNetCfg.read();
|
System.out.println("是否启用DHCP:" + struNetCfg.byUseDhcp);
|
|
//直接把获取到的参数设置回去,如果有需要可以自行修改其中需要修改的字段
|
boolean b_SetNetCfg = hCNetSDK.NET_DVR_SetDVRConfig(iUserID, HCNetSDK.NET_DVR_SET_NETCFG_V50, 1, pstruNetCfg, struNetCfg.size());
|
if (!b_SetNetCfg) {
|
System.out.println("设置网络参数失败,错误码:" + hCNetSDK.NET_DVR_GetLastError());
|
}
|
struNetCfg.read();
|
System.out.println("设置成功");
|
}
|
|
|
|
//获取和设置录像计划
|
public static void GetRecordCfg(int iUserID){
|
HCNetSDK.NET_DVR_RECORD_V40 struRecordCfg = new HCNetSDK.NET_DVR_RECORD_V40();
|
Pointer pstruRecordCfg = struRecordCfg.getPointer();
|
|
//System.out.println("指针为:"+pstruRecordCfg);
|
IntByReference ibrBytesReturned = new IntByReference(1);
|
boolean b_GetRecordCfg = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_RECORDCFG_V40, 1, pstruRecordCfg, struRecordCfg.size(), ibrBytesReturned);
|
if (!b_GetRecordCfg) {
|
System.out.println("获取录像计划失败,错误码:" + hCNetSDK.NET_DVR_GetLastError());
|
}
|
struRecordCfg.read();
|
System.out.println("码流类型:" + struRecordCfg.byStreamType);
|
|
//直接把获取到的参数设置回去,如果有需要可以自行修改其中需要修改的字段
|
boolean b_SetRecordCfg = hCNetSDK.NET_DVR_SetDVRConfig(iUserID, HCNetSDK.NET_DVR_SET_RECORDCFG_V40, 1, pstruRecordCfg, struRecordCfg.size());
|
if (!b_SetRecordCfg) {
|
System.out.println("设置录像计划失败,错误码:" + hCNetSDK.NET_DVR_GetLastError());
|
}
|
struRecordCfg.read();
|
System.out.println("设置成功");
|
|
}
|
|
|
|
/**
|
* 获取快球聚焦模式信息。
|
* @param iUserID
|
*/
|
public static void GetFocusMode(int iUserID) {
|
HCNetSDK.NET_DVR_FOCUSMODE_CFG struFocusMode = new HCNetSDK.NET_DVR_FOCUSMODE_CFG();
|
struFocusMode.read();
|
struFocusMode.dwSize = struFocusMode.size();
|
struFocusMode.write();
|
Pointer pFocusMode = struFocusMode.getPointer();
|
IntByReference ibrBytesReturned = new IntByReference(0);
|
boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_FOCUSMODECFG, 1, pFocusMode, struFocusMode.size(), ibrBytesReturned);
|
if (!b_GetCameraParam) {
|
System.out.println("获取快球聚焦模式失败,错误码:" + hCNetSDK.NET_DVR_GetLastError());
|
}
|
struFocusMode.read();
|
System.out.println("聚焦模式:" + struFocusMode.byFocusMode);
|
struFocusMode.byFocusMode = 1;
|
struFocusMode.byFocusDefinitionDisplay = 1;
|
struFocusMode.byFocusSpeedLevel = 3;
|
struFocusMode.write();
|
boolean b_SetCameraParam = hCNetSDK.NET_DVR_SetDVRConfig(iUserID, HCNetSDK.NET_DVR_SET_FOCUSMODECFG, 1, pFocusMode, struFocusMode.size());
|
if (!b_SetCameraParam) {
|
System.out.println("设置快球聚焦模式失败,错误码:" + hCNetSDK.NET_DVR_GetLastError());
|
}
|
struFocusMode.read();
|
System.out.println("设置成功");
|
}
|
|
/**
|
* 获取IP通道
|
* @param iUserID
|
* @throws UnsupportedEncodingException
|
*/
|
public static void GetIPChannelInfo(int iUserID) throws UnsupportedEncodingException {
|
IntByReference ibrBytesReturned = new IntByReference(0);//获取IP接入配置参数
|
HCNetSDK.NET_DVR_IPPARACFG_V40 m_strIpparaCfg = new HCNetSDK.NET_DVR_IPPARACFG_V40();
|
m_strIpparaCfg.write();
|
//lpIpParaConfig 接收数据的缓冲指针
|
Pointer lpIpParaConfig = m_strIpparaCfg.getPointer();
|
boolean bRet = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_IPPARACFG_V40, 0, lpIpParaConfig, m_strIpparaCfg.size(), ibrBytesReturned);
|
m_strIpparaCfg.read();
|
System.out.println("起始数字通道号:" + m_strIpparaCfg.dwStartDChan);
|
|
for (int iChannum = 0; iChannum < m_strIpparaCfg.dwDChanNum; iChannum++) {
|
int channum = iChannum + m_strIpparaCfg.dwStartDChan;
|
HCNetSDK.NET_DVR_PICCFG_V40 strPicCfg = new HCNetSDK.NET_DVR_PICCFG_V40();
|
strPicCfg.dwSize = strPicCfg.size();
|
strPicCfg.write();
|
Pointer pStrPicCfg = strPicCfg.getPointer();
|
NativeLong lChannel = new NativeLong(channum);
|
IntByReference pInt = new IntByReference(0);
|
boolean b_GetPicCfg = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_PICCFG_V40, lChannel.intValue(),
|
pStrPicCfg, strPicCfg.size(), pInt);
|
// if (b_GetPicCfg == false) {
|
// System.out.println("获取图像参数失败,错误码:" + hCNetSDK.NET_DVR_GetLastError());
|
// }
|
strPicCfg.read();
|
m_strIpparaCfg.struStreamMode[iChannum].read();
|
if (m_strIpparaCfg.struStreamMode[iChannum].byGetStreamType == 0) {
|
m_strIpparaCfg.struStreamMode[iChannum].uGetStream.setType(HCNetSDK.NET_DVR_IPCHANINFO.class);
|
m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.read();
|
|
System.out.println("--------------第"+ (iChannum+1) + "个通道------------------");
|
int channel = m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPID + m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPIDHigh * 256;
|
System.out.println("channel:" + channel);
|
if(channel > 0){
|
System.out.println("ip: " + new String(m_strIpparaCfg.struIPDevInfo[channel-1].struIP.sIpV4).trim());
|
}
|
System.out.println("name: " + new String(strPicCfg.sChanName,"GBK").trim());
|
if (m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byEnable == 1) {
|
System.out.println("IP通道" + channum + "在线");
|
|
} else {
|
|
System.out.println("IP通道" + channum + "不在线");
|
|
}
|
}
|
}
|
}
|
|
/**
|
* 获取高精度PTZ绝对位置配置,一般热成像设备支持
|
* @param iUserID
|
*/
|
//
|
public static void GetPTZAbsoluteEx(int iUserID) {
|
HCNetSDK.NET_DVR_STD_CONFIG struSTDcfg = new HCNetSDK.NET_DVR_STD_CONFIG();
|
HCNetSDK.NET_DVR_PTZABSOLUTEEX_CFG struPTZ = new HCNetSDK.NET_DVR_PTZABSOLUTEEX_CFG();
|
struSTDcfg.read();
|
IntByReference channel = new IntByReference(1);
|
struSTDcfg.lpCondBuffer = channel.getPointer();
|
struSTDcfg.dwCondSize = 4;
|
struSTDcfg.lpOutBuffer = struPTZ.getPointer();
|
struSTDcfg.dwOutSize = struPTZ.size();
|
struSTDcfg.lpInBuffer = Pointer.NULL;
|
struSTDcfg.dwInSize = 0;
|
struSTDcfg.write();
|
boolean bGetPTZ = hCNetSDK.NET_DVR_GetSTDConfig(iUserID, HCNetSDK.NET_DVR_GET_PTZABSOLUTEEX, struSTDcfg);
|
if (bGetPTZ == false) {
|
System.out.println("获取PTZ参数错误,错误码:" + hCNetSDK.NET_DVR_GetLastError());
|
return;
|
}
|
struPTZ.read();
|
System.out.println("焦距范围:" + struPTZ.dwFocalLen);
|
System.out.println("聚焦参数:" + struPTZ.struPTZCtrl.dwFocus);
|
return;
|
}
|
|
/**
|
* 设置球机预置点
|
* @param iUserID
|
*/
|
public static void GetCruisePoint(int iUserID) {
|
HCNetSDK.NET_DVR_CRUISEPOINT_COND struCruisepointCond = new HCNetSDK.NET_DVR_CRUISEPOINT_COND();
|
struCruisepointCond.read();
|
struCruisepointCond.dwSize = struCruisepointCond.size();
|
struCruisepointCond.dwChan = 1;
|
struCruisepointCond.wRouteNo = 1;
|
struCruisepointCond.write();
|
|
HCNetSDK.NET_DVR_CRUISEPOINT_V50 struCruisepointV40 = new HCNetSDK.NET_DVR_CRUISEPOINT_V50();
|
struCruisepointV40.read();
|
struCruisepointV40.dwSize = struCruisepointV40.size();
|
struCruisepointV40.write();
|
|
// 错误信息列表
|
IntByReference pInt = new IntByReference(0);
|
Pointer lpStatusList = pInt.getPointer();
|
|
boolean flag = hCNetSDK.NET_DVR_GetDeviceConfig(iUserID, 6714, 1,
|
struCruisepointCond.getPointer(), struCruisepointCond.size(), lpStatusList, struCruisepointV40.getPointer(), struCruisepointV40.size());
|
if (flag == false) {
|
int iErr = hCNetSDK.NET_DVR_GetLastError();
|
System.out.println("NET_DVR_STDXMLConfig失败,错误号:" + iErr);
|
return;
|
}
|
struCruisepointV40.read();
|
}
|
|
/**
|
* 设备抓图保存到缓冲区
|
* @param iUserID
|
*/
|
public static void GetPictoPointer(int iUserID) {
|
HCNetSDK.NET_DVR_JPEGPARA jpegpara = new HCNetSDK.NET_DVR_JPEGPARA();
|
jpegpara.read();
|
jpegpara.wPicSize = 255;
|
jpegpara.wPicQuality = 0;
|
jpegpara.write();
|
HCNetSDK.BYTE_ARRAY byte_array = new HCNetSDK.BYTE_ARRAY(10 * 1024 * 1024);
|
IntByReference ret = new IntByReference(0);
|
boolean b = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(iUserID, 1, jpegpara, byte_array.getPointer(), byte_array.size(), ret);
|
if (b == false) {
|
System.out.println("抓图失败:" + hCNetSDK.NET_DVR_GetLastError());
|
return;
|
}
|
byte_array.read();
|
System.out.println("ret:"+ret.getValue());
|
String filePath = ".\\pic\\test.jpg"; // 指定保存文件的路径和名称
|
try {
|
WriteBytesToFile(byte_array.byValue,ret.getValue(), filePath);
|
System.out.println("图片已成功保存为:" + filePath);
|
} catch (IOException e) {
|
System.err.println("写入文件时发生错误:" + e.getMessage());
|
e.printStackTrace();
|
}
|
System.out.println("抓图成功");
|
return;
|
}
|
|
|
/**
|
* 将字节数组写入到指定的文件路径。
|
*
|
* @param bytes 字节数组
|
* @param filePath 文件保存路径
|
* @throws IOException 如果文件写入过程中发生错误
|
*/
|
private static void WriteBytesToFile(byte[] bytes,int len, String filePath) throws IOException {
|
File file = new File(filePath);
|
FileOutputStream fos = new FileOutputStream(file);
|
|
fos.write(bytes,0,len);
|
fos.close(); // 关闭输出流
|
}
|
|
/**
|
* 这里应该替换为你实际获取字节数组的方法。
|
* 示例中省略具体实现,直接返回null。
|
*
|
* @return 图片的字节数组
|
*/
|
private static byte[] getYourImageBytes() {
|
// 这里应该是从数据库、网络或其他来源获取字节数组的逻辑
|
// 返回示例:null,实际使用时需要替换为有效数据
|
return null;
|
}
|
|
/**
|
* 录像起止时间查询
|
* @param iUserID
|
*/
|
public static void SearchRecordTime(int iUserID) {
|
HCNetSDK.NET_DVR_RECORD_TIME_SPAN_INQUIRY struRecInq = new HCNetSDK.NET_DVR_RECORD_TIME_SPAN_INQUIRY();
|
struRecInq.read();
|
struRecInq.dwSize = struRecInq.size();
|
struRecInq.byType = 0;
|
struRecInq.write();
|
HCNetSDK.NET_DVR_RECORD_TIME_SPAN struRecSpan = new HCNetSDK.NET_DVR_RECORD_TIME_SPAN();
|
//通道号说明:一般IPC/IPD通道号为1,32路以及以下路数的NVR的IP通道通道号从33开始,64路及以上路数的NVR的IP通道通道号从1开始。
|
if (hCNetSDK.NET_DVR_InquiryRecordTimeSpan(iUserID, 35, struRecInq, struRecSpan) == false) {
|
System.out.println("录像起止时间查询失败,错误码:" + hCNetSDK.NET_DVR_GetLastError());
|
} else {
|
System.out.println("录像起止时间查询成功");
|
struRecSpan.read();
|
System.out.println("开启时间:" + "年:" + struRecSpan.strBeginTime.dwYear + "\n");
|
System.out.println("开启时间:" + "月:" + struRecSpan.strBeginTime.dwMonth + "\n");
|
System.out.println("开启时间:" + "日:" + struRecSpan.strBeginTime.dwDay + "\n");
|
System.out.println("开启时间:" + "时:" + struRecSpan.strBeginTime.dwHour + "\n");
|
System.out.println("停止时间:" + "年:" + struRecSpan.strEndTime.dwYear + "\n");
|
System.out.println("停止时间:" + "月:" + struRecSpan.strEndTime.dwMonth + "\n");
|
System.out.println("停止时间:" + "日:" + struRecSpan.strEndTime.dwDay + "\n");
|
System.out.println("停止时间:" + "时:" + struRecSpan.strEndTime.dwHour + "\n");
|
}
|
}
|
|
/**
|
* 月历录像查询
|
* @param iUserID
|
*/
|
public static void GetRecMonth(int iUserID) {
|
HCNetSDK.NET_DVR_MRD_SEARCH_PARAM struMrdSeaParam = new HCNetSDK.NET_DVR_MRD_SEARCH_PARAM();
|
struMrdSeaParam.read();
|
struMrdSeaParam.dwSize = struMrdSeaParam.size();
|
struMrdSeaParam.wYear = 2021;
|
struMrdSeaParam.byMonth = 1;
|
//通道号说明:一般IPC/IPD通道号为1,32路以及以下路数的NVR的IP通道通道号从33开始,64路及以上路数的NVR的IP通道通道号从1开始。
|
struMrdSeaParam.struStreamInfo.dwChannel = 33;
|
struMrdSeaParam.write();
|
HCNetSDK.NET_DVR_MRD_SEARCH_RESULT struMrdSeaResu = new HCNetSDK.NET_DVR_MRD_SEARCH_RESULT();
|
struMrdSeaResu.read();
|
struMrdSeaResu.dwSize = struMrdSeaResu.size();
|
struMrdSeaResu.write();
|
IntByReference list = new IntByReference(0);
|
boolean b_GetResult = hCNetSDK.NET_DVR_GetDeviceConfig(iUserID, HCNetSDK.NET_DVR_GET_MONTHLY_RECORD_DISTRIBUTION, 0, struMrdSeaParam.getPointer(),
|
struMrdSeaParam.size(), list.getPointer(), struMrdSeaResu.getPointer(), struMrdSeaResu.size());
|
if (b_GetResult == false) {
|
System.out.println("月历录像查询失败,错误码:" + hCNetSDK.NET_DVR_GetLastError());
|
} else {
|
struMrdSeaResu.read();
|
for (int i = 0; i <= 32; i++) {
|
int day = i + 1;
|
System.out.println("" + day + "号是否录像文件" + struMrdSeaResu.byRecordDistribution[i]);
|
}
|
}
|
}
|
|
/**
|
* 设备抓图
|
* @param iUserID
|
*/
|
public static void CaptureJPEGPicture(int iUserID) {
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
|
// String curTime0 = sdf.format(new Date());
|
Boolean result = false;
|
int count = 0;
|
while (!result) {
|
try {
|
Thread.sleep(1 * 1000); //设置暂停的时间 5 秒
|
String curTime0 = sdf.format(new Date());
|
count++;
|
String filename = ".\\pic\\" + curTime0 + count + ".jpg" + "\0";
|
byte[] fileByte = filename.getBytes("UTF-8");
|
|
HCNetSDK.NET_DVR_JPEGPARA strJpegParm = new HCNetSDK.NET_DVR_JPEGPARA();
|
strJpegParm.read();
|
strJpegParm.wPicSize = 2;
|
strJpegParm.wPicQuality = 0;
|
strJpegParm.write();
|
boolean b_Cap = hCNetSDK.NET_DVR_CaptureJPEGPicture(iUserID, 1, strJpegParm, fileByte);
|
if (b_Cap == false) {
|
System.out.println("抓图失败,错误码为:" + hCNetSDK.NET_DVR_GetLastError());
|
return;
|
}
|
System.out.println(sdf.format(new Date()) + "--循环执行第" + count + "次");
|
if (count == 3) {
|
result = true;
|
break;
|
}
|
} catch (InterruptedException e) {
|
e.printStackTrace();
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
|
|
}
|