Java怎么监控摄像头 java 摄像头 视频监控
关于海康威视摄像头的二次开发,在我看来,玩了两天,发现分三步吧
先说第一步,让海康的程序可以在自己项目里运行起来
首先在海康威视的官网下载对应的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;// IPstatic 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";// IPint 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("2023");// 开始时间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("2023");// 结束时间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 {// 定时器函数@Overridepublic 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一系列的问题解决后视频就下载到本地了
第三步,就是直接移植到自己的项目中调用就可以了
有不懂的小伙伴可以留言交流下,我也是刚接触海康二次开发的小白,嘻嘻