java實現海康NVR/DVR設備工作狀態獲取


該功能需要到JNA的知識。

通過查閱海康設備網絡SDK編程指南(DVR&NVR)可以知道海康SDK的調用方法都要同過如下過程:

虛線框的流程是可選部分,不會影響其他流程和模塊的功能使用。具體的模塊說明可以自行參考SDK開發文件。

主要功能代碼:

測試例子,因此虛線部分功能不實現

1.初始化設備SDK:對整個網絡SDK 系統的初始化,內存預分配等操作。

代碼:HCNetSDK sdk = HCNetSDK.INSTANCE;

     sdk.NET_DVR_Init();//返回booleaan值

2.注冊設備:實現用戶的注冊功能,注冊成功后,返回的用戶ID 作為其他功能操作的唯一標識

代碼: NativeLong uid=new  NativeLong(-1);

    NET_DVR_DEVICEINFO_V30 devinfo=new NET_DVR_DEVICEINFO_V30();//設備信息

    uid=sdk.NET_DVR_Login_V30((string)IP,(short)PORT,(string)user,string()pwd,devinfo);//返回一個用戶編號,同時將設備信息寫入devinfo

3.設備工作狀態獲取(參數配置模塊):

代碼:NET_DVR_WORKSTATE_V30 devwork=new NET_DVR_WORKSTATE_V30();

   sdk.NET_DVR_GetDVRWorkState_V30(uid, devwork);//返回Boolean值,判斷是否獲取設備能力

   IntByReference ibrBytesReturned = new IntByReference(0);//獲取IP接入配置參數

     NET_DVR_IPPARACFG ipcfg=new  NET_DVR_IPPARACFG();

   ipcfg.write();

     Pointer lpIpParaConfig =ipcfg.getPointer();

        sdk.NET_DVR_GetDVRConfig(uid,sdk.NET_DVR_GET_IPPARACFG,new NativeLong(0),lpIpParaConfig,ipcfg.size(),ibrBytesReturned);

    ipcfg.read();

4.注銷設備:

  代碼:sdk.NET_DVR_Logout(uid);

5.釋放SDK

  代碼:sdk.NET_DVR_Cleanup();

 

詳細例子:

package ClientDemo;

import com.sun.jna.NativeLong;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference;

import ClientDemo.HCNetSDK.NET_DVR_DEVICEINFO_V30;
import ClientDemo.HCNetSDK.NET_DVR_IPPARACFG;
import ClientDemo.HCNetSDK.NET_DVR_WORKSTATE_V30;

public class Device_demo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		HCNetSDK sdk = HCNetSDK.INSTANCE;
		if(!sdk.NET_DVR_Init()){
			System.out.println("SDK初始化失敗");
			return ;
		}
		NativeLong uid=new  NativeLong(-1);
		NET_DVR_DEVICEINFO_V30 devinfo=new NET_DVR_DEVICEINFO_V30();//設備信息
		String ip="192.168.10.191";
		short port=8000;
		uid=sdk.NET_DVR_Login_V30(ip,port,"admin","hk123456",devinfo);//返回一個用戶編號,同時將設備信息寫入devinfo
		int Iuid=uid.intValue();
		if(Iuid<0){
			System.out.println("設備注冊失敗");
			return ;
		}
		NET_DVR_WORKSTATE_V30 devwork=new NET_DVR_WORKSTATE_V30();
		if(!sdk.NET_DVR_GetDVRWorkState_V30(uid, devwork)){
			//返回Boolean值,判斷是否獲取設備能力
			System.out.println("返回設備狀態失敗");
		}
		IntByReference ibrBytesReturned = new IntByReference(0);//獲取IP接入配置參數
		NET_DVR_IPPARACFG ipcfg=new NET_DVR_IPPARACFG();
		ipcfg.write();
		Pointer lpIpParaConfig =ipcfg.getPointer();
		sdk.NET_DVR_GetDVRConfig(uid,sdk.NET_DVR_GET_IPPARACFG,new NativeLong(0),lpIpParaConfig,ipcfg.size(),ibrBytesReturned);
		ipcfg.read();
		System.out.print("IP地址:"+ip);
		System.out.println("|設備狀態:"+devwork.dwDeviceStatic);//0正常,1CPU占用率過高,2硬件錯誤,3未知
		//顯示模擬通道
		for(int i=0;i< devinfo.byChanNum;i++){
			System.out.print("Camera"+i+1);//模擬通道號名稱
			System.out.print("|是否錄像:"+devwork.struChanStatic[i].byRecordStatic);//0不錄像,不錄像
			System.out.print("|信號狀態:"+devwork.struChanStatic[i].bySignalStatic);//0正常,1信號丟失
			System.out.println("|硬件狀態:"+devwork.struChanStatic[i].byHardwareStatic);//0正常,1異常			
		}
		sdk.NET_DVR_Logout(uid);
		sdk.NET_DVR_Cleanup();		
	}

}

 輸出:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM