Java实现 海康摄像头抓拍图像

先抱怨一下,打死都想不到,海康的摄像头SDK居然是一个Java类,还有必须的两个jar包(jna.jar,examples.jar)。鬼能想得到会这么命名。
下面开始吧。

  1. 把从官网下载的SDK(和当前系统对应)解压,把库文件整个拷贝到某个目录(我是D:\hik\lib),然后把D:\hik\lib和D:\hik\lib\HCNetSDKCom加入到系统环境变量path中。可以尝试从代码中把这两个文件夹加入path,我没有试成功。
  2. 项目引入jna.jar和examples.jar这两个jar包。注意:一定要用官网SDK里面的,千万不要用其他版本的jna。
  3. 从ClientDemo中把HCNetSDK.java拷贝到自己的项目中(这就是神奇的SDK)。
  4. 开始主体,Java代码:
public class CameraManager {

    private static Logger logger = LoggerFactory.getLogger(CameraManager.class);
    private static HCNetSDK sdk = HCNetSDK.INSTANCE;
    private static NativeLong userId = new NativeLong(-1);//用户登录ID,值为0,1,2...
    private static NativeLong startChan = new NativeLong(-1); // start channel number

    private void login(String ip, short port, String username, String pwd){
        //sdk初始化
        if (!sdk.NET_DVR_Init()){
            logger.error("海康SDK初始化失败!" + sdk.NET_DVR_GetLastError());
        }
        //注册设备
        NET_DVR_DEVICEINFO_V30 deviceInfo = new NET_DVR_DEVICEINFO_V30();
        //登录
        userId = sdk.NET_DVR_Login_V30(ip, port, username, pwd, deviceInfo);
        if (userId.intValue() < 0){
            logger.error("摄像头用户登录失败!Err:" + sdk.NET_DVR_GetLastError());
        }
        startChan.setValue(deviceInfo.byStartChan);
    }

    public boolean takePic(String ip, short port, String username, String pwd) {
        if (userId.intValue() < 0 || startChan.intValue() < 0) {
            logger.info("执行海康摄像机登录,ip[{}],port[{}],username[{}].",ip,port,username);
            login(ip,port,username,pwd);
        }
        logger.info("准备拍照,userId:[{}],startChan:[{}]",userId.intValue(),startChan.intValue());
        //拍照
        NET_DVR_JPEGPARA strJpeg = new NET_DVR_JPEGPARA();
        strJpeg.wPicQuality = 1; //图像参数
        strJpeg.wPicSize = 2;

        String filePath = "E:\\123q.jpg";
        boolean b = sdk.NET_DVR_CaptureJPEGPicture(userId, startChan, strJpeg, filePath);//尝试用NET_DVR_CaptureJPEGPicture_NEW方法,但是不是报43就是JDK崩溃....
        if(!b){//单帧数据捕获图片
            System.out.println("抓拍失败!" + " err: " + sdk.NET_DVR_GetLastError());
        }
        else{
            System.out.println("抓拍成功,buffer:"+jpegStringBuffer);
        }
        return b;
    }

    public void logout(){
        sdk.NET_DVR_Logout(userId);
        sdk.NET_DVR_Cleanup();
    }
}
  1. 完成。以上代码中我删除了异常处理。记得加上。

原文地址:https://www.cnblogs.com/qlong8807/p/11738533.html

时间: 2024-11-05 22:58:50

Java实现 海康摄像头抓拍图像的相关文章

java实现海康NVR/DVR设备工作状态获取

该功能需要到JNA的知识. 通过查阅海康设备网络SDK编程指南(DVR&NVR)可以知道海康SDK的调用方法都要同过如下过程: 虚线框的流程是可选部分,不会影响其他流程和模块的功能使用.具体的模块说明可以自行参考SDK开发文件. 主要功能代码: 测试例子,因此虚线部分功能不实现 1.初始化设备SDK:对整个网络SDK 系统的初始化,内存预分配等操作. 代码:HCNetSDK sdk = HCNetSDK.INSTANCE;    sdk.NET_DVR_Init();//返回booleaan值

海康摄像头配置固定IP

前言 首先要海康设备连接好网线,电脑客户端跟海康设备在同一个局域网络. 1.直接在海康网站下载SADP工具软件,安装SADP工具,如图所示: 2.安装成功后,桌面的出现设备网络搜索, 面板介绍:这里将SADP软件打开的面板分为两部分,在①号区域,主要显示设备的一些基本信息.包括型号,激活状态,IP地址,端口号等. ①号区域 激活状态 未激活:设备需要激活设置8-16位数字和字母组合的密码才可以使用,勾选编号前的小框,②号区域会弹出激活界面. 已激活:设备已有密码.如果不知道需要密码重置. 端口

HTML实现海康摄像头实时监控的一点心得

最近公司安排做CCFA的一些东西,有一项就是做一个网页播放摄像头的实时监控.网上百度了很久,很多都是直接用vlc插件实现,但是目前主流浏览器都已经不支持vlc插件了,搞了很久也没成功. 网上大多是这么实现的: <object type='application/x-vlc-plugin' id='vlc' events='True' width="720" height="540" pluginspage="http://www.videolan.o

海康摄像头遇到的不明白的地方

AfxEnableControlContainer 函数的使用与意义 AfxEnableControlContainer()函数是允许应用程序作为控件容器来使用,对于用MFC向导自动生成的单文档框架程序的C...APP::InitInstance()函数中自动加了这一句 AfxEnableControlContainer(); AfxEnableControlContainer() 负责布线所需的 CWnd 对象,以包含 OLE 控件支持结构.如果选择 OLE 控件支持时,此调用应用程序向导通过

C#:使用海康SDK绘图回调函数DrawFun()

简述 ??使用海康摄像头采集图像时,需要在图像上添加图标.文字等额外数据.可选择使用SDK提供的NET_DVR_RigisterDrawFun()函数注册绘图回调函数,使用NET_DVR_RealPlay_V40()的返回值(用于在DrawFun()函数中区分通道数据)及DrawFun回调函数的指针进行注册.注意:使用DrawFun回调函数,需要在调用NET_DVR_RealPlay_V40()时将第三个参数设置为null. 代码 class DeviceCamera : IDeviceCame

海康网络摄像机调用SDK解码Java版

两个回调函数: FRealDataCallBack 实现预览回调数据 DecCallBack 解码回调函数 在HCNetSDK.java补充相关函数和结构声明 //播放库函数声明,PlayCtrl.dll interface PlayCtrl extends StdCallLibrary { PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary("lib\\PlayCtrl", PlayCtrl.class); public static

海康抓拍机SDK开发

前言 项目采购的海康威视的抓拍机,需要首先获取抓拍图片,之后基于抓拍图片进行图像处理.本文基于海康SDK开发文档,按照开发步骤,咨询海康技术人员,现将开发过程记录如下. 主要过程的c++代码: /************************************************************************ * Copyright(c) 2016 ZRJ * All rights reserved. * * File: snap.h * Brief: 抓拍机配置头

海康设备获取YV12图像

概要: 准备: 海康SDK的下载地址:我下载的win64的.根据你自己的需求下载吧. http://www.hikvision.com/cn/download_more_570.html 这里笔者还推荐一个很有用的海康的客户端软件: http://www.hikvision.com/cn/download_more_390.html 4200/4000在DVS配置以及DVS密码丢失后可以起到很大帮助作用.(笔者对DVS的开发是接手以前一个同事的工作,密码丢失了,如果你的密码也忘记了的话,可以这样

海康SDK编程指南(C#二次开发版本)

海康SDK编程指南 目前使用的海康SDK包括IPC_SDK(硬件设备),Plat_SDK(平台),其中两套SDK都需单独调用海康播放库PlayCtrl.dll来解码视频流,返回视频信息和角度信息.本文仅对视频监控常用功能的使用进行说明,其它未实现功能请参看设备网络SDK使用手册和播放库编程指南V7.2. IPC_SDK编程指南 (一)    SDK的引用 由于IPC_SDK没有SDK安装程序,所以需手工把下面图表中的DLL放入Debug或者Release文件夹的根目录下供程序调用,或者加入系统环