Java_海康摄像头二次开发,视频录制上传__志伟随笔

1 篇文章 0 订阅
1 篇文章 0 订阅

关于海康威视摄像头的二次开发,在我看来,玩了两天,发现分三步吧

先说第一步,让海康的程序可以在自己项目里运行起来

首先在海康威视的官网下载对应的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一系列的问题解决后视频就下载到本地了

第三步,就是直接移植到自己的项目中调用就可以了

有不懂的小伙伴可以留言交流下,我也是刚接触海康二次开发的小白,嘻嘻

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值