java web整合海康威视录像机摄像SDK

java 项目demo目录结构 java web整合海康威视录像机摄像SDK实现拍照功能。 一、maven项目结构

【提示】主要的是HCNetSDK.java文件,其中都是海康java调用dll文件获取摄像头资源的接口。

(1)库文件配置

如果是linux环境 将库文件放在/usr/lib64/目录下,并设置可执行权限。

1.拍照

 * 拍照功能
 * [@param](https://my.oschina.net/u/2303379) CameraInfoEntity cameraInfoEntity  设备初始化注册参数
 * [@return](https://my.oschina.net/u/556800) path   返回ftp文件路径
 * [@throws](https://my.oschina.net/throws) org.bytedeco.javacv.FrameRecorder.Exception
 * [@throws](https://my.oschina.net/throws) Exception
 */
public static String cameraTakePhoto(CameraInfoEntity cameraInfoEntity) throws Exception {
		//初始化设备
        long startTime = System.currentTimeMillis();
        HCNetSDK sdk = HCNetSDK.INSTANCE;
        if (!sdk.NET_DVR_Init()) {
           throw new RuntimeException("设备初始化获取失败");
        }
 
        NET_DVR_DEVICEINFO_V30 devinfo = new NET_DVR_DEVICEINFO_V30();
        
        //设备注册
        NativeLong id = sdk.NET_DVR_Login_V30(cameraInfoEntity.getCameraIP(), (short) cameraInfoEntity.getCameraPort(), cameraInfoEntity.getUserName(), cameraInfoEntity.getUserPwd(), devinfo);
        if (id.longValue() < 0) {
        	throw new RuntimeException("设备注册失败");
        } 
        System.out.println("设备注册成功,用户id" + id);
        NET_DVR_WORKSTATE_V30 devwork = new NET_DVR_WORKSTATE_V30();
        if (!sdk.NET_DVR_GetDVRWorkState_V30(id, devwork)) {
        	// 返回Boolean值,判断是否获取设备能力
        	throw new RuntimeException("返回设备状态失败");
        }
        startTime = System.currentTimeMillis();
        //截屏对象
        NET_DVR_JPEGPARA jpeg = new NET_DVR_JPEGPARA();
        // 设置图片的分辨率
        jpeg.wPicSize = 2;
        // 设置图片质量
        jpeg.wPicQuality = 2;
 
        IntByReference reference = new IntByReference();
        ByteBuffer jpegBuffer = ByteBuffer.allocate(1024 * 1024);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
       // String fileNameString = "D:/CapturePicture/"+sdf.format(date)+ "_"+ cameraInfoEntity.getChannel() +".jpg";
        String fileNameString = "cameracut_" + UUID.randomUUID().toString().replaceAll("-", "").toUpperCase() + sdf.format(new Date())+ "_"+ cameraInfoEntity.getChannel() +".jpg";
        //声明文件
        File file = new File(fileNameString);
        boolean is = sdk.NET_DVR_CaptureJPEGPicture_NEW(id, cameraInfoEntity.getChannel(), jpeg, jpegBuffer, 1024 * 1024, reference);
        System.out.println("拍照获取图片用时" + (System.currentTimeMillis() - startTime) + "ms]");
        System.out.println("拍照文件大小" + reference.getValue());
        BufferedOutputStream outputStream = null;
        try {
            outputStream = new BufferedOutputStream(new FileOutputStream(file));
            outputStream.write(jpegBuffer.array(), 0, reference.getValue());
            outputStream.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (outputStream != null) {
                try {
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        
        InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
        boolean upload = FTPUtils.ftpUpload("img.xxx.net", 21, "eGpZyE38rG0ExkGv", "Kq8J6GrTt1ngJ0HKeJ", "/vtsp/imgs", file.getName(), inputStream);
        System.out.println("图片上传ftp,状态===========>" + upload);
        
        //删除图片文件
        if(file.exists() && file.isFile()) {
        	file.deleteOnExit();
        }
        inputStream.close();
        
        sdk.NET_DVR_Logout(id);
        sdk.NET_DVR_Cleanup();
        
        if (is) {
    		return "http://"+ "ftp.xxx.net" + "/vtsp/imgs/" +file.getName();
        } else {
        	return null;
        }
}

在海康的HCNetSDK中加方法

 boolean NET_DVR_CaptureJPEGPicture_NEW(NativeLong lUserID, NativeLong lChannel, NET_DVR_JPEGPARA lpJpegPara, ByteBuffer sJpegPicBuffer, int dwPicSize, IntByReference lpSizeReturned);

转载于:https://my.oschina.net/kkgh/blog/2252293

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java对接海康威视SDK可以使用官方提供的Java SDK。下面是一个简单的示例代码: ```java import com.sun.jna.NativeLong; import com.sun.jna.Pointer; import com.hikvision.netsdk.*; public class HikvisionDemo { public static void main(String[] args) { // 初始化SDK boolean initSuc = HCNetSDK.INSTANCE.NET_DVR_Init(); if (!initSuc) { System.out.println("SDK初始化失败!"); return; } // 登录设备 HCNetSDK.NET_DVR_DEVICEINFO_V30 deviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30(); NativeLong lUserID = HCNetSDK.INSTANCE.NET_DVR_Login_V30("192.168.1.64", (short) 8000, "admin", "password", deviceInfo); if (lUserID.longValue() < 0) { System.out.println("设备登录失败!"); HCNetSDK.INSTANCE.NET_DVR_Cleanup(); return; } // 预览 HCNetSDK.NET_DVR_PREVIEWINFO previewInfo = new HCNetSDK.NET_DVR_PREVIEWINFO(); previewInfo.lChannel = new NativeLong(1); // 通道号 previewInfo.dwStreamType = 0; // 码流类型:0-主码流,1-子码流 previewInfo.dwLinkMode = 0x40000000; // 0x40000000-TCP方式,0x80000000-UDP方式 NativeLong lRealHandle = HCNetSDK.INSTANCE.NET_DVR_RealPlay_V40(lUserID, previewInfo, null); if (lRealHandle.longValue() < 0) { System.out.println("预览失败!"); HCNetSDK.INSTANCE.NET_DVR_Logout(lUserID); HCNetSDK.INSTANCE.NET_DVR_Cleanup(); return; } // 停止预览 HCNetSDK.INSTANCE.NET_DVR_StopRealPlay(lRealHandle); // 退出登录 HCNetSDK.INSTANCE.NET_DVR_Logout(lUserID); // 释放SDK资源 HCNetSDK.INSTANCE.NET_DVR_Cleanup(); } } ``` 需要注意的是,这里使用的是JNA(Java Native Access)库,需要在项目中引入jna.jar和jna-platform.jar两个库文件。 同时,需要根据实际情况修改设备IP地址、端口号、用户名、密码、通道号等参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值