package com.netsdk.demo.customize;
|
|
import com.netsdk.demo.util.CaseMenu;
|
import com.netsdk.lib.NetSDKLib;
|
import com.netsdk.lib.ToolKits;
|
import com.netsdk.lib.NetSDKLib.NET_GET_CHANNEL_INFO;
|
import com.netsdk.lib.NetSDKLib.NET_GET_DEVICE_INFO;
|
import com.netsdk.lib.NetSDKLib.NET_IN_GET_CHANNEL_INFO;
|
import com.netsdk.lib.NetSDKLib.NET_IN_GET_DEVICE_LIST_INFO;
|
import com.netsdk.lib.NetSDKLib.NET_OUT_GET_CHANNEL_INFO;
|
import com.netsdk.lib.NetSDKLib.NET_OUT_GET_DEVICE_LIST_INFO;
|
import com.netsdk.lib.callback.impl.DefaultDisconnectCallback;
|
import com.netsdk.lib.callback.impl.DefaultHaveReconnectCallBack;
|
import com.netsdk.lib.structure.*;
|
import com.sun.jna.Memory;
|
import com.sun.jna.Pointer;
|
|
import java.io.File;
|
import java.io.UnsupportedEncodingException;
|
import java.text.SimpleDateFormat;
|
import static com.netsdk.lib.Utils.getOsPrefix;
|
|
/**
|
* @author 251823
|
* @version 1.0
|
*/
|
public class ASD8000Demo {
|
|
// SDk对象初始化
|
public static final NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE;
|
public static final NetSDKLib configsdk = NetSDKLib.CONFIG_INSTANCE;
|
|
// 判断是否初始化
|
private static boolean bInit = false;
|
// 判断log是否打开
|
private static boolean bLogOpen = false;
|
// 设备信息
|
private NetSDKLib.NET_DEVICEINFO_Ex deviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();
|
// 登录句柄
|
private NetSDKLib.LLong m_hLoginHandle = new NetSDKLib.LLong(0);
|
|
// 智能事件订阅句柄
|
private NetSDKLib.LLong m_attachHandle = new NetSDKLib.LLong(0);
|
|
// 回调函数需要是静态的,防止被系统回收
|
// 断线回调
|
private static NetSDKLib.fDisConnect disConnectCB = DefaultDisconnectCallback.getINSTANCE();
|
// 重连回调
|
private static NetSDKLib.fHaveReConnect haveReConnectCB = DefaultHaveReconnectCallBack.getINSTANCE();
|
|
// 编码格式
|
public static String encode;
|
|
static {
|
String osPrefix = getOsPrefix();
|
if (osPrefix.toLowerCase().startsWith("win32-amd64")) {
|
encode = "GBK";
|
} else if (osPrefix.toLowerCase().startsWith("linux-amd64")) {
|
encode = "UTF-8";
|
}
|
}
|
|
/**
|
* 获取当前时间
|
*/
|
public static String GetDate() {
|
SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
return simpleDate.format(new java.util.Date()).replaceAll("[^0-9]", "-");
|
}
|
|
/**
|
* 初始化SDK库
|
*/
|
public static boolean Init() {
|
bInit = netsdk.CLIENT_Init(disConnectCB, null);// 进程启动时,初始化一次
|
if (!bInit) {
|
System.out.println("Initialize SDK failed");
|
return false;
|
}
|
// 配置日志
|
ASD8000Demo.enableLog();
|
|
// 设置断线重连回调接口, 此操作为可选操作,但建议用户进行设置
|
netsdk.CLIENT_SetAutoReconnect(haveReConnectCB, null);
|
|
// 设置登录超时时间和尝试次数,可选
|
// 登录请求响应超时时间设置为3S
|
int waitTime = 3000;
|
// 登录时尝试建立链接 1 次
|
int tryTimes = 1;
|
netsdk.CLIENT_SetConnectTime(waitTime, tryTimes);
|
// 设置更多网络参数, NET_PARAM 的nWaittime , nConnectTryNum 成员与 CLIENT_SetConnectTime
|
// 接口设置的登录设备超时时间和尝试次数意义相同,可选
|
NetSDKLib.NET_PARAM netParam = new NetSDKLib.NET_PARAM();
|
// 登录时尝试建立链接的超时时间
|
netParam.nConnectTime = 10000;
|
// 设置子连接的超时时间
|
netParam.nGetConnInfoTime = 3000;
|
netsdk.CLIENT_SetNetworkParam(netParam);
|
return true;
|
}
|
|
/**
|
* 打开 sdk log
|
*/
|
private static void enableLog() {
|
NetSDKLib.LOG_SET_PRINT_INFO setLog = new NetSDKLib.LOG_SET_PRINT_INFO();
|
File path = new File("sdklog/");
|
if (!path.exists())
|
path.mkdir();
|
|
// 这里的log保存地址依据实际情况自己调整
|
String logPath = path.getAbsoluteFile().getParent() + "\\sdklog\\" + "sdklog" + GetDate() + ".log";
|
setLog.nPrintStrategy = 0;
|
setLog.bSetFilePath = 1;
|
System.arraycopy(logPath.getBytes(), 0, setLog.szLogFilePath, 0, logPath.getBytes().length);
|
System.out.println(logPath);
|
setLog.bSetPrintStrategy = 1;
|
bLogOpen = netsdk.CLIENT_LogOpen(setLog);
|
if (!bLogOpen)
|
System.err.println("Failed to open NetSDK log");
|
}
|
|
/**
|
* 高安全登录
|
*/
|
public void loginWithHighLevel() {
|
// 输入结构体参数
|
NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY pstlnParam = new NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY() {
|
{
|
szIP = m_strIpAddr.getBytes();
|
nPort = m_nPort;
|
szUserName = m_strUser.getBytes();
|
szPassword = m_strPassword.getBytes();
|
}
|
};
|
// 输出结构体参数
|
NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY pstOutParam = new NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY();
|
|
// 写入sdk
|
m_hLoginHandle = netsdk.CLIENT_LoginWithHighLevelSecurity(pstlnParam, pstOutParam);
|
if (m_hLoginHandle.longValue() == 0) {
|
System.err.printf("Login Device[%s] Port[%d]Failed. %s\n", m_strIpAddr, m_nPort,
|
netsdk.CLIENT_GetLastError());
|
} else {
|
deviceInfo = pstOutParam.stuDeviceInfo; // 获取设备信息
|
System.out.println("Login Success");
|
System.out.println("Device Address:" + m_strIpAddr);
|
System.out.println("设备包含:" + deviceInfo.byChanNum + "个通道");
|
}
|
}
|
|
/**
|
* 退出
|
*/
|
public void logOut() {
|
if (m_hLoginHandle.longValue() != 0) {
|
netsdk.CLIENT_Logout(m_hLoginHandle);
|
System.out.println("LogOut Success");
|
}
|
}
|
|
/**
|
* 清理sdk环境并退出
|
*/
|
public static void cleanAndExit() {
|
if (bLogOpen) {
|
netsdk.CLIENT_LogClose(); // 关闭sdk日志打印
|
}
|
netsdk.CLIENT_Cleanup(); // 进程关闭时,调用一次
|
System.exit(0);
|
}
|
|
/**
|
* 获取已添加的设备信息
|
*/
|
public boolean getAllDeviceInfo() {
|
String[] deviceIDs = null;//设备id列表为空,默认查全部
|
//String[] deviceIDs = { "CXbGbmlFA1E8GQ7A6P1C9R" };
|
return getDeviceInfo(deviceIDs);
|
}
|
|
public boolean getDeviceInfo(String[] deviceIDs) { // 获取已添加的设备信息
|
|
NET_IN_GET_DEVICE_LIST_INFO pstInParam = new NET_IN_GET_DEVICE_LIST_INFO();
|
NET_OUT_GET_DEVICE_LIST_INFO pstOutParam = new NET_OUT_GET_DEVICE_LIST_INFO();
|
|
if (deviceIDs != null) {
|
pstInParam.nCount = deviceIDs.length;
|
for (int i = 0; i < pstInParam.nCount; i++) {
|
System.arraycopy(deviceIDs[i].getBytes(), 0, pstInParam.szDeviceIDsArr[i].szDeviceID, 0,
|
deviceIDs[i].getBytes().length);
|
}
|
pstOutParam.nMaxCount = pstInParam.nCount;
|
} else {
|
pstInParam.nCount = 0;
|
// pstOutParam.nMaxCount = NetSDKLib.MAX_LINK_DEVICE_NUM;// 用户申请的设备个数
|
pstOutParam.nMaxCount = 100;// 用户申请的设备个数
|
}
|
|
NET_GET_DEVICE_INFO[] deviceInfo = new NET_GET_DEVICE_INFO[pstOutParam.nMaxCount];
|
for (int i = 0; i < pstOutParam.nMaxCount; i++) {
|
deviceInfo[i] = new NET_GET_DEVICE_INFO();
|
}
|
pstOutParam.pstuDeviceInfo = new Memory(deviceInfo[0].size() * pstOutParam.nMaxCount);
|
pstOutParam.pstuDeviceInfo.clear(deviceInfo[0].size() * pstOutParam.nMaxCount);
|
ToolKits.SetStructArrToPointerData(deviceInfo, pstOutParam.pstuDeviceInfo); // 将数组内存拷贝到Pointer
|
|
boolean bRet = netsdk.CLIENT_GetDeviceInfo(m_hLoginHandle, pstInParam, pstOutParam, 3000);
|
if (!bRet) {
|
System.err.printf("GetDeviceInfo Fail.Last Error[0x%x]\n", netsdk.CLIENT_GetLastError());
|
return false;
|
}
|
|
ToolKits.GetPointerDataToStructArr(pstOutParam.pstuDeviceInfo, deviceInfo); // 将 Pointer 的内容 输出到 数组
|
System.out.println("用户申请的设备个数:" + pstOutParam.nMaxCount);
|
System.out.println("实际返回的设备个数:" + pstOutParam.nRetCount);
|
try {
|
for (int i = 0; i < pstOutParam.nRetCount; i++) {
|
System.out.println("设备ID:" + new String(deviceInfo[i].szDeviceID).trim());
|
System.out.println("url:" + new String(deviceInfo[i].szUrl).trim());
|
System.out.println("设备序列号:" + new String(deviceInfo[i].szSerialNo).trim());
|
System.out.println("设备大类:" + new String(deviceInfo[i].szDeviceClass).trim());
|
System.out.println("设备类型:" + new String(deviceInfo[i].szDeviceType).trim());
|
System.out.println("设备名称:" + new String(deviceInfo[i].szDeviceName,encode).trim());
|
}
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
return true;
|
}
|
|
/**
|
* 获取设备通道信息
|
*
|
* @throws UnsupportedEncodingException
|
*/
|
public void getChannelInfo() throws UnsupportedEncodingException {
|
String deviceID = "CXbGbmlFA1FGJIMSHKOOPU";
|
NET_IN_GET_CHANNEL_INFO pstInParam = new NET_IN_GET_CHANNEL_INFO();
|
System.arraycopy(deviceID.getBytes(), 0, pstInParam.szDeviceID, 0, deviceID.getBytes().length);
|
|
NET_GET_CHANNEL_INFO[] channelInfo = new NET_GET_CHANNEL_INFO[NetSDKLib.MAX_DEVICE_CHANNEL_NUM];
|
for (int i = 0; i < channelInfo.length; i++) {
|
channelInfo[i] = new NET_GET_CHANNEL_INFO();
|
}
|
|
NET_OUT_GET_CHANNEL_INFO pstOutParam = new NET_OUT_GET_CHANNEL_INFO();
|
pstOutParam.nMaxCount = channelInfo.length; // 用户申请的通道个数
|
pstOutParam.pstuChannelInfo = new Memory(channelInfo[0].size() * pstOutParam.nMaxCount);
|
pstOutParam.pstuChannelInfo.clear(channelInfo[0].size() * pstOutParam.nMaxCount);
|
ToolKits.SetStructArrToPointerData(channelInfo, pstOutParam.pstuChannelInfo); // 将数组内存拷贝到Pointer
|
|
boolean bRet = netsdk.CLIENT_GetChannelInfo(m_hLoginHandle, pstInParam, pstOutParam, 3000);
|
if (!bRet) {
|
System.err.printf("GetChannelInfo Fail.Last Error[0x%x]\n", netsdk.CLIENT_GetLastError());
|
return;
|
}
|
ToolKits.GetPointerDataToStructArr(pstOutParam.pstuChannelInfo, channelInfo);// 将 Pointer 的内容 输出到 数组
|
System.out.println("用户申请的通道个数:" + pstOutParam.nMaxCount);
|
System.out.println("实际返回的通道个数:" + pstOutParam.nRetCount);
|
for (int i = 0; i < pstOutParam.nRetCount; i++) {
|
System.out.println("--------获取设备通道信息结果信息---------");
|
System.out.println("远程通道号:" + channelInfo[i].nRemoteChannel);
|
System.out.println("分配的逻辑通道,-1表示未分配:" + channelInfo[i].nLogicChannel);
|
System.out.println("通道名称:" + new String(channelInfo[i].szName, encode));
|
}
|
}
|
|
|
/**
|
* 选择通道
|
*/
|
private int channelId = -1;// 逻辑通道
|
|
/**
|
* 订阅带图事件
|
*/
|
public void AttachEventRealLoadPic() {
|
// 先退订,设备不会对重复订阅作校验,重复订阅后会有重复的事件返回
|
this.DetachEventRealLoadPic();
|
// 需要图片
|
int bNeedPicture = 1;
|
m_attachHandle = netsdk.CLIENT_RealLoadPictureEx(m_hLoginHandle, channelId, NetSDKLib.EVENT_IVS_ALL,
|
bNeedPicture, AnalyzerDataCB.getInstance(), null, null);
|
if (m_attachHandle.longValue() != 0) {
|
System.out.printf("Chn[%d] CLIENT_RealLoadPictureEx Success\n", channelId);
|
} else {
|
System.out.printf("Ch[%d] CLIENT_RealLoadPictureEx Failed!LastError = %s\n", channelId,
|
ToolKits.getErrorCode());
|
}
|
}
|
|
/**
|
* 带图事件(智能)回调
|
*/
|
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) {
|
if (instance == null) {
|
instance = new AnalyzerDataCB();
|
}
|
}
|
return instance;
|
}
|
|
@Override
|
public int invoke(NetSDKLib.LLong lAnalyzerHandle, int dwAlarmType, Pointer pAlarmInfo, Pointer pBuffer,
|
int dwBufSize, Pointer dwUser, int nSequence, Pointer reserved) {
|
if (lAnalyzerHandle == null || lAnalyzerHandle.longValue() == 0) {
|
return -1;
|
}
|
|
switch (dwAlarmType) {
|
case NetSDKLib.EVENT_IVS_OPEN_INTELLI: { // 开放智能事件(对应 DEV_EVENT_OPEN_INTELLI_INFO)
|
System.out.println("开放智能事件");
|
DEV_EVENT_OPEN_INTELLI_INFO msg = new DEV_EVENT_OPEN_INTELLI_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, msg);
|
int nChannelID = msg.nChannelID;
|
System.out.println("nChannelID:" + nChannelID);
|
int action = msg.nAction;
|
System.out.println("action:" + action);
|
byte[] szOpenCode = msg.szOpenCode;
|
try {
|
String openCode = new String(szOpenCode, encode);
|
System.out.println("openCode:" + openCode);
|
// 所属开放算法的名称
|
byte[] szOpenName = msg.szOpenName;
|
String openName = new String(szOpenName, encode);
|
System.out.println("openName:" + openName);
|
|
/**
|
* 所属开放算法的规则类型, 仅支持:
|
* 拌线入侵CrossLineDetection(EVENT_IVS_CROSSLINEDETECTION)、
|
* 区域入侵CrossRegionDetection(EVENT_IVS_CROSSREGIONDETECTION)、
|
* 滞留检测StayDetection(EVENT_IVS_STAYDETECTION)、
|
* 数量统计ObjectNumDetection(EVENT_IVS_OBJECT_NUM_DETECTION)、
|
* 通用姿态行为事件GenealAttitude(EVENT_IVS_GENEAL_ATTITUDE)
|
* 声强突变事件 AudioMutation(EVENT_IVS_AUDIO_MUTATION)
|
*/
|
byte[] szRuleType = msg.szRuleType;
|
String ruleType = new String(szRuleType, encode);
|
System.out.println("ruleType:" + new String(szRuleType, encode));
|
|
Pointer pstuOpenData = msg.pstuOpenData;
|
if("AudioMutation".equals(ruleType.trim())) {// 声强突变事件 AudioMutation(EVENT_IVS_AUDIO_MUTATION) - NET_DEV_EVENT_AUDIO_MUTATION_INFO
|
System.out.println("声强突变事件----------");
|
NET_DEV_EVENT_AUDIO_MUTATION_INFO info = new NET_DEV_EVENT_AUDIO_MUTATION_INFO();
|
ToolKits.GetPointerData(pstuOpenData, info);
|
System.out.println("事件编号: "+ info.nEventID);
|
// nEventID = info.nEventID;
|
}
|
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
break;
|
}
|
default:
|
System.out.println("其他事件--------------------" + dwAlarmType);
|
break;
|
}
|
return 0;
|
}
|
}
|
|
/**
|
* 取消订阅带图事件
|
*/
|
public void DetachEventRealLoadPic() {
|
if (m_attachHandle.longValue() != 0) {
|
netsdk.CLIENT_StopLoadPic(m_attachHandle);
|
}
|
}
|
|
|
static int nEventID = 2856016;// 事件编号
|
/**
|
* 获取事件详细信息
|
*/
|
public void getIVSEventDetail() {
|
NET_IN_GET_IVSEVENT_DETAIL_INFO pstInParam = new NET_IN_GET_IVSEVENT_DETAIL_INFO();
|
pstInParam.nIdNum = 1;
|
pstInParam.nId[0] = nEventID;// 事件编号,报警图片信息上报
|
pstInParam.cbNotifyIVSEventDetail = NotifyIVSEventDetail.getInstance();
|
pstInParam.write();
|
|
NET_OUT_GET_IVSEVENT_DETAIL_INFO pstOutParam = new NET_OUT_GET_IVSEVENT_DETAIL_INFO();
|
pstOutParam.write();
|
|
boolean bRet = netsdk.CLIENT_GetIVSEventDetail(m_hLoginHandle, pstInParam.getPointer(), pstOutParam.getPointer(), 3000);
|
if (!bRet) {
|
System.err.printf("getIVSEventDetail Fail.Last Error[0x%x]\n", netsdk.CLIENT_GetLastError());
|
return;
|
}
|
}
|
|
private static class NotifyIVSEventDetail implements NetSDKLib.fNotifyIVSEventDetail {
|
private static NotifyIVSEventDetail instance;
|
|
public static NotifyIVSEventDetail getInstance() {
|
if (instance == null) {
|
if (instance == null) {
|
instance = new NotifyIVSEventDetail();
|
}
|
}
|
return instance;
|
}
|
|
@Override
|
public void invoke(Pointer pstuNotifyIVSEventDetailInfo, Pointer dwUser) {
|
NET_NOTIFY_IVSEVENT_DETAIL_INFO msg = new NET_NOTIFY_IVSEVENT_DETAIL_INFO();
|
ToolKits.GetPointerData(pstuNotifyIVSEventDetailInfo, msg);
|
System.out.println("返回的事件数据数量: "+msg.nIVSEventDetailInfoNum);
|
// 事件下标与传入数据id数组下标一一对应,参见结构体定义 {@link com.netsdk.lib.structure.NET_IVSEVENT_DETAIL_INFO}
|
if(msg.nIVSEventDetailInfoNum <0 ) {
|
return;
|
}
|
//获取事件详细信息数组
|
NET_IVSEVENT_DETAIL_INFO[] records = new NET_IVSEVENT_DETAIL_INFO[msg.nIVSEventDetailInfoNum];
|
for (int i = 0; i < records.length; i++) {
|
records[i] = new NET_IVSEVENT_DETAIL_INFO();
|
}
|
ToolKits.GetPointerDataToStructArr(msg.pstuIVSEventDetailInfo, records);
|
try {
|
for (int i = 0; i < records.length; i++) {
|
System.out.println("报警事件数量: "+records[i].nEventInfoNum);
|
for (int j = 0; j <records[i].nEventInfoNum; j++) {
|
if(NetSDKLib.EVENT_IVS_OPEN_INTELLI == records[i].stuEventInfo[j].dwAlarmType)
|
{
|
Pointer data = records[i].stuEventInfo[j].data;
|
DEV_EVENT_OPEN_INTELLI_INFO info = new DEV_EVENT_OPEN_INTELLI_INFO();
|
ToolKits.GetPointerData(data, info);
|
System.out.println("通道号: " + info.nChannelID);
|
System.out.println("所属开放算法的Id: " + new String(info.szOpenCode));
|
System.out.println("所属开放算法的名称: " + new String(info.szOpenName,encode));
|
}
|
}
|
System.out.println("报警录像rtsp地址: "+new String(records[i].szVideoRtsp,encode));
|
System.out.println("报警事件录像下载地址url: "+new String(records[i].szVideoDownload,encode));
|
System.out.println("报警音频rtsp地址: "+new String(records[i].szAudioRtsp,encode));
|
System.out.println("报警事件音频下载地址url: "+new String(records[i].szAudioDownload,encode));
|
System.out.println("报警事件物联网数据下载地址url: "+new String(records[i].szIotDownload,encode));
|
}
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
|
}
|
}
|
|
|
/**
|
* 报警音视频下载
|
*/
|
public void downloadPieceFile() {
|
NET_IN_DOWNLOAD_PIECE_FILE pstInParam = new NET_IN_DOWNLOAD_PIECE_FILE();
|
String szFileName = "/eagle-video/download/video?filepath=/home/alarmVideo/2024_4_11_14_31_48021_audio.dav";//报警事件音频下载地址url
|
System.arraycopy(szFileName.getBytes(), 0, pstInParam.szFileName, 0, szFileName.getBytes().length);// 需要下载的文件名,支持全路径
|
pstInParam.nOffSet = 0; //下载偏移,单位字节 如果文件总长度为50KB,每次请求下载数据量为32KB,那么第一次请求时,nOffSet为0,第二次请求nOffSet为32KB
|
pstInParam.nNeedLength = 32*1024;
|
pstInParam.write();
|
|
NET_OUT_DOWNLOAD_PIECE_FILE pstOutParam = new NET_OUT_DOWNLOAD_PIECE_FILE();
|
pstOutParam.nBufferLen = 50*1024;
|
pstOutParam.szBuffer = new Memory(50*1024);
|
pstOutParam.szBuffer.clear(50*1024);
|
pstOutParam.write();
|
|
boolean bRet = netsdk.CLIENT_DownloadPieceFile(m_hLoginHandle, pstInParam.getPointer(), pstOutParam.getPointer(), 5000);
|
if (!bRet) {
|
System.err.printf("downloadPieceFile Fail.Last Error[0x%x]\n", netsdk.CLIENT_GetLastError());
|
return;
|
}
|
pstOutParam.read();
|
System.out.println("文件总长度: "+pstOutParam.nFileLength);
|
System.out.println("本次返回的数据长度,单位字节,建议为32KB,最大不超过4MB: "+pstOutParam.nPacketLength);
|
// 此处演示写一次的方法,实际应用根据文件总长计算偏移量,追加读写整个文件
|
if(pstOutParam.szBuffer!= null && pstOutParam.nPacketLength>0) {
|
String sDstFile = "D:\\666.dav";
|
ToolKits.savePicture(pstOutParam.szBuffer, 0, pstOutParam.nPacketLength, sDstFile);
|
}
|
}
|
|
|
|
|
public void RunTest() {
|
System.out.println("Run Test");
|
CaseMenu menu = new CaseMenu();
|
// 设备通道信息获取
|
menu.addItem(new CaseMenu.Item(this, "获取已添加的设备信息", "getAllDeviceInfo"));
|
menu.addItem(new CaseMenu.Item(this, "获取设备通道信息", "getChannelInfo"));
|
|
// 获取报警图片事件
|
menu.addItem((new CaseMenu.Item(this, "订阅带图事件", "AttachEventRealLoadPic")));
|
menu.addItem((new CaseMenu.Item(this, "取消订阅带图事件", "DetachEventRealLoadPic")));
|
|
// 获取事件详细信息
|
menu.addItem((new CaseMenu.Item(this, "获取事件详细信息", "getIVSEventDetail")));
|
|
// 报警音视频下载
|
menu.addItem((new CaseMenu.Item(this, "报警音视频下载", "downloadPieceFile")));
|
menu.run();
|
}
|
|
// 配置登陆地址,端口,用户名,密码
|
private String m_strIpAddr = "172.12.25.239";
|
private int m_nPort = 37777;
|
private String m_strUser = "admin";
|
private String m_strPassword = "Admin123";
|
|
public static void main(String[] args) {
|
ASD8000Demo demo = new ASD8000Demo();
|
demo.InitTest();
|
demo.RunTest();
|
demo.EndTest();
|
|
}
|
|
/**
|
* 初始化测试
|
*/
|
public void InitTest() {
|
// 初始化
|
ASD8000Demo.Init();
|
// 登陆设备
|
this.loginWithHighLevel();
|
}
|
|
/**
|
* 结束测试
|
*/
|
public void EndTest() {
|
System.out.println("End Test");
|
this.logOut(); // 登出设备
|
System.out.println("See You...");
|
ASD8000Demo.cleanAndExit(); // 清理资源并退出
|
}
|
}
|