feat(sdk): 添加通用API调用方法
This commit is contained in:
parent
20faf13328
commit
9aa58d2027
@ -1,5 +1,7 @@
|
|||||||
package org.dromara.sis.sdk.hik.service;
|
package org.dromara.sis.sdk.hik.service;
|
||||||
|
|
||||||
|
import com.sun.jna.Memory;
|
||||||
|
import com.sun.jna.Pointer;
|
||||||
import com.sun.jna.ptr.IntByReference;
|
import com.sun.jna.ptr.IntByReference;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.dromara.sis.sdk.hik.HCNetSDK;
|
import org.dromara.sis.sdk.hik.HCNetSDK;
|
||||||
@ -18,7 +20,7 @@ public class CamearService extends SdkBaseServer {
|
|||||||
/**
|
/**
|
||||||
* 获取设备通道信息
|
* 获取设备通道信息
|
||||||
*
|
*
|
||||||
* @return
|
* @return DeviceInfo
|
||||||
*/
|
*/
|
||||||
public static DeviceInfo getDeviceChannelInfo(int lUserID) {
|
public static DeviceInfo getDeviceChannelInfo(int lUserID) {
|
||||||
HCNetSDK.NET_DVR_IPPARACFG_V40 lpOutBuffer = new HCNetSDK.NET_DVR_IPPARACFG_V40();
|
HCNetSDK.NET_DVR_IPPARACFG_V40 lpOutBuffer = new HCNetSDK.NET_DVR_IPPARACFG_V40();
|
||||||
@ -77,4 +79,78 @@ public class CamearService extends SdkBaseServer {
|
|||||||
return deviceInfo;
|
return deviceInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void isAPI(int lUserID, String url) {
|
||||||
|
// 输入参数
|
||||||
|
HCNetSDK.NET_DVR_XML_CONFIG_INPUT strInput = new HCNetSDK.NET_DVR_XML_CONFIG_INPUT();
|
||||||
|
strInput.dwSize = strInput.size(); // 初始化结构体内存
|
||||||
|
|
||||||
|
// 2. 构造URL - 必须包含 \r\n 结束符
|
||||||
|
// String url = "GET /ISAPI/Intelligent/capabilities\r\n";
|
||||||
|
byte[] urlBytes = url.getBytes();
|
||||||
|
Memory urlMemory = new Memory(urlBytes.length + 1); // +1 for null terminator
|
||||||
|
urlMemory.write(0, urlBytes, 0, urlBytes.length);
|
||||||
|
urlMemory.setByte(urlBytes.length, (byte) 0); // 添加NUL终止符
|
||||||
|
|
||||||
|
strInput.lpRequestUrl = urlMemory;
|
||||||
|
strInput.dwRequestUrlLen = urlBytes.length; // 不包括NUL终止符
|
||||||
|
|
||||||
|
// 3. 输入缓冲区设为空指针
|
||||||
|
strInput.lpInBuffer = Pointer.NULL;
|
||||||
|
strInput.dwInBufferSize = 0;
|
||||||
|
|
||||||
|
|
||||||
|
// 输出参数
|
||||||
|
HCNetSDK.NET_DVR_XML_CONFIG_OUTPUT strOutput = new HCNetSDK.NET_DVR_XML_CONFIG_OUTPUT();
|
||||||
|
strOutput.dwSize = strOutput.size();
|
||||||
|
|
||||||
|
// 5. 分配输出缓冲区 (8KB)
|
||||||
|
int outBufSize = 8 * 1024;
|
||||||
|
Memory outBuffer = new Memory(outBufSize);
|
||||||
|
outBuffer.clear(); // 清零缓冲区
|
||||||
|
|
||||||
|
// 6. 分配状态缓冲区 (1KB)
|
||||||
|
int statusSize = 1024;
|
||||||
|
Memory statusBuffer = new Memory(statusSize);
|
||||||
|
statusBuffer.clear(); // 清零缓冲区
|
||||||
|
|
||||||
|
strOutput.lpOutBuffer = outBuffer;
|
||||||
|
strOutput.dwOutBufferSize = outBufSize;
|
||||||
|
strOutput.lpStatusBuffer = statusBuffer;
|
||||||
|
strOutput.dwStatusSize = statusSize;
|
||||||
|
|
||||||
|
// 7. 调用前写入结构体
|
||||||
|
strOutput.write(); // 将Java结构体写入本地内存
|
||||||
|
strOutput.write(); // 将Java结构体写入本地内存
|
||||||
|
|
||||||
|
// 调用SDK方法
|
||||||
|
boolean success = hcNetSDK.NET_DVR_STDXMLConfig(lUserID, strInput, strOutput);
|
||||||
|
|
||||||
|
if (!success) {
|
||||||
|
int errorCode = hcNetSDK.NET_DVR_GetLastError();
|
||||||
|
System.err.println("NET_DVR_STDXMLConfig failed, error code: " + errorCode);
|
||||||
|
|
||||||
|
// 打印状态信息帮助调试
|
||||||
|
if (strOutput.dwReturnedXMLSize > 0) {
|
||||||
|
String status = statusBuffer.getString(0);
|
||||||
|
System.err.println("Status: " + status);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
System.out.println("NET_DVR_STDXMLConfig successfully!");
|
||||||
|
|
||||||
|
// 9. 读取前同步结构体字段
|
||||||
|
strOutput.read(); // 从本地内存读取更新后的结构体
|
||||||
|
|
||||||
|
// 检查实际返回的数据大小
|
||||||
|
int returnedSize = strOutput.dwReturnedXMLSize;
|
||||||
|
if (returnedSize > 0) {
|
||||||
|
// 使用正确的长度读取字符串
|
||||||
|
String xmlResponse = outBuffer.getString(0);
|
||||||
|
System.out.println("Response size: " + returnedSize);
|
||||||
|
System.out.println(xmlResponse);
|
||||||
|
} else {
|
||||||
|
System.out.println("No data returned");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user