基于海康威视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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值