海康攝像頭的二次開發(java)
我第一次接觸海康攝像頭的二次開發的項目,一開始的時候摸不清套路,走了不少彎路,現在準備把我的一些經驗留下來,讓大家參考一下。
1、首先到海康的官網下載下傳裝置網絡SDK:http://www.hikvision.com/cn/download_61.html,下載下傳的時候注意版本号;
2、然後将下載下傳的檔案解壓後,可以看到Demo示例、庫檔案、頭檔案和開發文檔以及一個說明文本(注意:txt文檔一定要仔細看,拷貝檔案也不要出錯,要不然後期做項目容易出現錯誤還不好找);
3、這是我自己寫的一個很簡陋的項目,如有需要可以去下載下傳:http://download.csdn.net/download/u012492535/10045386,雖然簡陋了一點,但是功能還是可以實作的(^▽^);
4、我們做海康的項目之前肯定會先看到這張流程圖,裡面的虛線部分是可選的,就是可以不必管,隻看實線框部分的即可。
我們按照他的流程往下看:
1、初始化裝置SDK,對整個網絡裝置的初始化、記憶體配置設定等操作。
代碼如下:
HCNetSDK sdk = HCNetSDK.INSTANCE;
sdk.NET_DVR_Init();//傳回booleaan值
2、注冊裝置,實作使用者的注冊功能,注冊成功後,傳回的使用者ID 作為其他功能操作的唯一辨別。
代碼如下:
NativeLong user = new NativeLong(-);// 注冊裝置
NET_DVR_DEVICEINFO_V30 devinfo = new NET_DVR_DEVICEINFO_V30();
user = sdk.NET_DVR_Login_V30(ipAddress, (short) port, userName,password, devinfo);//傳回一個使用者編号
3、裝置工作狀态的擷取(參數配置):
代碼如下:
NET_DVR_DEVICEINFO_V30 devinfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30();// 裝置資訊
IntByReference ibrBytesReturned = new IntByReference();// 擷取IP接入配置參數
NET_DVR_CAMERAPARAMCFG_EX struCamcfg = new NET_DVR_CAMERAPARAMCFG_EX();
struCamcfg.write();
Pointer lpIpParaConfig = struCamcfg.getPointer();
boolean flg =sdk.NET_DVR_GetDVRConfig(user,HCNetSDK.NET_DVR_GET_CCDPARAMCFG,
new NativeLong(), lpIpParaConfig,struCamcfg.size(), ibrBytesReturned);
struCamcfg.read();
4、登出裝置:
代碼如下:
5、釋放SDK空間:
代碼如下:
6、完整代碼如下:
public static void getPicturedisposition(String ip, short port,
String userName, String password) {
// 初始化裝置
HCNetSDK sdk = HCNetSDK.INSTANCE;
// 是否初始化成功
if (!sdk.NET_DVR_Init()) {
System.out.println("初始化失敗");
return ;
}
// 注冊裝置
NativeLong user = new NativeLong(-);
// 裝置資訊
NET_DVR_DEVICEINFO_V30 devinfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30();
// 傳回一個使用者編号
user = sdk.NET_DVR_Login_V30(ip, port, userName, password, devinfo);
int Iuid = user.intValue();
if (Iuid < ) {
System.out.println("注冊失敗");
return ;
}
// 裝置資訊
boolean bool = false;
if (!bool) {
IntByReference ibrBytesReturned = new IntByReference();// 擷取IP接入配置參數
NET_DVR_CAMERAPARAMCFG_EX struCamcfg = new NET_DVR_CAMERAPARAMCFG_EX();
struCamcfg.write();
Pointer lpIpParaConfig = struCamcfg.getPointer();
boolean flg = sdk.NET_DVR_GetDVRConfig(user,
HCNetSDK.NET_DVR_GET_CCDPARAMCFG,
new NativeLong(), lpIpParaConfig,
struCamcfg.size(), ibrBytesReturned);
struCamcfg.read();
if (!flg) {
System.out.println(sdk.NET_DVR_GetLastError());
}
// 擷取圖像參數
System.out.print("亮度是:"
+ struCamcfg.struVideoEffect.byBrightnessLevel);
System.out.print("|對比度是:"
+ struCamcfg.struVideoEffect.byContrastLevel);
System.out.print("|飽和度是:"
+ struCamcfg.struVideoEffect.bySaturationLevel);
System.out.print("|色調是:" + struCamcfg.struVideoEffect.byHueLevel);
System.out.print("|(銳度)清晰度是:"
+ struCamcfg.struVideoEffect.bySharpnessLevel);
System.out.print("|(防補光過曝)使能是:"
+ struCamcfg.struVideoEffect.byEnableFunc);
System.out.print("|強光抑制等級:"
+ struCamcfg.struVideoEffect.byLightInhibitLevel);
System.out
.println("|灰階值域" + struCamcfg.struVideoEffect.byGrayLevel);
}
// 登出裝置
sdk.NET_DVR_Logout(user);
// 釋放SDK
sdk.NET_DVR_Cleanup();
}
7、效果圖