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

一,前言

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

二,下载

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

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

三,整理成项目并运行

下载完之后打开该目录:根据个人的下载盘符,这是我的目录 H:\海康设备资料\CH-HCNetSDKV5.3.6.30_build20180816_Win64\Demo示例\4- Java 开发示例\1-ClientDemo\ClientDemo-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了,自己往项目中整合。

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

原文地址:https://www.cnblogs.com/hotspring/p/10696704.html

时间: 2024-11-01 17:10:35

海康视频下载,以及实时视频预览的相关文章

海康视频监控---Demo

1,使用在页面中调用ActiveX控件 <object classid='clsid:E7EF736D-B4E6-4A5A-BA94-732D71107808' codebase='' standby='Waiting...' id='PreviewActiveX' width='100%' height='100%' name='ocx' align='center'> <param name='wndtype' value='1'> <param name='playmo

深度分析:Android4.3下MMS发送到附件为音频文件(音频为系统内置音频)的彩信给自己,添加音频-发送彩信-接收彩信-下载音频附件-预览-播放(二,发送彩信&lt;1&gt;)

当准备工作(添加附件,输入文本内容)完成之后,我们这里开始进行该流程分析的第二阶段,也就是发送彩信.这里我们从ComposeMessageActivity类的点击发送按钮(mSendButtonMms)的点击事件开始:<TAG 1-1> @Override public void onClick(View v) { if (mShowTwoButtons && (v == mSendButtonSmsViewSec || v == mSendButtonMmsViewSec)

Android实现小视频的录制和预览,界面和功能靠拢微信。

不过是看淡利益,看穿时间,推己及人. 先看一下效果图: 1,实现的功能 a)全屏幕预览录制播放. b)录制时间可定制(本实例15秒),录制按钮动画效果. c)录制完成即刻播放,可保存删除文件. d)录制按钮可以随意拖动复位. 2,可拓展的功能 a)可添加点击拍照功能. b)可添加开关闪关灯功能. c)对焦功能.(缺陷) d)可添加播放暂停功能. e)可分段录制,拼接视屏. 3,未实现的微信效果 a)录制视频时,拖动录制按钮实现焦距调整. b)视频压缩. 4,注意事项 a)本例以goole官方Ca

海康视频录像文件打包格式解析

海康威视视频录像以PS格式打包,录像设置时如将音频设置为G.711 Alaw或者Ulaw,录制下来的文件使用vlc/ffplay等标准播放器播放不出音频,需要向海康申请专用的转换库来转换,当然,打包是按照标准PS格式来打,同学们也可以自己解析文件读取另存 解析的过程按照PS包-->system header--->program stream map--->音视频PES包一路下来,海康在包中自定义了一些id,可以不理会 我手头的文件海康在系统头中定义了四个streamid,分别是0xe0

java文件上传、下载、图片预览

多文件保存到本地: @ResponseBody    @RequestMapping(value = "/uploadApp",produces = { "application/json;charset=UTF-8" },method= RequestMethod.POST)    public String uploadApp( HttpServletRequest request,@RequestParam("file") Multipar

截取视频第一帧作为预览图片

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>capture screen</title> </head> <body> <video id="video" controls="controls"> <source src="123.MP4"

百度编辑器上传视频以及视频编辑器预览bug解决

百度编辑器目前来讲是运用比较广泛的一个编辑器了,不仅开源还有中文的文档,所以很受欢迎,不过里面也有许多地方需要开发人员自己调试,其中一个比较常见的问题就是上传视频了,上传视频本身有一些小bug,这个基本最大的体现就是编辑器内无法预览上传的视频问题. 我搜集了网上的解决方案,发现基本都一样,大多数都是复制黏贴的答案,虽说一定程度解决了编辑器上传不显示的问题,但却造成了新的bug,例如上传视频框无法关闭,还有只要等切换源码模式再返回来又看不到预览的视频了等. 所以最后还是自己动手丰衣足食,最后终于找

JavaScript+HTML设置视频预览图

第一种: 设置video属性poster <video class="videoContent" controls poster="img/poster.png"> <source src="http://www.huazuo.com/video/brand.mp4" type="video/mp4"/></video> 第二种: 设置视频第一帧为预览图 HTML代码:(调整output的l

数据库下载word预览功能的研究

本文参考了这里的一些方法http://tobetobe.blog.51cto.com/1392243/354420 一直想通过缓存来实现,奈何技术不够,走了曲线救国的思路,先下载,然后预览,删除下载文件.好吧主要给自己做个备忘. 注意 1.关闭前清空剪切板,否则会提示删除文件失败或者打开word预览是弹提示说已占用. 2.打开新预览之前要sleep一段时间确保word完全退出 3.粘贴时需要sleep一段时间确保粘贴完成 代码: using System; using System.Collec