Java海康SDK二次开发中实现高度可定制化的解决方案

一、概述

海康SDK是一款应用广泛的视频监控软件开发包,对于需要进行视频监控相关开发的开发者来说,海康SDK是一个非常好的选择。但是,在实际使用中,如果需要实现高度可定制化的解决方案,就需要对海康SDK进行二次开发。

二、海康SDK二次开发的基本步骤

1. 下载海康SDK

在进行海康SDK二次开发之前,首先需要从官网上下载SDK,这里我们选择官网上提供的海康SDK V6.0版本,下载地址为:

https://www.hikvision.com/cn/download_more_403.html

2. 安装海康SDK

下载完成后,需要将SDK安装到本地,安装过程中需要根据提示一步一步进行。

3. 导入SDK

完成安装后,需要在项目中导入SDK,导入SDK需要进行以下步骤:

3.1 创建Java工程

在Eclipse中创建一个Java工程,工程名为Demo。

3.2 将SDK拷贝到工程中

将SDK安装目录中的java文件夹拷贝到Demo工程的src目录下。

3.3 添加SDK到编译路径

在Eclipse中,右键单击Demo工程,选择Build Path -> Configure Build Path。

3.4 添加SDK到库中

在Configure Build Path窗口中,选择Libraries,单击Add External JARs,在弹出的文件选择对话框中选择SDK中的jar包,如:HCNetSDK.jar。

以上步骤完成后,就可以在Java项目中使用海康SDK了。

三、实现高度可定制化的解决方案

1. 设计方案

在进行高度可定制化的解决方案设计时,需要根据实际需求和业务流程进行设计。在海康SDK的应用场景中,一般需求是需要展示监控画面,并进行相关控制,比如云台控制、截图等,同时还需要将监控画面录制下来,保存到本地。

1.1 设计思路

根据上述需求,可以将整个解决方案分为两个部分,即监控画面展示与控制、监控画面录制。在每个部分中,还需要选择一些关键技术进行应用。

1.2 技术选型

监控画面展示与控制中,可使用Java Swing技术进行实现,并结合海康SDK中的相关API实现云台控制等功能;监控画面录制中,可以使用FFmpeg等第三方框架进行实现。

2. 实现过程

具体实现过程如下:

2.1 展示监控画面及控制

使用Java Swing技术进行实现,需要将海康SDK中的相关API进行封装。

public class VideoPanel extends JPanel {

private static final long serialVersionUID = 1L;

HCNetSDK hCNetSDK;

public HCNetSDK.NET_DVR_DEVICEINFO_V30 m_strDeviceInfo;// 设备信息

public NativeLong lUserID;// 用户句柄

public NativeLong lPreviewHandle;// 预览句柄

/**

* 监控控件初始化

*/

public void init() {

// 初始化海康SDK

hCNetSDK = HCNetSDK.INSTANCE;

hCNetSDK.NET_DVR_Init();

// 登录设备

lUserID = loginDevice("192.168.1.64", "admin", "admin");

if (lUserID.longValue() < 0) {

JOptionPane.showMessageDialog(this, "登陆失败");

}

// 开始预览

lPreviewHandle = startPreview();

if (lPreviewHandle.longValue() < 0) {

JOptionPane.showMessageDialog(this, "预览失败");

}

}

/**

* 登录设备

*

* @param sDeviceIP 设备IP

* @param sUserName 用户名

* @param sPassword 密码

* @return 用户ID

*/

public NativeLong loginDevice(String sDeviceIP, String sUserName, String sPassword) {

m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30();

NativeLong lUserID = hCNetSDK.NET_DVR_Login_V30(sDeviceIP, (short) 8000, sUserName, sPassword, m_strDeviceInfo);

return lUserID;

}

/**

* 开始预览

*

* @return 预览句柄

*/

public NativeLong startPreview() {

HCNetSDK.NET_DVR_PREVIEWINFO strPreviewInfo = new HCNetSDK.NET_DVR_PREVIEWINFO();

strPreviewInfo.lChannel = new NativeLong(1);// 预览通道号

strPreviewInfo.dwStreamType = 0; // 码流类型:0-主码流,1-子码流,2-流ID,3-流ID扩展,由设备返回的实际码流类型可能会与设备配置有出入

strPreviewInfo.dwLinkMode = 0; // 连接方式:0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4- RTP/RTSP,5- RTP/HTTP

NativeLong lPreviewHandle = hCNetSDK.NET_DVR_RealPlay_V40(lUserID, strPreviewInfo, null);

return lPreviewHandle;

}

/**

* 停止预览

*/

public void stopPreview() {

// 停止预览

if (lPreviewHandle.longValue() >= 0) {

hCNetSDK.NET_DVR_StopRealPlay(lPreviewHandle);

}

// 注销用户

if (lUserID.longValue() >= 0) {

hCNetSDK.NET_DVR_Logout(lUserID);

}

// 释放海康SDK资源

hCNetSDK.NET_DVR_Cleanup();

}

}

2.2 监控画面录制

2.2.1 添加FFmpeg库

首先,在Java项目中添加FFmpeg库文件。可将FFmpeg库文件拷贝到项目的libs目录下,然后将库文件添加到编译路径中。

2.2.2 实现录制

在Java中,使用java.lang.Process执行控制台命令,从而实现视频录制的功能。FFmpeg提供了非常丰富的命令行选项,这里只是简单地演示如何使用FFmpeg进行录制。

public class Record implements Runnable {

private String filePath;

private boolean flag = true;

public Record(String filePath) {

super();

this.filePath = filePath;

}

public void stopRecord() {

flag = false;

}

public void run() {

try {

// cmd命令

String cmd = "ffmpeg -f dshow -i video=\"USB2.0 Camera\" -r 15 -b 800000 -s 640x480 -acodec copy -vcodec copy " + filePath;

Process process = Runtime.getRuntime().exec(cmd);

InputStream error = process.getErrorStream();

InputStream input = process.getInputStream();

byte[] b = new byte[1024];

while (flag) {

int i = error.read(b, 0, b.length);

if (i != -1) {

System.out.println(new String(b, 0, i, "GBK"));

}

int j = input.read(b, 0, b.length);

if (j != -1) {

System.out.println(new String(b, 0, j, "GBK"));

}

}

input.close();

error.close();

process.waitFor();

} catch (Exception e) {

e.printStackTrace();

}

}

}

四、总结

通过上述的实现过程,我们成功地实现了高度可定制化的海康SDK解决方案。但是,在实际应用中,还需要进行更多的工业级优化和细节处理,以适应不同的应用场景和需要。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签