海康视频下载,以及实时视频预览
一,前言
公司一項(xiàng)目需要拿到海康刻錄機(jī)里面某時(shí)間段的視頻去刻錄。遇到問(wèn)題第一時(shí)間看官網(wǎng)有么有demo可以套用,哎,一言難盡,打開(kāi)官網(wǎng)看到文檔后,感覺(jué)長(zhǎng)得不像,就沒(méi)繼續(xù)看了,不知道怎么弄的我,迷茫著在網(wǎng)上找答案,網(wǎng)上這方面的資料也少的厲害。最終還是硬著頭皮把官網(wǎng)上的看著像的全下載了,終于找到了自己想要目標(biāo)
二,下載
官網(wǎng)文檔?https://www.hikvision.com/cn/download_61.html?
請(qǐng)根據(jù)需要下載,這里我下載的是?設(shè)備網(wǎng)絡(luò)SDK_Win64?:
?
?三,整理成項(xiàng)目并運(yùn)行
?下載完之后打開(kāi)該目錄:根據(jù)個(gè)人的下載盤符,這是我的目錄 H:\海康設(shè)備資料\CH-HCNetSDKV5.3.6.30_build20180816_Win64\Demo示例\4- Java 開(kāi)發(fā)示例\1-ClientDemo\ClientDemo-NetBeansPro
?
然后將整個(gè)ClientDemo-NetBeansPro文件拷貝到你的工作空間,用你的idea 或者 eclipse 打開(kāi),解決錯(cuò)誤。這里提一句,切記你的jdk版本,你是用64位的SDK就需要64位 jdk 反之自己想。后面有用的。
eclipse 直接導(dǎo)進(jìn)去就OK
idea需要手動(dòng)添加 examples.jar和jna.jar
其中jna.jar可以在Maven的pom.xml中直接添加
1 <!-- https://mvnrepository.com/artifact/com.sun.jna/jna --> 2 <dependency> 3 <groupId>com.sun.jna</groupId> 4 <artifactId>jna</artifactId> 5 <version>3.0.9</version> 6 </dependency> 7添加examples.jar, 具體怎么添加maven沒(méi)有的jar,網(wǎng)上自己搜,很多方式,以下只是我自己的方式。
這個(gè)添加完之后一般情況下沒(méi)太多的錯(cuò)誤,有啥錯(cuò)誤自己瞅瞅改吧改吧也就沒(méi)有了,過(guò)去半個(gè)月了,我也不太記得有啥比較難的錯(cuò)誤。
這里需要提醒一句,下面圖標(biāo)紅的這個(gè)文件一定的看。
?
?給大家看看我的工程目錄,這里標(biāo)記的幾個(gè)文件需要處于同一級(jí)目錄,切記不可以修改 HCNetSDKCom 文件名稱,jar包記得添加
?
這里看一下HCNetSDK.dll文件的加載?
有一個(gè)有趣的現(xiàn)象,eclipse里的?HCNetSDK.dll 加載,沒(méi)有寫絕對(duì)路徑是OK的,沒(méi)有報(bào)?HCNetSDK.dll 文件找不到的情況,可在idea中 無(wú)論如何都得寫絕對(duì)路徑,不然加載不上HCNetSDK.dll,希望誰(shuí)看到可以給我說(shuō)下是怎么一回事。
報(bào)錯(cuò),找不到 HCNetSDK.dll文件? 一共有倆原因,一個(gè)是路徑問(wèn)題,一個(gè)是 jdk 版本問(wèn)題(官網(wǎng)上下載的64位SDK,請(qǐng)使用64位JDK,這是一個(gè)血淋淋的經(jīng)歷,親身體驗(yàn)到的痛苦)
給大家看下IDEA下 HCNetSDK.dll 文件的加載?
ClientDemo 這個(gè)是運(yùn)行類(mian 方法),跑起來(lái)是一個(gè)Java swing界面(具體用的是swing 還是啥技術(shù),沒(méi)必要糾結(jié))
?
填寫刻錄機(jī)的后臺(tái) 登陸賬號(hào), 密碼 ,IP,端口號(hào)?
這里我就不演示成功后的樣子了,沒(méi)有現(xiàn)場(chǎng)環(huán)境了。
下來(lái)直接上菜把。。。? 想要自己研究的可以根據(jù)這個(gè)swing界面跟蹤 代碼接口,也可以查看下載SDK里的文檔說(shuō)明,里面說(shuō)的很詳細(xì)
第一步 初始化?
第二步 注冊(cè)登陸
第三步 下載指定視頻(這里我只用到了按時(shí)間下載的視頻)
首先再次展示一下項(xiàng)目結(jié)構(gòu)
?
上代碼(超級(jí)簡(jiǎn)單,這里是我下載測(cè)試使用的)
1 package atest; 2 3 import java.util.Timer; 4 5 import javax.swing.JOptionPane; 6 7 import com.sun.jna.Native; 8 import com.sun.jna.NativeLong; 9 import com.sun.jna.Union; 10 import com.sun.jna.examples.win32.W32API.HWND; 11 import com.sun.jna.ptr.IntByReference; 12 13 import ClientDemo.ClientDemo; 14 import ClientDemo.HCNetSDK; 15 16 public class Test { 17 static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; 18 static HCNetSDK.NET_DVR_DEVICEINFO_V30 m_strDeviceInfo;// 設(shè)備信息 19 static HCNetSDK.NET_DVR_IPPARACFG m_strIpparaCfg;// IP參數(shù) 20 static HCNetSDK.NET_DVR_CLIENTINFO m_strClientInfo;// 用戶參數(shù) 21 static NativeLong lUserID;// 用戶句柄 22 static NativeLong m_lLoadHandle;// 下載句柄 23 static String sDeviceIP;// IP 24 static Timer Downloadtimer; 25 26 public void A_d() { 27 // =====================1. 初始化開(kāi)始==================================== 28 boolean initfalse = hCNetSDK.NET_DVR_Init();// 初始化 29 if (initfalse != true) { 30 System.out.println("初始化失敗!"); 31 } else { 32 System.out.println("初始化成功!"); 33 } 34 // =====================初始化結(jié)束===================================== 35 36 // =====================2. 注冊(cè)服務(wù)開(kāi)始==================================== 37 sDeviceIP = "92.206.75.30";// IP 38 int iPort = 8000;// 端口號(hào) 39 String textFieldUserName = "admin";// 用戶名 40 String passwordFieldPwd = "fpga12345";// 密碼 41 42 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30(); 43 lUserID = hCNetSDK.NET_DVR_Login_V30(sDeviceIP, (short) iPort, textFieldUserName, passwordFieldPwd, 44 m_strDeviceInfo); 45 long userID = lUserID.longValue(); 46 if (userID >= 0) { 47 System.out.println("登陸注冊(cè)成功"); 48 } else if (userID == -1) { 49 System.out.println("登陸注冊(cè)失敗"); 50 } 51 52 // =====================注冊(cè)服務(wù)結(jié)束==================================== 53 54 55 // =====================按照開(kāi)始時(shí)間和結(jié)束時(shí)間下載視頻 開(kāi)始==================================== 56 m_lLoadHandle = new NativeLong(-1); 57 if (m_lLoadHandle.intValue() == -1) { 58 HCNetSDK.NET_DVR_TIME struStartTime; 59 HCNetSDK.NET_DVR_TIME struStopTime; 60 61 struStartTime = new HCNetSDK.NET_DVR_TIME(); 62 struStopTime = new HCNetSDK.NET_DVR_TIME(); 63 struStartTime.dwYear = Integer.parseInt("2019");// 開(kāi)始時(shí)間 64 struStartTime.dwMonth = Integer.parseInt("3"); 65 struStartTime.dwDay = Integer.parseInt("26"); 66 struStartTime.dwHour = Integer.parseInt("18"); 67 struStartTime.dwMinute = Integer.parseInt("0"); 68 struStartTime.dwSecond = Integer.parseInt("0"); 69 70 struStopTime.dwYear = Integer.parseInt("2019");// 結(jié)束時(shí)間 71 struStopTime.dwMonth = Integer.parseInt("3"); 72 struStopTime.dwDay = Integer.parseInt("26"); 73 struStopTime.dwHour = Integer.parseInt("18"); 74 struStopTime.dwMinute = Integer.parseInt("5"); 75 struStopTime.dwSecond = Integer.parseInt("0"); 76 int m_iChanShowNum = 1;// 通道(攝像頭IP地址) 77 78 String sFileName = "H:\\test\\" + sDeviceIP + m_iChanShowNum + struStartTime.toStringTitle() + struStopTime.toStringTitle() + ".mp4"; 79 System.out.println(sFileName); 80 81 // 視頻下載調(diào)用 82 m_lLoadHandle = hCNetSDK.NET_DVR_GetFileByTime(lUserID, new NativeLong(m_iChanShowNum), struStartTime, 83 struStopTime, sFileName); 84 if (m_lLoadHandle.intValue() >= 0) { 85 hCNetSDK.NET_DVR_PlayBackControl(m_lLoadHandle, HCNetSDK.NET_DVR_PLAYSTART, 0, null); 86 Downloadtimer = new Timer();// 新建定時(shí)器 87 Downloadtimer.schedule(new DownloadTask(), 0, 5000);// 0秒后開(kāi)始響應(yīng)函數(shù) 88 // System.out.println("視頻下載成功!"); 89 } else { 90 System.out.println("下載失敗");// 按時(shí)間 91 System.out.println("laste error " + hCNetSDK.NET_DVR_GetLastError()); 92 return; 93 } 94 } 95 } 96 97 /************************************************* 98 * 類: DownloadTask 類描述: 下載定時(shí)器響應(yīng)函數(shù) 99 *************************************************/ 100 class DownloadTask extends java.util.TimerTask { 101 // 定時(shí)器函數(shù) 102 @Override 103 public void run() { 104 IntByReference nPos = new IntByReference(0); 105 hCNetSDK.NET_DVR_PlayBackControl(m_lLoadHandle, HCNetSDK.NET_DVR_PLAYGETPOS, 0, nPos); 106 if (nPos.getValue() > 100) { 107 hCNetSDK.NET_DVR_StopGetFile(m_lLoadHandle); 108 m_lLoadHandle.setValue(-1); 109 Downloadtimer.cancel(); 110 System.out.println("由于網(wǎng)絡(luò)原因或DVR忙,下載異常終止!"); 111 } 112 if (nPos.getValue() == 100) { 113 hCNetSDK.NET_DVR_StopGetFile(m_lLoadHandle); 114 m_lLoadHandle.setValue(-1); 115 Downloadtimer.cancel(); 116 System.out.println("按時(shí)間下載結(jié)束!"); 117 } 118 } 119 } 120 121 }?mian調(diào)用一下就OK
1 package atest; 2 3 public class Test_Main { 4 public static void main(String[] args) { 5 Test test = new Test(); 6 test.A_d(); 7 } 8 }這里沒(méi)有調(diào)用 結(jié)束調(diào)用SDK的接口,因?yàn)闆](méi)看到影響 。。。所以 。。。?
到此海康NVR或者DVR視頻的下載就OK了,自己往項(xiàng)目中整合。
這里是給自己一個(gè)記錄,同時(shí)看到哪里有問(wèn)題,請(qǐng)兄弟們?cè)谙路搅粞灾刚?/p>
?
轉(zhuǎn)載于:https://www.cnblogs.com/hotspring/p/10696704.html
總結(jié)
以上是生活随笔為你收集整理的海康视频下载,以及实时视频预览的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 海康sdkC++二次开发之回放下载
- 下一篇: mysql期末作业_MySql期中作业