Java 实现 海康摄像头抓拍图像 Windows、Linux
先抱怨一下,打死都想不到,海康的摄像头SDK居然是一个Java类,还有必须的两个jar包(jna.jar,examples.jar)。鬼能想得到会这么命名。
下面开始吧。
Windows
把从官网下载的SDK(和当前系统对应)解压,把库文件整个拷贝到某个目录(我是D:\hik\libs),然后把D:\hik\libs和D:\hik\libs\HCNetSDKCom加入到系统环境变量path中。可以尝试从代码中把这两个文件夹加入path,我没有试成功。
项目引入jna.jar和examples.jar这两个jar包。注意:
一定要用官网SDK里面的,千万不要用其他版本的jna。从ClientDemo中把HCNetSDK.java拷贝到自己的项目中(这就是神奇的SDK)。
开始主体,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("抓拍成功");
}
return b;
}
public void logout(){
sdk.NET_DVR_Logout(userId);
sdk.NET_DVR_Cleanup();
}
}
5. 完成。以上代码中我删除了异常处理。记得加上。
# Linux
1. 需要把libs和HCNetSDKCom加入到LD_LIBRARY_PATH中,而不是Path中。
vi /etc/profile在最后添加
```
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/jans/test/libs:/home/jans/test/libs/HCNetSDKCom
```
以上路径替换为自己的包路径。使用`source /etc/profile`立即生效。如果这里路径填写错误,摄像头登录时会报41错误。
2. 编辑/etc/ld.so.conf
一般这个文件只有一行。在文件末尾加入
```
/home/jans/test/libs
/home/jans/test/libs/HCNetSDKCom
```
以上路径替换为自己的包路径。使用`sudo ldconfig`立即生效。
3. 拷贝Linux项目demo中的HCNetSDK.java,(Linux和Windows中这个SDK名字一样,但是内容不一样,咱们写的代码无需更改)直接运行代码即可。
Java 实现 海康摄像头抓拍图像 Windows、Linux的更多相关文章
- 用libevent写的海康摄像头rtsp客户端
之前一直使用live555作为RTSP的客户端,但其框架臃肿,虽然支持各种格式,但实际中并没有这些需求,关键是其注重于格式的解析,却不注重网络IO,单线程下性能也不高,重新用libevent编写rts ...
- 通过ISAPI http协议控制海康摄像头
一直用海康的SDK进行摄像头控制,但有时候非常不灵活,必须有X86的主机,在嵌入式上面就不行,通过写一个HTTPCLIENT可以通过ISAPI来控制海康的摄像头. 代码如下:git@github.co ...
- 海康摄像头配置固定IP
前言 首先要海康设备连接好网线,电脑客户端跟海康设备在同一个局域网络. 1.直接在海康网站下载SADP工具软件,安装SADP工具,如图所示: 2.安装成功后,桌面的出现设备网络搜索, 面板介绍:这里将 ...
- java通过jni方式获取硬盘序列号(windows,linux)
linux系统java通过jni方式获取硬盘序列号 http://blog.csdn.net/starter110/article/details/8186788 使用jni在windows下读取硬盘 ...
- 海康PTZ云台摄像头调试之直接控制云台(C#)
众所周知,海康的摄像头sdk较为完善,但是对于新手来说还是有点麻烦. 今天写一篇随笔给大家展示下怎么控制海康摄像头的云台(前提是有ptz云台设备) 1.sdk准备 本文基于C#的frame来开发一个p ...
- 使用golang对海康sdk进行业务开发
目录 准备工作 开发环境信息 改写HCNetSDK.h头文件 开发过程 基本数据类型转换 业务开发 参考 项目最近需要改造升级:操作海康摄像头(包括登录,拍照,录像)等基本功能.经过一段时间研究后,发 ...
- EasyDarwin开源摄像机访问EasyCamera中海康摄像头语音对讲和云台控制转发实现
转自:http://blog.csdn.net/yanzhuomin/article/details/52887311 EasyCamera中关于摄像头SDK的调用都集中在EasyCameraSour ...
- Java二次开发海康SDK-对接门禁机
写在最前 SDK版本:CH-HCNetSDKV6.1.6.45_build20210302_win64 参考文档:海康SDK使用手册_V6.1 对接测试设备型号:DS-K1T671M 设备序列号:E5 ...
- 海康抓拍机SDK开发
前言 项目采购的海康威视的抓拍机,需要首先获取抓拍图片,之后基于抓拍图片进行图像处理.本文基于海康SDK开发文档,按照开发步骤,咨询海康技术人员,现将开发过程记录如下. 主要过程的c++代码: /** ...
随机推荐
- Kafka Eagle 安装
Kafka Eagle 是一款开源的 Kafka 集群监控系统. 一.下载 https://download.kafka-eagle.org/ 二.安装 # 解压 .tar.gz -C /opt/ / ...
- 性能分析 | Linux 内存占用分析
这篇博客主要介绍 linux 环境下,查看内存占用的两种方式:使用 ps,top等命令:查看/proc/[pid]/下的文件.文章简要介绍了命令的使用方法与一些参数意义,同时对/proc/[pid]/ ...
- P3146 [USACO16OPEN]248
P3146 [USACO16OPEN]248 题解 第一道自己码出的区间DP快庆祝一哈 2048 每次可以合并任意相邻的两个数字,得到的不是翻倍而是+1 dp[L][R] 区间 L~R 合并结果 然后 ...
- 前端知识点回顾——Nodejs
Node.js 事件循环机制 setImmediate()是将事件插入到事件队列尾部,主线程和事件队列的函数执行完成之后立即执行setImmediate指定的回调函数,和setTimeout(fn,0 ...
- You don't have permission to access / on this server. wampserver3.1.0配置外网访问的问题
参考各种wamp教程后外网仍然不能访问服务器,很是头疼 网上好多wampserver配置都比较久远,最新版本3.1.0的很少,首先打开httpd.conf文件(这部分较简略,详细可以参考其他wamp配 ...
- 定位上下文(补充css的position属性)
]把元素的position属性设定为relative.absolute或fixed后,继而可以使用TRBL属性,相对于另一个元素移动该元素的位置.这里的“另一个元素”,就是该元素的定位上下文. 绝对定 ...
- R语言 我要如何开始R语言_数据分析师
R语言 我要如何开始R语言_数据分析师 我要如何开始R语言? 很多时候,我们的老板跟我们说,这个东西你用R语言去算吧,Oh,My god!什么是R语言?我要怎么开始呢? 其实回答这个问题很简单,首先, ...
- window 10 安装vs2013启动web项目报错Id端口不能启动iis
https://www.cnblogs.com/leolion/p/3789732.html 如果我们想在Visual Studio2013上调试64位ASP.NET MVC的网站(本机环境X64), ...
- DOTS概述
Unity数据导向技术栈有三个主要部分:Unity实体 - 组件 - 系统(ECS),Unity C#作业系统和Unity Burst编译器. 实体 - 组件 - 系统概述 ECS提供了一种游戏设计方 ...
- python 字符串格式化 format
用法: 它通过{}和:来代替传统%方式 1.使用位置参数 要点:从以下例子可以看出位置参数不受顺序约束,且可以为{},只要format里有相对应的参数值即可,参数索引从0开,传入位置参数列表可用*列表 ...