package com.netsdk.demo.customize;
|
|
|
import com.netsdk.lib.NetSDKLib;
|
import com.netsdk.lib.ToolKits;
|
import com.netsdk.lib.utils.Initialization;
|
import com.sun.jna.Pointer;
|
import java.io.File;
|
import java.util.Date;
|
import java.util.Scanner;
|
|
/**
|
* @author 291189
|
* @version 1.0
|
* @description
|
* @date 2021/12/10 11:19
|
*/
|
public class lvcheng extends Initialization {
|
|
/**
|
* 手动抓图按钮事件
|
*/
|
|
static int count =0;
|
|
/**
|
* 手动抓图
|
* @return
|
*/
|
public static boolean manualSnapPicture() {
|
NetSDKLib.MANUAL_SNAP_PARAMETER snapParam = new NetSDKLib.MANUAL_SNAP_PARAMETER();
|
snapParam.nChannel = 0;
|
String sequence = (++count)+""; // 抓图序列号,必须用数组拷贝
|
System.arraycopy(sequence.getBytes(), 0, snapParam.bySequence, 0, sequence.getBytes().length);
|
|
snapParam.write();
|
boolean bRet = netSdk.CLIENT_ControlDeviceEx(loginHandle, NetSDKLib.CtrlType.CTRLTYPE_MANUAL_SNAP, snapParam.getPointer(), null, 500);
|
if (!bRet) {
|
System.err.println("Failed to manual snap, last error " + ToolKits.getErrorCode());
|
return false;
|
} else {
|
System.out.println("SeccessedCount:"+count+":manualSnap:"+new Date());
|
System.out.println("Seccessed to manual snap");
|
}
|
snapParam.read();
|
return true;
|
}
|
|
|
int channel=0;
|
NetSDKLib.LLong attachHandle=new NetSDKLib.LLong(0);
|
/**
|
* 订阅智能任务
|
*/
|
public NetSDKLib.LLong AttachEventRealLoadPic() {
|
// 先退订,设备不会对重复订阅作校验,重复订阅后会有重复的事件返回
|
if(attachHandle.longValue()!=0){
|
this.DetachEventRealLoadPic();
|
}
|
|
// 需要图片
|
int bNeedPicture = 1;
|
attachHandle = netSdk.CLIENT_RealLoadPictureEx(loginHandle, channel, NetSDKLib.EVENT_IVS_TRAFFIC_MANUALSNAP, bNeedPicture, AnalyzerDataCB.getInstance(), null, null);
|
// attachHandle = netSdk.CLIENT_RealLoadPictureEx(loginHandle, channel, NetSDKLib.EVENT_IVS_ALL, bNeedPicture, AnalyzerDataCB.getInstance(), null, null);
|
|
if (attachHandle.longValue() != 0) {
|
System.out.printf("Chn[%d] CLIENT_RealLoadPictureEx Success\n", channel);
|
} else {
|
System.out.printf("Ch[%d] CLIENT_RealLoadPictureEx Failed!LastError = %s\n", channel,
|
ToolKits.getErrorCode());
|
}
|
|
return attachHandle;
|
}
|
/**
|
* 报警事件(智能)回调
|
*/
|
static int countGetManualsnap=0;
|
static int countGetAll=0;
|
|
private static class AnalyzerDataCB implements NetSDKLib.fAnalyzerDataCallBack {
|
private final File picturePath;
|
private static AnalyzerDataCB instance;
|
|
private AnalyzerDataCB() {
|
picturePath = new File("./AnalyzerPicture/");
|
if (!picturePath.exists()) {
|
picturePath.mkdirs();
|
}
|
}
|
|
public static AnalyzerDataCB getInstance() {
|
if (instance == null) {
|
synchronized (AnalyzerDataCB.class) {
|
if (instance == null) {
|
instance = new AnalyzerDataCB();
|
}
|
}
|
}
|
return instance;
|
}
|
|
public int invoke(NetSDKLib.LLong lAnalyzerHandle, int dwAlarmType, Pointer pAlarmInfo, Pointer pBuffer, int dwBufSize,
|
Pointer dwUser, int nSequence, Pointer reserved) {
|
|
countGetAll++;
|
System.out.println("countGetAll:"+countGetAll);
|
if (lAnalyzerHandle == null || lAnalyzerHandle.longValue() == 0) {
|
return -1;
|
}
|
|
|
switch (dwAlarmType) {
|
case NetSDKLib.EVENT_IVS_TRAFFIC_MANUALSNAP: //
|
|
NetSDKLib.DEV_EVENT_TRAFFIC_MANUALSNAP_INFO msg=new NetSDKLib.DEV_EVENT_TRAFFIC_MANUALSNAP_INFO();
|
|
System.out.println("szManualSnapNo:"+new String(msg.szManualSnapNo));
|
|
countGetManualsnap++;
|
System.out.println("countGetManualsnap:"+countGetManualsnap);
|
System.out.println("get:"+new Date());
|
break;
|
default:
|
System.out.println("其他事件--------------------"+ dwAlarmType);
|
break;
|
}
|
|
return 0;
|
}
|
}
|
|
/**
|
* 停止侦听智能事件
|
*/
|
public void DetachEventRealLoadPic() {
|
if (this.attachHandle.longValue() != 0) {
|
netSdk.CLIENT_StopLoadPic(this.attachHandle);
|
}
|
}
|
|
|
|
public static void main(String[] args) {
|
|
InitTest("10.11.17.191",37777,"admin","admin123");
|
|
Scanner scanner=new Scanner(System.in);
|
lvcheng lc=new lvcheng();
|
|
while (true){
|
System.out.println("1 订阅任务");
|
System.out.println("2 手动抓图");
|
System.out.println("3 退订任务");
|
System.out.println("4 退出");
|
|
int nextInt = scanner.nextInt();
|
if(nextInt==1){
|
lc.AttachEventRealLoadPic();
|
}else if(nextInt==2) {
|
|
for (int i = 0; i < 1000; i++){
|
manualSnapPicture();
|
}
|
|
}else if(nextInt==3){
|
lc.DetachEventRealLoadPic();
|
}else {
|
break;
|
}
|
|
}
|
LoginOut();
|
}
|
|
|
}
|