package com.netsdk.demo.customize;
|
|
import static com.netsdk.lib.Utils.getOsPrefix;
|
|
import java.io.File;
|
import java.util.Scanner;
|
|
import com.netsdk.lib.NetSDKLib;
|
import com.netsdk.lib.enumeration.CFG_EM_STREAM_TYPES;
|
import com.netsdk.lib.enumeration.ENUMERROR;
|
import com.netsdk.lib.structure.NET_IN_VIDEO_ENCODE_CAPS;
|
import com.netsdk.lib.structure.NET_OUT_VIDEO_ENCODE_CAPS;
|
import com.netsdk.lib.utils.Initialization;
|
import com.sun.jna.Pointer;
|
|
/**
|
* 隐私遮挡功能
|
*/
|
public class PrivacyMaskingCapsDemo {
|
|
public static NetSDKLib netSdk = NetSDKLib.NETSDK_INSTANCE;
|
public static NetSDKLib config = NetSDKLib.CONFIG_INSTANCE;
|
|
// 登陆句柄
|
public static NetSDKLib.LLong loginHandle;
|
|
public static NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();
|
|
// 编码格式
|
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";
|
}
|
|
}
|
|
/**
|
* 设备断线回调
|
*/
|
private static class DisconnectCallback implements NetSDKLib.fDisConnect {
|
private static DisconnectCallback instance = new DisconnectCallback();
|
|
private DisconnectCallback() {
|
}
|
|
public static DisconnectCallback getInstance() {
|
return instance;
|
}
|
|
public void invoke(NetSDKLib.LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) {
|
System.out.printf("Device[%s:%d] Disconnect!\n", pchDVRIP, nDVRPort);
|
}
|
}
|
|
/**
|
* 设备重连回调
|
*/
|
private static class HaveReconnectCallback implements NetSDKLib.fHaveReConnect {
|
private static HaveReconnectCallback instance = new HaveReconnectCallback();
|
|
private HaveReconnectCallback() {
|
}
|
|
public static HaveReconnectCallback getInstance() {
|
return instance;
|
}
|
|
public void invoke(NetSDKLib.LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) {
|
System.out.printf("Device[%s:%d] HaveReconnected!\n", pchDVRIP, nDVRPort);
|
}
|
}
|
|
public static void InitTest(String ip, int port, String user, String password) {
|
// 初始化SDK库
|
netSdk.CLIENT_Init(DisconnectCallback.getInstance(), null);
|
|
// 设置断线重连成功回调函数
|
netSdk.CLIENT_SetAutoReconnect(HaveReconnectCallback.getInstance(), null);
|
|
// 打开日志,可选0
|
NetSDKLib.LOG_SET_PRINT_INFO setLog = new NetSDKLib.LOG_SET_PRINT_INFO();
|
String logPath = new File(".").getAbsoluteFile().getParent() + File.separator + "sdk_log" + File.separator
|
+ "sdk.log";
|
System.out.println("logPath:" + logPath);
|
setLog.bSetFilePath = 1;
|
System.arraycopy(logPath.getBytes(), 0, setLog.szLogFilePath, 0, logPath.getBytes().length);
|
setLog.bSetPrintStrategy = 1;
|
setLog.nPrintStrategy = 0;
|
if (!netSdk.CLIENT_LogOpen(setLog)) {
|
System.err.println("Open SDK Log Failed!!!");
|
}
|
|
loginWithHighLevel(ip, port, user, password);
|
}
|
|
/**
|
* 高安全登录
|
*/
|
public static void loginWithHighLevel(String ip, int port, String user, String password) {
|
// 输入结构体参数
|
NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY pstlnParam = new NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY() {
|
{
|
szIP = ip.getBytes();
|
nPort = port;
|
szUserName = user.getBytes();
|
szPassword = password.getBytes();
|
}
|
};
|
|
// 输出结构体参数
|
NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY pstOutParam = new NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY();
|
|
// 写入sdk
|
loginHandle = netSdk.CLIENT_LoginWithHighLevelSecurity(pstlnParam, pstOutParam);
|
if (loginHandle.longValue() == 0) {
|
System.err.printf("Login Device [%s:%d] Failed ! Last Error[%x]\n", ip, port,netSdk.CLIENT_GetLastError());
|
} else {
|
NetSDKLib.NET_DEVICEINFO_Ex deviceInfo = pstOutParam.stuDeviceInfo; // 获取设备信息
|
System.out.println("Login Success");
|
System.out.println("Device Address:" + ip);
|
System.out.println("设备包含:" + deviceInfo.byChanNum + "个通道");
|
m_stDeviceInfo = pstOutParam.stuDeviceInfo;
|
}
|
|
}
|
|
/**
|
* 退出清理环境
|
*/
|
public static void loginOut() {
|
System.out.println("End Test");
|
if (loginHandle.longValue() != 0) {
|
netSdk.CLIENT_Logout(loginHandle);
|
}
|
System.out.println("See You...");
|
|
netSdk.CLIENT_Cleanup();
|
System.exit(0);
|
}
|
|
/**
|
* 获取能力集
|
*/
|
public static void queryVedioEncodeCaps() {
|
//入参
|
NET_IN_VIDEO_ENCODE_CAPS pInBuf = new NET_IN_VIDEO_ENCODE_CAPS();
|
pInBuf.stStreamType = CFG_EM_STREAM_TYPES.CFG_EM_STREAMTYPE_MAIN.getValue();// Main -主码流
|
pInBuf.write();
|
//出参
|
NET_OUT_VIDEO_ENCODE_CAPS pOutBuf = new NET_OUT_VIDEO_ENCODE_CAPS();
|
pOutBuf.write();
|
boolean flg = netSdk.CLIENT_QueryDevInfo(loginHandle, NetSDKLib.NET_QUERY_VIDEO_ENCODE_CAPS, pInBuf.getPointer(), pOutBuf.getPointer(), null, 3000);
|
if (flg) {
|
pOutBuf.read();
|
// 1:V1,2:V2(SD), 3:V3(IPC) ,参考枚举 {@link com.netsdk.lib.enumeration.EM_PRIVACY_MASKING_VERSION}
|
System.out.println("隐私遮档版本号:"+pOutBuf.stuPrivacyMaskingCaps.emVersion);
|
|
} else {
|
System.out.println("获取能力集:" + ENUMERROR.getErrorMessage());
|
}
|
|
|
}
|
|
public static void main(String[] args) {
|
PrivacyMaskingCapsDemo demo=new PrivacyMaskingCapsDemo();
|
// 初始化sdk库,设置断线配置,打开日志,设备登录
|
InitTest("172.29.4.150", 37777, "admin", "admin123");
|
if(loginHandle.longValue() == 0) {
|
loginOut();
|
}
|
|
// 隐私遮挡能力,根据能力决定使用配置还是RPC,本demo开放给用户选择
|
// queryVedioEncodeCaps()
|
|
Scanner scanner=new Scanner(System.in);
|
String id="";
|
while (true){
|
System.out.println("请选择以下功能");
|
System.out.println("1. 全屏隐私遮挡");
|
System.out.println("2. 局部隐私遮挡");
|
System.out.println("3. 取消隐私遮挡");
|
System.out.println("4. 退出程序");
|
System.out.println("Please input a item index to invoke the method:");
|
int step = scanner.nextInt();
|
if(step==0){
|
break;
|
}else if(step==1){
|
|
}else if(step==2) {
|
|
}else if(step==3){
|
|
} else{
|
break;
|
}
|
|
}
|
Initialization.LoginOut();
|
}
|
}
|
|
|
|