先抱怨一下,打死都想不到,海康的攝像頭SDK居然是一個Java類,還有必須的兩個jar包(jna.jar,examples.jar)。鬼能想得到會這么命名。
下面開始吧。
Windows
-
把從官網下載的SDK(和當前系統對應)解壓,把庫文件整個拷貝到某個目錄(我是D:\hik\libs),然后把D:\hik\libs和D:\hik\libs\HCNetSDKCom加入到系統環境變量path中。可以嘗試從代碼中把這兩個文件夾加入path,我沒有試成功。
-
項目引入jna.jar和examples.jar這兩個jar包。注意:
一定要用官網SDK里面的,千萬不要用其他版本的jna
。 -
從ClientDemo中把HCNetSDK.java拷貝到自己的項目中(這就是神奇的SDK)。
-
開始主體,Java代碼:
public class CameraManager {
private static Logger logger = LoggerFactory.getLogger(CameraManager.class);
private static HCNetSDK sdk = HCNetSDK.INSTANCE;
private static NativeLong userId = new NativeLong(-1);//用戶登錄ID,值為0,1,2...
private static NativeLong startChan = new NativeLong(-1); // start channel number
private void login(String ip, short port, String username, String pwd){
//sdk初始化
if (!sdk.NET_DVR_Init()){
logger.error("海康SDK初始化失敗!" + sdk.NET_DVR_GetLastError());
}
//注冊設備
NET_DVR_DEVICEINFO_V30 deviceInfo = new NET_DVR_DEVICEINFO_V30();
//登錄
userId = sdk.NET_DVR_Login_V30(ip, port, username, pwd, deviceInfo);
if (userId.intValue() < 0){
logger.error("攝像頭用戶登錄失敗!Err:" + sdk.NET_DVR_GetLastError());
}
startChan.setValue(deviceInfo.byStartChan);
}
public boolean takePic(String ip, short port, String username, String pwd) {
if (userId.intValue() < 0 || startChan.intValue() < 0) {
logger.info("執行海康攝像機登錄,ip[{}],port[{}],username[{}].",ip,port,username);
login(ip,port,username,pwd);
}
logger.info("准備拍照,userId:[{}],startChan:[{}]",userId.intValue(),startChan.intValue());
//拍照
NET_DVR_JPEGPARA strJpeg = new NET_DVR_JPEGPARA();
strJpeg.wPicQuality = 1; //圖像參數
strJpeg.wPicSize = 2;
String filePath = "E:\\123q.jpg";
boolean b = sdk.NET_DVR_CaptureJPEGPicture(userId, startChan, strJpeg, filePath);//嘗試用NET_DVR_CaptureJPEGPicture_NEW方法,但不是報43就是JDK崩潰....
if(!b){//單幀數據捕獲圖片
System.out.println("抓拍失敗!" + " err: " + sdk.NET_DVR_GetLastError());
}
else{
System.out.println("抓拍成功");
}
return b;
}
public void logout(){
sdk.NET_DVR_Logout(userId);
sdk.NET_DVR_Cleanup();
}
}
5. 完成。以上代碼中我刪除了異常處理。記得加上。
# Linux
1. 需要把libs和HCNetSDKCom加入到LD_LIBRARY_PATH中,而不是Path中。
vi /etc/profile在最后添加
```
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/jans/test/libs:/home/jans/test/libs/HCNetSDKCom
```
以上路徑替換為自己的包路徑。使用`source /etc/profile`立即生效。如果這里路徑填寫錯誤,攝像頭登錄時會報41錯誤。
2. 編輯/etc/ld.so.conf
一般這個文件只有一行。在文件末尾加入
```
/home/jans/test/libs
/home/jans/test/libs/HCNetSDKCom
```
以上路徑替換為自己的包路徑。使用`sudo ldconfig`立即生效。
3. 拷貝Linux項目demo中的HCNetSDK.java,(Linux和Windows中這個SDK名字一樣,但是內容不一樣,咱們寫的代碼無需更改)直接運行代碼即可。