基于海康威视SDK javaC/S

基于海康威视SDK javaC/S http://www.hikvision.com/cn/download_61.html官网下载SDK开发包 配置文件 目录为lib/hc/HCNETSDK public HCNetSDK INSTANCE = CommonTools.loadLibrary(CommonTools.getLibPath() + "\\hc\\HCNetSDK", HCNetSDK.class); SDK初始化 private void initSDK() { boolean initSuccess = HCNetSDK.NET_DVR_Init(); if (!initSuccess) { showMessage("初始化失败HCNETSDK:" + getErrorMessage(INSTANCE.NET_DVR_GetLastError())); return; } HCNetSDK.NET_DVR_SetConnectTime(2000, 1); } 连接设备 private void login(String ip, short port, String username, String passwd) { if (userid != null && userid.longValue() >= 0) { HCNetSDK.NET_DVR_Logout(userid); } NET_DVR_DEVICEINFO_V30 lpDeviceInfo = new NET_DVR_DEVICEINFO_V30(); // 第二步 userid = HCNetSDK.NET_DVR_Login_V30(ip, port, username, passwd, lpDeviceInfo); if (HCNetSDK.NET_DVR_GetLastError() != 0) { userid = new NativeLong(-1); showMessage("登录失败:" + getErrorMessage(HCNetSDK.NET_DVR_GetLastError())); return; } System.out.println("序列号:" + new String(lpDeviceInfo.sSerialNumber)); System.out.println("通道数量:" + (lpDeviceInfo.byChanNum)); System.out.println("硬盘数量:" + (lpDeviceInfo.byDiskNum)); } -------------------------------------------------------------------------- 以下为实现截图和视频显示全部代码 package suigara.hardware.hc.htnet; import static suigara.hardware.hc.htnet.HCNetSDK.INSTANCE; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Panel; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.File; import java.util.ArrayList; import java.util.List; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JWindow; import suigara.hardware.hc.htnet.HCNetSDK.NET_DVR_CLIENTINFO; import suigara.hardware.hc.htnet.HCNetSDK.NET_DVR_DEVICEINFO_V30; import com.sun.jna.Native; import com.sun.jna.NativeLong; import com.sun.jna.platform.win32.WinDef.HWND; public class HCNetDemo { private static HCNetSDK HCNetSDK = INSTANCE; public static void main(String[] args) { new HCNetDemo(); } private NativeLong userid; private JFrame jf = new JFrame(); private List handles = new ArrayList(); public HCNetDemo() { init(); } private void init() { initUI(); initSDK(); login("192.168.32.31", (short) 8000, "admin", "12345"); } private void login(String ip, short port, String username, String passwd) { if (userid != null && userid.longValue() >= 0) { HCNetSDK.NET_DVR_Logout(userid); } NET_DVR_DEVICEINFO_V30 lpDeviceInfo = new NET_DVR_DEVICEINFO_V30(); // 第二步 userid = HCNetSDK.NET_DVR_Login_V30(ip, port, username, passwd, lpDeviceInfo); if (HCNetSDK.NET_DVR_GetLastError() != 0) { userid = new NativeLong(-1); showMessage("登录失败:" + getErrorMessage(HCNetSDK.NET_DVR_GetLastError())); return; } System.out.println("序列号:" + new String(lpDeviceInfo.sSerialNumber)); System.out.println("通道数量:" + (lpDeviceInfo.byChanNum)); System.out.println("硬盘数量:" + (lpDeviceInfo.byDiskNum)); } private void initSDK() { boolean initSuccess = HCNetSDK.NET_DVR_Init(); if (!initSuccess) { showMessage("初始化失败HCNETSDK:" + getErrorMessage(INSTANCE.NET_DVR_GetLastError())); return; } HCNetSDK.NET_DVR_SetConnectTime(2000, 1); } private String getErrorMessage(int errorCode) { return GlobalError.valueOf(errorCode).message(); } private void initUI() { // 这里用Panel,别自作主张换成JPanel(视频的panel和其父panel 只能用awt的容器,) Panel parent = new Panel(); parent.setPreferredSize(new Dimension(660, 530)); jf.add(parent); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); parent.setLayout(new FlowLayout()); final Panel panels[] = new Panel[4]; for (int i = 0; i < panels.length; i++) { Panel cardPanel = new Panel(); cardPanel.setPreferredSize(new Dimension(320, 240)); panels[i] = cardPanel; cardPanel.setBackground(new Color(0, 0, 0)); parent.add(cardPanel); final int channel = i + 1; cardPanel.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { panelRealplayMousePressed(e, channel); } }); } //按钮 final JButton start = new JButton("开始预览"); start.setPreferredSize(new Dimension(100, 25)); JButton capture = new JButton("截图"); capture.setPreferredSize(new Dimension(100, 25)); parent.add(start); parent.add(capture); jf.pack(); jf.setVisible(true); start.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (userid.longValue() < 0) { showMessage("请先登录"); return; } if (handles.isEmpty()) { for (int i = 0; i < panels.length; i++) { Panel cardPanel = panels[i]; HWND hwnd = createHWNDByComponent(cardPanel); NET_DVR_CLIENTINFO lpClientInfo = new NET_DVR_CLIENTINFO(); lpClientInfo.hPlayWnd = hwnd; lpClientInfo.lChannel = new NativeLong(i + 1); lpClientInfo.sMultiCastIP = ""; lpClientInfo.lLinkMode = new NativeLong(0); // 第三步 NativeLong handle = HCNetSDK.NET_DVR_RealPlay_V30( userid, lpClientInfo, null, null, true); int net_DVR_GetLastError = HCNetSDK .NET_DVR_GetLastError(); if (net_DVR_GetLastError != 0) { System.out.println("error:" + getErrorMessage(net_DVR_GetLastError)); } else { System.out.println("handle:" + handle.longValue()); handles.add(handle); } } if (!handles.isEmpty()) { start.setText("停止预览"); } } else { for (NativeLong handle : handles) { HCNetSDK.NET_DVR_StopRealPlay(handle); } handles.clear(); start.setText("开始预览"); } } }); capture.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String folder = "d:\\pic"; new File(folder).mkdirs(); for (NativeLong handle : handles) { HCNetSDK.NET_DVR_CapturePicture(handle, folder + "\\" + handle + ".jpg"); } int error = HCNetSDK.NET_DVR_GetLastError(); boolean hasSuccess = false; if (error != 0) { System.out.println(getErrorMessage(error)); showMessage("抓图失败:" + getErrorMessage(error)); } else { hasSuccess = true; showMessage("抓图成功,位置在:" + folder); } if (hasSuccess) { showMessage("抓图成功,位置在:" + folder); } } }); } private void showMessage(String msg) { JOptionPane.showMessageDialog(jf, msg); } private void panelRealplayMousePressed(java.awt.event.MouseEvent evt, int channel) { // 鼠标单击事件为双击 if (evt.getClickCount() == 2) { // 新建JWindow 全屏预览 final JWindow wnd = new JWindow(); // 获取屏幕尺寸 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); wnd.setSize(screenSize); wnd.setVisible(true); final HWND hwnd = new HWND(Native.getComponentPointer(wnd)); NET_DVR_CLIENTINFO lpClientInfo = new NET_DVR_CLIENTINFO(); lpClientInfo.hPlayWnd = hwnd; lpClientInfo.lChannel = new NativeLong(channel); lpClientInfo.sMultiCastIP = ""; lpClientInfo.lLinkMode = new NativeLong(0); final NativeLong lRealHandle = HCNetSDK.NET_DVR_RealPlay_V30( userid, lpClientInfo, null, null, true); // JWindow增加双击响应函数,双击时停止预览,退出全屏 wnd.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { if (evt.getClickCount() == 2) { // 停止预览 HCNetSDK.NET_DVR_StopRealPlay(lRealHandle); wnd.dispose(); } } }); } } private HWND createHWNDByComponent(Component parent) { return new HWND(Native.getComponentPointer(parent)); } }

转载于:https://www.cnblogs.com/sunflo/p/4276352.html

### 回答1: Java是一种广泛应用的编程语言,而海康威视是一家知名的视听设备生产厂商,其提供的SDK包含了海康威视所生产的视频监控设备通信协议以及数据处理方案。基于海康威视SDK进行Java的二次开发可以使开发者在海康威视设备的基础上构建出更加灵活、高效的应用程序,提高了开发效率和安全性。 使用Java的特性来实现对海康威视设备的二次开发,主要包括以下几个方面: 1. 处理设备的通信协议:使用Java的网络编程技术,基于海康威视SDK中所提供的设备通信协议进行二次开发,可以实现设备之间的数据交互。 2. 实现设备数据的解析:使用Java的数据处理技术,对从设备中获取的数据进行解析和处理,将数据转换成开发者想要的格式,以便进行进一步的数据处理。 3. 开发可视化界面:通过Java的图形用户界面(GUI)开发技术,基于海康威视SDK提供的数据处理方案,开发出用户友好的界面,实现对设备的远程控制和监控。 通过基于海康威视SDK进行Java的二次开发,开发者可以轻松地实现对海康威视设备的控制和监控,从而扩展了设备的功能和优化了用户体验。 ### 回答2: Java语言是当前应用非常广泛的编程语言之一,而海康威视则是国内领先的视频监控设备和解决方案的供应商之一,其SDK(软件开发工具包)提供了视频监控设备接口、流媒体接口等丰富的接口,使得设备厂商和软件开发者可以基于这些接口进行二次开发,实现更加专业化和个性化的应用。 如何通过Java语言来实现基于海康威视SDK的二次开发呢?首先我们需要在Java开发环境中添加海康威视SDK的jar包,然后根据SDK提供的接口进行编程。一般来说,SDK的使用大致可以分为以下几个步骤: 1. 初始化SDK环境:调用SDK提供的初始化接口完成SDK环境的初始化工作,包括设备搜索、连接、登录等工作。此外,还可以设置获取日志信息、设置报警回调等操作。 2. 获取设备信息:通过SDK提供的接口,可以获取监控设备的相关信息,包括设备类型、通道数、分辨率、帧率等,这些信息可以用于后续的开发工作。 3. 获取实时视频流:通过SDK提供的接口,可以获取监控设备传输的视频流数据,包括码流类型、码率、分辨率等,将视频数据解码后可以进行实时展示或者录制等操作。 4. 控制设备操作:通过SDK提供的接口,可以对监控设备进行各种控制操作,包括云台控制、预置点设置、图像参数调节等。 以上是基于海康威视SDK进行Java开发的一些常用操作,具体实现方式还需要根据不同的业务需求进行具体的编码工作。在实际开发过程中,我们还需要根据SDK提供的文档和示例代码进行参考和学习,以便更好地掌握SDK的使用技巧和开发经验。同时,我们还需要考虑安全、稳定性等因素,在保证功能实现的前提下,尽可能地减少软件系统的风险和漏洞。 ### 回答3: Java 是一种广泛使用的编程语言,在现代软件开发中非常流行。而海康威视是一家全球领先的视频监控解决方案提供商,其SDK具有一定的开放性和可定制性,可以用于二次开发。因此,Java 基于海康威视SDK实现二次开发是可行的。 首先,使用Java开发需要具备基本的Java编程知识、IDE开发环境和海康威视SDK技术文档。开发者可以通过访问海康威视的开发者网站,获取SDK的开发包和相关说明文档,从而开始二次开发。 其次,海康威视SDK提供了丰富的接口和工具,便于Java开发者调用和使用。通过SDK中提供的API,我们可以实现视频监控的实时预览、录像回放、设备管理等功能。同时,SDK还提供了多种编程语言和操作系统的支持,使得Java程序可以在不同平台上进行开发和运行。 最后,Java开发者可以结合SDK提供的示例代码和测试工具,对开发的程序进行测试和调试,确保其功能和性能能够满足要求。同时,Java开发者还应该遵循海康威视SDK的开发规范,尽可能地避免出现错误和异常。 总之,Java基于海康威视SDK实现二次开发是一项有挑战性的任务,需要具备Java编程技能和视频监控领域的相关经验。但是,通过充分利用SDK的开放性和可定制性,开发者可以实现更加灵活和高效的视频监控解决方案,为客户提供更好的用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值