海康威視(HIKVISION) JAVA SDK Demo成功運行

海康威視(HIKVISION) JAVA SDK Demo成功運行

引子

調海康的JAVA SDK花費時間較長,所以記錄下,爲其他小夥伴填填坑,提高一下效率。官方文檔確實少,而且demo中的說明各種坑。

下載

官方SDK下載地址:https://www.hikvision.com/cn/download_more_570.html(64位SDK)

注意:官方SDK區分32位和64位,如果用64位的SDK需要使用JDK64位的,不能使用32位JDK。32位的SDK同理,只能使用32位JDK的

說明

官方的Demo的編譯環境:Eclipse+Swing插件 或者 NetBeans IDE V8.2,使用的JDK爲1.8。

我使用IDEA編譯通過了,Eclipse和IDEA區別不大。我的編譯環境:IDEA+JDK1.8(64位)+ Windows 10(64位)。編譯環境全是在64位下進行的。

代碼編譯

導入項目時選擇eclipse項目導入,如果不懂的同學可以搜索下 IDEA如何導入ecplise項目,項目導進來後根據demo中的 SDK庫文件拷貝到該目錄下.txt 文件中的描述:

【注意事項】
------------------------------------
1. 請到海康威視官網下載最新版本設備網絡SDK:http://www.hikvision.com/Cn/download_more_401.html

2. 請修改程序代碼,其中HCNetSDK.java文件自己指定loadlibrary加載庫的路徑,【庫文件】裏的HCNetSDK.dll、HCCore.dll、PlayCtrl.dll、SuperRender.dll、HCNetSDKCom文件夾等文件均拷貝到該路徑下。 HCNetSDKCom文件夾(包含裏面的功能組件dll庫文件)需要和HCNetSDK.dll、HCCore.dll一起加載,放在同一個目錄下,且HCNetSDKCom文件夾名不能修改。

3. 如果自行開發軟件不能正常實現相應功能,而且程序沒有指定加載的dll庫路徑,請在程序運行的情況下嘗試刪除HCNetSDK.dll。如果可以刪除,說明程序可能調用到系統盤Windows->System32目錄下的dll文件,建議刪除或者更新該目錄下的相關dll文件;如果不能刪除,dll文件右鍵選擇屬性確認SDK庫版本。

4. 如按上述步驟操作後還是不能實現相應功能,請根據NET_DVR_GetLastError返回的錯誤號判斷原因。

添加文件

根據文件描述步驟拷入對應的文件和文件夾。第二條中少寫了一個dll是 AudioRender.dll 請將此dll一併拷貝到項目的根目錄下。

完成後,我們的項目目錄是這個樣子
項目目錄列表
如果項目報錯,將項目中的 jna.jar 包添加到項目的Libraries中。

項目不報錯後,可以打開 ClientDemo.java 中的main方法運行一下。如果能成功運行,祝賀你,或許你已經可以調通設備了。如果不能運行請往下繼續閱讀。

問題

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'HCNetSDK: ÕҲ»µ½ָ¶

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'PlayCtrl': ÕҲ»µ½ָ¶¨

遇到上述的兩種錯誤時,不要驚慌,打開 HCNetSDK.java 文件。

更改

HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary("HCNetSDK", HCNetSDK.class);

HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary("你的項目絕對路徑/HCNetSDK", HCNetSDK.class);  //你的項目絕對路徑指 D:\Workspace\ClientDemo-NetBeansPro

更改

PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary("PlayCtrl", PlayCtrl.class);

PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary("你的項目絕對路徑/PlayCtrl.dll", PlayCtrl.class);  //注意此處的PlayCtrl必須加dll後綴,要不然會報錯

解決完錯誤後,再次打開 ClientDemo.java 中的main方法運行一下,終於出現了久違的畫面。
在這裏插入圖片描述
終於成功運行起來了,我們興致沖沖的點擊註冊,卻提示 註冊失敗 。這是什麼問題?好吧,debug一下,發現此處代碼

lUserID = hCNetSDK.NET_DVR_Login_V30(m_sDeviceIP,
                (short) iPort, jTextFieldUserName.getText(), new String(jPasswordFieldPassword.getPassword()), m_strDeviceInfo);

中的lUserID返回-1,爲啥會返回-1呢,不知道,完全不懂。

排查

SDK庫文件拷貝到該目錄下.txt 文件中的第4條描述使用NET_DVR_GetLastError錯誤號判斷原因,好吧,我們加上輸入打印。

lUserID = hCNetSDK.NET_DVR_Login_V30(m_sDeviceIP,
                (short) iPort, jTextFieldUserName.getText(), new String(jPasswordFieldPassword.getPassword()), m_strDeviceInfo);
System.out.println("註冊失敗錯誤碼:" + hCNetSDK.NET_DVR_GetLastError());

打印出來發現返回41。這個41到底代表的哪個錯誤,好吧,去官方查一下,查了一圈沒有查到,沒辦法,給技術支持發郵件吧。技術支持回覆將所有的庫文件全拷貝到項目路徑下。

好吧,照搬,把所有文件拷貝進去後,點擊註冊,成功了! - _ - - _ - - _ - 但是,爲什麼要拷貝那麼多啊,那麼多文件放在項目下肯定不合適啊,肯定會有文件用不到啊。

總結

經過我的努力,發現只需要將

HCNetSDK.dll、HCCore.dll、HCNetSDKCom文件夾、PlayCtrl.dll、SuperRender.dll、AudioRender.dll、ssleay32.dll、libeay32.dll

文件和文件夾拷貝到項目目錄下,官方的說明裏面直接是少了三個dll文件。- _ - - _ - - _ -

最後,如果拷貝以上文件還是報錯的話,建議將所有的dll文件全拷貝到項目根目錄下。

這就是我運行海康威視官方JAVA SDK DEMO的所有坑,記錄一下,讓大家少走彎路。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章