第一次部署海康威视DEMO的一些坑,最终运行成功
海康威視(HIKVISION) JAVA SDK Demo成功運(yùn)行
- 引子
- 下載
- 說明
- 代碼編譯
- 添加文件
- 問題
- 排查
- 總結(jié)
引子
調(diào)海康的JAVA SDK花費(fèi)時(shí)間較長,所以記錄下,為其他小伙伴填填坑,提高一下效率。官方文檔確實(shí)少,而且demo中的說明各種坑。
下載
官方SDK下載地址:https://www.hikvision.com/cn/download_more_570.html(64位SDK)
注意:官方SDK區(qū)分32位和64位,如果用64位的SDK需要使用JDK64位的,不能使用32位JDK。32位的SDK同理,只能使用32位JDK的。
說明
官方的Demo的編譯環(huán)境:Eclipse+Swing插件 或者 NetBeans IDE V8.2,使用的JDK為1.8。
我使用IDEA編譯通過了,Eclipse和IDEA區(qū)別不大。我的編譯環(huán)境:IDEA+JDK1.8(64位)+ Windows 10(64位)。編譯環(huán)境全是在64位下進(jìn)行的。
海康威視SDK版本:設(shè)備網(wǎng)絡(luò)SDK_V6.0.2.35(for Windows x64)
代碼編譯
導(dǎo)入項(xiàng)目時(shí)選擇eclipse項(xiàng)目導(dǎo)入,如果不懂的同學(xué)可以搜索下 IDEA如何導(dǎo)入ecplise項(xiàng)目,項(xiàng)目導(dǎo)進(jìn)來后根據(jù)demo中的 SDK庫文件拷貝到該目錄下.txt 文件中的描述:
【注意事項(xiàng)】 ------------------------------------ 1. 請(qǐng)到海康威視官網(wǎng)下載最新版本設(shè)備網(wǎng)絡(luò)SDK:http://www.hikvision.com/Cn/download_more_401.html請(qǐng)修改程序代碼,其中HCNetSDK.java文件自己指定loadlibrary加載庫的路徑,【庫文件】里的HCNetSDK.dll、HCCore.dll、PlayCtrl.dll、SuperRender.dll、HCNetSDKCom文件夾等文件均拷貝到該路徑下。 HCNetSDKCom文件夾(包含里面的功能組件dll庫文件)需要和HCNetSDK.dll、HCCore.dll一起加載,放在同一個(gè)目錄下,且HCNetSDKCom文件夾名不能修改。
如果自行開發(fā)軟件不能正常實(shí)現(xiàn)相應(yīng)功能,而且程序沒有指定加載的dll庫路徑,請(qǐng)?jiān)诔绦蜻\(yùn)行的情況下嘗試刪除HCNetSDK.dll。如果可以刪除,說明程序可能調(diào)用到系統(tǒng)盤Windows->System32目錄下的dll文件,建議刪除或者更新該目錄下的相關(guān)dll文件;如果不能刪除,dll文件右鍵選擇屬性確認(rèn)SDK庫版本。
如按上述步驟操作后還是不能實(shí)現(xiàn)相應(yīng)功能,請(qǐng)根據(jù)NET_DVR_GetLastError返回的錯(cuò)誤號(hào)判斷原因。
添加文件
根據(jù)文件描述步驟拷入對(duì)應(yīng)的文件和文件夾。第二條中少寫了一個(gè)dll是 AudioRender.dll 請(qǐng)將此dll一并拷貝到項(xiàng)目的根目錄下。
完成后,我們的項(xiàng)目目錄是這個(gè)樣子
如果項(xiàng)目報(bào)錯(cuò),將項(xiàng)目中的 jna.jar 包添加到項(xiàng)目的Libraries中。
項(xiàng)目不報(bào)錯(cuò)后,可以打開 ClientDemo.java 中的main方法運(yùn)行一下。如果能成功運(yùn)行,祝賀你,或許你已經(jīng)可以調(diào)通設(shè)備了。如果不能運(yùn)行請(qǐng)往下繼續(xù)閱讀。
問題
Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'HCNetSDK: ???μ???Exception in thread “main” java.lang.UnsatisfiedLinkError: Unable to load library ‘PlayCtrl’: ???μ???¨
遇到上述的兩種錯(cuò)誤時(shí),不要驚慌,打開 HCNetSDK.java 文件。
更改
HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary("HCNetSDK", HCNetSDK.class);- 1
為
HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary("你的項(xiàng)目絕對(duì)路徑/HCNetSDK", HCNetSDK.class); //你的項(xiàng)目絕對(duì)路徑指 D:\Workspace\ClientDemo-NetBeansPro- 1
更改
PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary("PlayCtrl", PlayCtrl.class);- 1
為
PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary("你的項(xiàng)目絕對(duì)路徑/PlayCtrl.dll", PlayCtrl.class); //注意此處的PlayCtrl必須加dll后綴,要不然會(huì)報(bào)錯(cuò)- 1
解決完錯(cuò)誤后,再次打開 ClientDemo.java 中的main方法運(yùn)行一下,終于出現(xiàn)了久違的畫面。
終于成功運(yùn)行起來了,我們興致沖沖的點(diǎn)擊注冊(cè),卻提示 注冊(cè)失敗 。這是什么問題?好吧,debug一下,發(fā)現(xiàn)此處代碼
- 1
- 2
中的lUserID返回-1,為啥會(huì)返回-1呢,不知道,完全不懂。
排查
SDK庫文件拷貝到該目錄下.txt 文件中的第4條描述使用NET_DVR_GetLastError錯(cuò)誤號(hào)判斷原因,好吧,我們加上輸入打印。
lUserID = hCNetSDK.NET_DVR_Login_V30(m_sDeviceIP,(short) iPort, jTextFieldUserName.getText(), new String(jPasswordFieldPassword.getPassword()), m_strDeviceInfo); System.out.println("注冊(cè)失敗錯(cuò)誤碼:" + hCNetSDK.NET_DVR_GetLastError());打印出來發(fā)現(xiàn)返回41。這個(gè)41到底代表的哪個(gè)錯(cuò)誤,好吧,去文檔(設(shè)備網(wǎng)絡(luò)SDK編程指南(DVR&NVR).pdf)里面查一下,文檔中描述說
| NET_DVR_ALLOC_RESOURCE_ERROR | 41 | SDK 資源分配錯(cuò)誤 |
SDK資源分配錯(cuò)誤,是不是資源文件沒有引用全啊。沒辦法,給技術(shù)支持發(fā)郵件吧。技術(shù)支持回復(fù)將所有的庫文件全拷貝到項(xiàng)目路徑下。果然是資源沒有引用全的原因。
好吧,照搬,把所有文件拷貝進(jìn)去后,點(diǎn)擊注冊(cè),成功了! - _ - - _ - - _ -但是,為什么要拷貝那么多啊,那么多文件放在項(xiàng)目下肯定不合適啊,肯定會(huì)有文件用不到啊。
總結(jié)
經(jīng)過我的努力,發(fā)現(xiàn)只需要將
HCNetSDK.dll HCCore.dll HCNetSDKCom文件夾 PlayCtrl.dll SuperRender.dll AudioRender.dll ssleay32.dll libeay32.dll文件和文件夾拷貝到項(xiàng)目目錄下,官方的說明里面直接是少了三個(gè)dll文件。T_T T_T T_T
最后,如果拷貝以上文件還是報(bào)錯(cuò)的話,建議將所有的dll文件全拷貝到項(xiàng)目根目錄下。
這就是我運(yùn)行海康威視官方JAVA SDK DEMO的所有坑,記錄一下,讓大家少走彎路。
總結(jié)
以上是生活随笔為你收集整理的第一次部署海康威视DEMO的一些坑,最终运行成功的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Matlab之函数绘图函数ezplot
- 下一篇: excel规划求解功能总结