关于海康威视摄像头的二次开发,在我看来,玩了两天,发现分三步吧
先说第一步,让海康的程序可以在自己项目里运行起来
首先在海康威视的官网下载对应的SDK文档,看你电脑多少位的,32的就下32,64的就下载64的就可以了,别下载错了,下载完解压后如下图
然后将Demo文件中对应的版本导入到自己的开发工具中去,我用的Java开发的所以直接将java放进来,然后将dll全都放进来,大概目录如下图
这里需要注意的是那个Txt文档里面说的几句话,不要改Com名字还有放在同一目录下,如下图的注意事项
然后把里面的路径改一下,在自己的电脑运行一下看是否可以启动成功
HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary("HCNetSDK", HCNetSDK.class);
这里是个坑,我一开始以为这个路径是存放dll文件的路径,让我改来改去,一直提示加载错误,这个路径就是SDK的绝对路径,在这里这个路径不需要改,默认的就可以了,然后修改下ip,账户名,密码,端口号,然后点运行,然后就出现了如图的窗口
jLabelUserName.setText("用户名");
jLabelIPAddress.setText("IP地址");
jTextFieldPortNumber.setText("8000");
jTextFieldIPAddress.setText("xxx.xxx.4.66");
jLabelPortNumber.setText("端口");
jLabelPassWord.setText("密码");
jPasswordFieldPassword.setText("xxxxxx");
jTextFieldUserName.setText("admin");
这样第一步就完成了,
然后第二步的话就是写个测试小例子,让它运行起来,我写的代码很简单,都是根据官网文档上的接口写的,直接上代码把
public class Test {
static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
static HCNetSDK.NET_DVR_DEVICEINFO_V30 m_strDeviceInfo;// 设备信息
static HCNetSDK.NET_DVR_IPPARACFG m_strIpparaCfg;// IP参数
static HCNetSDK.NET_DVR_CLIENTINFO m_strClientInfo;// 用户参数
static NativeLong lUserID;// 用户句柄
static NativeLong m_lLoadHandle;// 下载句柄
static String sDeviceIP;// IP
static Timer Downloadtimer;
public void A_d() {
// =====================1. 初始化开始====================================
boolean initfalse = hCNetSDK.NET_DVR_Init();// 初始化
if (initfalse != true) {
System.out.println("初始化失败!");
} else {
System.out.println("初始化成功!");
}
// =====================初始化结束=====================================
// =====================2. 注册服务开始====================================
sDeviceIP = "xxxxxx";// IP
int iPort = 8000;// 端口号
String textFieldUserName = "admin";// 用户名
String passwordFieldPwd = "xxxxx";// 密码
m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30();
lUserID = hCNetSDK.NET_DVR_Login_V30(sDeviceIP, (short) iPort, textFieldUserName, passwordFieldPwd,
m_strDeviceInfo);
long userID = lUserID.longValue();
if (userID >= 0) {
System.out.println("登陆注册成功");
} else if (userID == -1) {
System.out.println("登陆注册失败");
}
// =====================注册服务结束====================================
// =====================按照开始时间和结束时间下载视频
// 开始====================================
m_lLoadHandle = new NativeLong(-1);
if (m_lLoadHandle.intValue() == -1) {
HCNetSDK.NET_DVR_TIME struStartTime;
HCNetSDK.NET_DVR_TIME struStopTime;
struStartTime = new HCNetSDK.NET_DVR_TIME();
struStopTime = new HCNetSDK.NET_DVR_TIME();
struStartTime.dwYear = Integer.parseInt("2019");// 开始时间
struStartTime.dwMonth = Integer.parseInt("5");
struStartTime.dwDay = Integer.parseInt("6");
struStartTime.dwHour = Integer.parseInt("18");
struStartTime.dwMinute = Integer.parseInt("0");
struStartTime.dwSecond = Integer.parseInt("0");
struStopTime.dwYear = Integer.parseInt("2019");// 结束时间
struStopTime.dwMonth = Integer.parseInt("5");
struStopTime.dwDay = Integer.parseInt("6");
struStopTime.dwHour = Integer.parseInt("18");
struStopTime.dwMinute = Integer.parseInt("5");
struStopTime.dwSecond = Integer.parseInt("0");
int m_iChanShowNum = 1;// 通道(摄像头IP地址)
String sFileName = "D:\\test\\" + sDeviceIP + m_iChanShowNum + struStartTime.toStringTitle()
+ struStopTime.toStringTitle() + ".mp4";
System.out.println(sFileName);
// 视频下载调用
m_lLoadHandle = hCNetSDK.NET_DVR_GetFileByTime(lUserID, new NativeLong(m_iChanShowNum), struStartTime,
struStopTime, sFileName);
if (m_lLoadHandle.intValue() >= 0) {
hCNetSDK.NET_DVR_PlayBackControl(m_lLoadHandle, HCNetSDK.NET_DVR_PLAYSTART, 0, null);
Downloadtimer = new Timer();// 新建定时器
Downloadtimer.schedule(new DownloadTask(), 0, 5000);// 0秒后开始响应函数
System.out.println("视频下载成功!");
} else {
System.out.println("下载失败");// 按时间
System.out.println("laste error " + hCNetSDK.NET_DVR_GetLastError());
return;
}
}
}
/*************************************************
* 类: DownloadTask 类描述: 下载定时器响应函数
*************************************************/
class DownloadTask extends java.util.TimerTask {
// 定时器函数
@Override
public void run() {
IntByReference nPos = new IntByReference(0);
hCNetSDK.NET_DVR_PlayBackControl(m_lLoadHandle, HCNetSDK.NET_DVR_PLAYGETPOS, 0, nPos);
if (nPos.getValue() > 100) {
hCNetSDK.NET_DVR_StopGetFile(m_lLoadHandle);
m_lLoadHandle.setValue(-1);
Downloadtimer.cancel();
System.out.println("由于网络原因或DVR忙,下载异常终止!");
}
if (nPos.getValue() == 100) {
hCNetSDK.NET_DVR_StopGetFile(m_lLoadHandle);
m_lLoadHandle.setValue(-1);
Downloadtimer.cancel();
System.out.println("按时间下载结束!");
}
}
}
}
直接写个main方法运行一下,看下结果
这个错误29,查看官方文档,是设备操作失败,然后可能是操作不允许把
然后经过XXXXXXXXXX一系列的问题解决后视频就下载到本地了
第三步,就是直接移植到自己的项目中调用就可以了
有不懂的小伙伴可以留言交流下,我也是刚接触海康二次开发的小白,嘻嘻