第一次部署海康威视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位下進行的。
海康威視SDK版本:設備網絡SDK_V6.0.2.35(for Windows x64)
代碼編譯
導入項目時選擇eclipse項目導入,如果不懂的同學可以搜索下 IDEA如何導入ecplise項目,項目導進來后根據demo中的 SDK庫文件拷貝到該目錄下.txt 文件中的描述:
【注意事項】 ------------------------------------ 1. 請到海康威視官網下載最新版本設備網絡SDK:http://www.hikvision.com/Cn/download_more_401.html請修改程序代碼,其中HCNetSDK.java文件自己指定loadlibrary加載庫的路徑,【庫文件】里的HCNetSDK.dll、HCCore.dll、PlayCtrl.dll、SuperRender.dll、HCNetSDKCom文件夾等文件均拷貝到該路徑下。 HCNetSDKCom文件夾(包含里面的功能組件dll庫文件)需要和HCNetSDK.dll、HCCore.dll一起加載,放在同一個目錄下,且HCNetSDKCom文件夾名不能修改。
如果自行開發軟件不能正常實現相應功能,而且程序沒有指定加載的dll庫路徑,請在程序運行的情況下嘗試刪除HCNetSDK.dll。如果可以刪除,說明程序可能調用到系統盤Windows->System32目錄下的dll文件,建議刪除或者更新該目錄下的相關dll文件;如果不能刪除,dll文件右鍵選擇屬性確認SDK庫版本。
如按上述步驟操作后還是不能實現相應功能,請根據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);- 1
為
HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary("你的項目絕對路徑/HCNetSDK", HCNetSDK.class); //你的項目絕對路徑指 D:\Workspace\ClientDemo-NetBeansPro- 1
更改
PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary("PlayCtrl", PlayCtrl.class);- 1
為
PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary("你的項目絕對路徑/PlayCtrl.dll", PlayCtrl.class); //注意此處的PlayCtrl必須加dll后綴,要不然會報錯- 1
解決完錯誤后,再次打開 ClientDemo.java 中的main方法運行一下,終于出現了久違的畫面。
終于成功運行起來了,我們興致沖沖的點擊注冊,卻提示 注冊失敗 。這是什么問題?好吧,debug一下,發現此處代碼
- 1
- 2
中的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到底代表的哪個錯誤,好吧,去文檔(設備網絡SDK編程指南(DVR&NVR).pdf)里面查一下,文檔中描述說
| NET_DVR_ALLOC_RESOURCE_ERROR | 41 | SDK 資源分配錯誤 |
SDK資源分配錯誤,是不是資源文件沒有引用全啊。沒辦法,給技術支持發郵件吧。技術支持回復將所有的庫文件全拷貝到項目路徑下。果然是資源沒有引用全的原因。
好吧,照搬,把所有文件拷貝進去后,點擊注冊,成功了! - _ - - _ - - _ -但是,為什么要拷貝那么多啊,那么多文件放在項目下肯定不合適啊,肯定會有文件用不到啊。
總結
經過我的努力,發現只需要將
HCNetSDK.dll HCCore.dll HCNetSDKCom文件夾 PlayCtrl.dll SuperRender.dll AudioRender.dll ssleay32.dll libeay32.dll文件和文件夾拷貝到項目目錄下,官方的說明里面直接是少了三個dll文件。T_T T_T T_T
最后,如果拷貝以上文件還是報錯的話,建議將所有的dll文件全拷貝到項目根目錄下。
這就是我運行海康威視官方JAVA SDK DEMO的所有坑,記錄一下,讓大家少走彎路。
總結
以上是生活随笔為你收集整理的第一次部署海康威视DEMO的一些坑,最终运行成功的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Matlab之函数绘图函数ezplot
- 下一篇: excel规划求解功能总结