海康视频下载,以及实时视频预览

一,前言   公司一项目需要拿到海康刻录机里面某时间段的视频去刻录。遇到问题第一时间看官网有么有demo可以套用,哎,一言难尽,打开官网看到文档后,感觉长得不像,就没继续看了,不知道怎...

一,前言

  公司一项目需要拿到海康刻录机里面某时间段的视频去刻录。遇到问题第一时间看官网有么有demo可以套用,哎,一言难尽,打开官网看到文档后,感觉长得不像,就没继续看了,不知道怎么弄的我,迷茫着在网上找答案,网上这方面的资料也少的厉害。最终还是硬着头皮把官网上的看着像的全下载了,终于找到了自己想要目标

二,下载

官网文档 https://www.hikvision.com/cn/download_61.html 

请根据需要下载,这里我下载的是 设备网络SDK_Win64 :

 

 三,整理成项目并运行

 下载完之后打开该目录:根据个人的下载盘符,这是我的目录 H:海康设备资料CH-HCNetSDKV5.3.6.30_build20180816_Win64Demo示例4- Java 开发示例1-ClientDemoClientDemo-NetBeansPro

 

然后将整个ClientDemo-NetBeansPro文件拷贝到你的工作空间,用你的idea 或者 eclipse 打开,解决错误。这里提一句,切记你的jdk版本,你是用64位的SDK就需要64位 jdk 反之自己想。后面有用的。

eclipse 直接导进去就OK

idea需要手动添加 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没有的jar,网上自己搜,很多方式,以下只是我自己的方式。

这个添加完之后一般情况下没太多的错误,有啥错误自己瞅瞅改吧改吧也就没有了,过去半个月了,我也不太记得有啥比较难的错误。

这里需要提醒一句,下面图标红的这个文件一定的看。

 给大家看看我的工程目录,这里标记的几个文件需要处于同一级目录,切记不可以修改 HCNetSDKCom 文件名称,jar包记得添加

这里看一下HCNetSDK.dll文件的加载 

有一个有趣的现象,eclipse里的 HCNetSDK.dll 加载,没有写绝对路径是OK的,没有报 HCNetSDK.dll 文件找不到的情况,可在idea中 无论如何都得写绝对路径,不然加载不上HCNetSDK.dll,希望谁看到可以给我说下是怎么一回事。

报错,找不到 HCNetSDK.dll文件  一共有俩原因,一个是路径问题,一个是 jdk 版本问题(官网上下载的64位SDK,请使用64位JDK,这是一个血淋淋的经历,亲身体验到的痛苦)

给大家看下IDEA下 HCNetSDK.dll 文件的加载 

ClientDemo 这个是运行类(mian 方法),跑起来是一个Java swing界面(具体用的是swing 还是啥技术,没必要纠结)

填写刻录机的后台 登陆账号密码 IP端口号 

这里我就不演示成功后的样子了,没有现场环境了。

下来直接上菜把。。。  想要自己研究的可以根据这个swing界面跟踪 代码接口,也可以查看下载SDK里的文档说明,里面说的很详细

第一步 初始化 

第二步 注册登陆

第三步 下载指定视频(这里我只用到了按时间下载的视频)

首先再次展示一下项目结构

上代码(超级简单,这里是我下载测试使用的)

  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;// 设备信息
 19     static HCNetSDK.NET_DVR_IPPARACFG m_strIpparaCfg;// IP参数
 20     static HCNetSDK.NET_DVR_CLIENTINFO m_strClientInfo;// 用户参数
 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. 初始化开始====================================
 28         boolean initfalse = hCNetSDK.NET_DVR_Init();// 初始化
 29         if (initfalse != true) {
 30             System.out.println("初始化失败!");
 31         } else {
 32             System.out.println("初始化成功!");
 33         }
 34         // =====================初始化结束=====================================
 35 
 36         // =====================2. 注册服务开始====================================
 37         sDeviceIP = "92.206.75.30";// IP
 38         int iPort = 8000;// 端口号
 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("登陆注册成功");
 48         } else if (userID == -1) {
 49             System.out.println("登陆注册失败");
 50         }
 51 
 52         // =====================注册服务结束====================================
 53         
 54         
 55         // =====================按照开始时间和结束时间下载视频 开始====================================
 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");// 开始时间
 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");// 结束时间
 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             // 视频下载调用
 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();// 新建定时器
 87                 Downloadtimer.schedule(new DownloadTask(), 0, 5000);// 0秒后开始响应函数
 88                 // System.out.println("视频下载成功!");
 89             } else {
 90                 System.out.println("下载失败");// 按时间
 91                 System.out.println("laste error " + hCNetSDK.NET_DVR_GetLastError());
 92                 return;
 93             }
 94         }
 95     }
 96 
 97     /*************************************************
 98      * 类: DownloadTask 类描述: 下载定时器响应函数
 99      *************************************************/
100     class DownloadTask extends java.util.TimerTask {
101         // 定时器函数
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("由于网络原因或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("按时间下载结束!");
117             }
118         }
119     }
120 
121 }

 mian调用一下就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 }

这里没有调用 结束调用SDK的接口,因为没看到影响 。。。所以 。。。 

到此海康NVR或者DVR视频的下载就OK了,自己往项目中整合。

这里是给自己一个记录,同时看到哪里有问题,请兄弟们在下方留言指正。

  • 发表于 2019-04-12 17:00
  • 阅读 ( 1105 )
  • 分类:网络文章

条评论

请先 登录 后评论
不写代码的码农
小编

篇文章

作家榜 »

  1. 小编 文章
返回顶部
部分文章转自于网络,若有侵权请联系我们删除