JAVA如何对接海康威视门禁和摄像头视频取流

JAVA如何对接海康威视门禁和摄像头视频取流

前言

本文旨在指导如何使用Java语言对接海康威视的iSecure Center综合安防管理平台,实现门禁系统和摄像头视频的取流功能。对接方式是通过调用海康的综合安防管理平台的Open API进行。

1. 海康威视(iSecure Center综合安防管理平台)

1.1 注册与认证

首先,需要访问海康开放平台进行注册和登录。如果已有账号,则直接登录;没有则需要注册。

在这里插入图片描述

登录后,可以在开放体系下找到综合安防管理平台的入口。

在这里插入图片描述

1.2 对接方式选型

进入综合安防管理平台后,点击场景方案,了解方案并进行选型。

在这里插入图片描述

点击开发指南,查看对接指南与API。

在这里插入图片描述

1.2.1 基础对接-接口安全认证规则

了解接口安全认证规则。

在这里插入图片描述

注意事项:主要了解hostappKeyappSecret三个参数,这些通常由客户或海康提供。

1.2.1.2 基础对接-集成java安全认证库

下载java安全认证库,并在项目中引入。

  • 点击下载java安全认证库,进入工具下载界面。
  • 选择OpenAPI安全认证库(JAVA),下载后解压,并在项目中引用相关jar包。

2. 开始对接

2.1 导入Maven依赖

使用maven公共库中的依赖,或者手动导入jar包。

2.1.1 使用maven公共库中的依赖
<dependency>
    <groupId>com.hikvision.ga</groupId>
    <artifactId>artemis-http-client</artifactId>
    <version>1.1.3</version>
</dependency>
2.2.2 手动导入jar包

将下载的artemis-http-client-1.1.11.RELEASE.jar包拷贝到项目目录下,并在pom.xml文件中引入依赖。

<!--海康威视依赖  -->
<dependency>
    <groupId>com.hikvision.ga</groupId>
    <artifactId>artemis-http-client</artifactId>
    <version>1.1.11.RELEASE</version>
</dependency>

2.2 在yml文件中,配置海康api所需信息

配置信息包括协议、IP、端口、appKey、appSecret等。

#根据现场情况进行调整:"https://" 或 "http://"
hikvision:
  Protocol: "https://"
  ip: 172.16.1.25
  port: 443
  appKey: H4sIAAAAAAAAASDSFDFDMyNje0NDK3BABFDAAAAA==
  appSecret: H4sIAASDFDSFAPMrtAwvjHL2Di/2NzQz9M9O8FDSFDSX2FAAAAA==
  #码流类型:0:主码流、1:子码流、2:第三码流
  streamType: 0
  #取流协议(应用层协议),参数不填,默认为HIK协议
  #“hik”:HIK私有协议,使用视频SDK进行播放时,传入此类型;
  #“rtsp”:RTSP协议;
  #“rtmp”:RTMP协议(RTMP协议只支持海康SDK协议、EHOME协议、ONVIF协议接入的设备;只支持H264视频编码和AAC音频编码);
  #“hls”:HLS协议(HLS协议只支持海康SDK协议、EHOME协议、ONVIF协议接入的设备;只支持H264视频编码和AAC音频编码);
  #“ws”:Websocket协议(一般用于H5视频播放器取流播放)。
  streamProtocol: hls
  #	传输协议(传输层协议),0:UDP,1:TCP,默认是TCP 注:GB28181 2011及以前版本只支持UDP传输
  transmode: 1
  #输出码流转封装格式,“ps”:PS封装格式、“rtp”:RTP封装协议。当protocol=rtsp时生效,且不传值时默认为RTP封装协议。
  streamform: ps

2.3 编写海康威视相关代码

2.3.1 解密工具类(GZipUtil)
package com.fz.coldchainbase.server.utils;

import com.myd.common.core.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

public class GZipUtil {
    private final static Logger logger = LoggerFactory.getLogger(GZipUtil.class);

    public static String compress(String str) {
        if(StringUtils.isBlank(str)){
            return null;
        }
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        GZIPOutputStream gzip = null;
        try {
            gzip = new GZIPOutputStream(out);
            gzip.write(str.getBytes());
        } catch (IOException e) {
            logger.error("字符串压缩错误",e);
        } finally {
            if (gzip != null) {
                try {
                    gzip.close();
                } catch (IOException e) {
                    logger.error("压缩流关闭失败",e);
                }
            }
        }
        return new sun.misc.BASE64Encoder().encode(out.toByteArray());
    }

    public static String deCompress(String compressedStr) {
        if(StringUtils.isBlank(compressedStr)){
            return null;
        }
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        ByteArrayInputStream in = null;
        GZIPInputStream ginzip = null;
        byte[] compressed = null;
        String decompressed = null;
        try {
            compressed = new sun.misc.BASE64Decoder().decodeBuffer(compressedStr);
            in = new ByteArrayInputStream(compressed);
            ginzip = new GZIPInputStream(in);
            byte[] buffer = new byte[1024];
            int offset = -1;
            while ((offset = ginzip.read(buffer)) != -1) {
                out.write(buffer, 0, offset);
            }
            decompressed = out.toString();
        } catch (IOException e) {
            logger.error("解压缩错误",e);
            return null;
        } finally {
            if (ginzip != null) {
                try {
                    ginzip.close();
                } catch (IOException e) {
                }
            }
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                }
            }
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                }
            }
        }
        return decompressed;
    }
}
2.3.2 海康威视配置类(HikvisionArtemisConfig)
package com.hikvision.sdk.config;

import com.fz.coldchainbase.server.common.config.NacosDataConfig;
import com.fz.coldchainbase.server.utils.GZipUtil;
import com.hikvision.artemis.sdk.config.ArtemisConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class HikvisionArtemisConfig {
    @Autowired
    private NacosDataConfig nacosDataConfig;

    public ArtemisConfig setArtemisConfig(){
        String ipAndPort = nacosDataConfig.getHkip()+":"+nacosDataConfig.getHkport();
        String appKey = GZipUtil.deCompress(nacosDataConfig.getHkappKey());
        String appSecret = GZipUtil.deCompress(nacosDataConfig.getHkappSecret());
        return new ArtemisConfig(ipAndPort, appKey, appSecret);
    }
}
2.3.3 海康Api相关的静态变量(HikvisionOpenAPIComstant)
package com.hikvision.sdk.constant;

public class HikvisionOpenAPIComstant {
    public static Integer pageNoNum = 1;
    public static Integer pageSizeNum = 1000;
    public static String PAGENO = "pageNo";
    public static String PAGESIZE = "pageSize";
    public static String ZERO = "0";
    public static String HKCODE = "code";
    public static String HKMSG = "msg";
    public static String HKDATA = "data";
    public static String HKTOTAL = "total";
    public static String HKLIST = "list";
    public static String STARTTIME = "startTime";
    public static String ENDTIME = "endTime";

    public static String cameraIndexCode = "cameraIndexCode";
    public static String cameraName = "cameraName";
    public static String cameraType = "cameraType";
    public static String cameraTypeName = "cameraTypeName";
    public static String channelType = "channelType";
    public static String channelTypeName = "channelTypeName";
    public static String encodeDevIndexCode = "encodeDevIndexCode";
    public static String regionIndexCode = "regionIndexCode";
    public static String transTypeName = "transTypeName";

    public static String indexCode = "indexCode";
    public static String online = "online";
    public static String onlineYes = "1";
    public static String onlineNo = "0";
    public static String streamType = "streamType";
    public static String protocol = "protocol";
    public static String transmode = "transmode";
    public static String streamform = "streamform";
    public static String url = "url";

    public static String SVRINDEXCODE = "svrIndexCode";
    public static String PICURI = "picUri";
    public static String SORT = "sort";
    public static String EVENTTIME = "eventTime";
    public static String ORDER = "order";
    public static String ASC = "asc";
    public static String DESC = "desc";
    public static String YYYYMMDDTHHMMSS = "yyyy-MM-dd'T'HH:mm:ssXXX";

    public static String RESOURCETYPE = "resourceType";
    public static String CAMERAINDEXCODE = "cameraIndexCode";
    public static String ARTEMIS = "/artemis";
    public static String EncodeDeviceDTO = "encodeDevice";
    public static String CameraDTO = "camera";
    public static String AcsDeviceDTO = "acsDevice";
    public static String DoorDTO = "door";
    public static String deviceResourceApi = ARTEMIS + "/api/irds/v2/deviceResource/resources";
    public static String camerasByPageApi = ARTEMIS + "/api/resource/v1/cameras";
    public static String searchCameraApi = ARTEMIS + "/api/resource/v2/camera/search";
    public static String indexCodeCamerasApi = ARTEMIS + "/api/resource/v1/cameras/indexCode";
    public static String previewURLsCamerasApi = ARTEMIS + "/api/video/v2/cameras/previewURLs";
    public static String getCameraStatusApi = ARTEMIS + "/api/nms/v1/online/camera/get";
    public static String searchAcsDeviceApi = ARTEMIS + "/api/resource/v2/acsDevice/search";
    public static String getDeviceStatusApi = ARTEMIS + "/api/nms/v1/online/acs_device/get";
    public static String getDoorEvents = ARTEMIS + "/api/acs/v2/door/events";
    public static String getEventPictures = ARTEMIS + "/api/acs/v1/event/pictures";
}
2.3.4 海康威视门禁通用业务类(AccessCommonService)
package com.hikvision.sdk.service;

import com.alibaba.fastjson.JSON;
import com.fz.coldchainbase.server.common.config.NacosDataConfig;
import com.hikvision.artemis.sdk.ArtemisHttpUtil;
import com.hikvision.artemis.sdk.config.ArtemisConfig;
import com.hikvision.sdk.config.HikvisionArtemisConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

@Component
public class AccessCommonService {
    private static Logger logger = LoggerFactory.getLogger(AccessCommonService.class);

    @Autowired
    private NacosDataConfig nacosDataConfig;
    @Autowired
    private HikvisionArtemisConfig hikvisionArtemisConfig;

    public String getSearchAcsDeviceApi(String jsonBody){
        ArtemisConfig config = hikvisionArtemisConfig.setArtemisConfig();
        Map<String, String> path = new HashMap<String, String>(2) {
            {
                put(nacosDataConfig.getProtocol(), HikvisionOpenAPIComstant.searchAcsDeviceApi);
            }
        };
        try {
            return ArtemisHttpUtil.doPostStringArtemis(config, path, jsonBody, null, null, "application/json");
        } catch (Exception e) {
            logger.error("查询门禁设备列表v2出现异常:{}",e.getMessage());
        }
        return null;
    }

    public String getDeviceStatusApi(String jsonBody){
        ArtemisConfig config = hikvisionArtemisConfig.setArtemisConfig();
        Map<String, String> path = new HashMap<String, String>(2) {
            {
                put(nacosDataConfig.getProtocol(), HikvisionOpenAPIComstant.getDeviceStatusApi);
            }
        };
        try {
            return ArtemisHttpUtil.doPostStringArtemis(config, path, jsonBody, null, null, "application/json");
        } catch (Exception e) {
            logger.error("获取门禁设备在线状态出现异常:{}",e.getMessage());
        }
        return null;
    }

    public String getDoorEvents(String jsonBody){
        ArtemisConfig config = hikvisionArtemisConfig.setArtemisConfig();
        Map<String, String> path = new HashMap<String, String>(2) {
            {
                put(nacosDataConfig.getProtocol(), HikvisionOpenAPIComstant.getDoorEvents);
            }
        };
        try {
            return ArtemisHttpUtil.doPostStringArtemis(config, path, jsonBody, null, null, "application/json");
        } catch (Exception e) {
            logger.error("查询门禁点事件出现异常:{}",e.getMessage());
        }
        return null;
    }

    public String getEventPictures(String svrIndexCode,String picUri){
        Map<String, Object> map = new HashMap<>();
        map.put(HikvisionOpenAPIComstant.SVRINDEXCODE,svrIndexCode);
        map.put(HikvisionOpenAPIComstant.PICURI,picUri);
        String jsonBody = JSON.toJSONString(map);
        ArtemisConfig config = hikvisionArtemisConfig.setArtemisConfig();
        Map<String, String> path = new HashMap<String, String>(2) {
            {
                put(nacosDataConfig.getProtocol(), HikvisionOpenAPIComstant.getEventPictures);
            }
        };
        try {
            return ArtemisHttpUtil.doPostStringArtemis(config, path, jsonBody, null, null, "application/json");
        } catch (Exception e) {
            logger.error("获取门禁设备在线状态出现异常:{}",e.getMessage());
        }
        return null;
    }
}
2.3.5 海康威视(摄像头)视屏监控通用(CameraCommonService)
package com.hikvision.sdk.service;

import com.alibaba.fastjson.JSONObject;
import com.fz.coldchainbase.server.common.config.NacosDataConfig;
import com.hikvision.artemis.sdk.ArtemisHttpUtil;
import com.hikvision.artemis.sdk.config.ArtemisConfig;
import com.hikvision.sdk.config.HikvisionArtemisConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

@Component
public class CameraCommonService {
    private static Logger logger = LoggerFactory.getLogger(CameraCommonService.class);

    @Autowired
    private NacosDataConfig nacosDataConfig;
    @Autowired
    private HikvisionArtemisConfig hikvisionArtemisConfig;

    public String getCamerasByPageApi(Integer pageNo, Integer pageSize){
        ArtemisConfig config = hikvisionArtemisConfig.setArtemisConfig();
        if(pageNo == null) pageNo = HikvisionOpenAPIComstant.pageNoNum;
        if(pageSize == null) pageSize = HikvisionOpenAPIComstant.pageSizeNum;
        Map<String, Integer> map = new HashMap<>();
        map.put(HikvisionOpenAPIComstant.PAGENO, pageNo);
        map.put(HikvisionOpenAPIComstant.PAGESIZE, pageSize);
        String body = JSONObject.toJSONString(map);
        Map<String, String> path = new HashMap<String, String>(2) {
            {
                put(nacosDataConfig.getProtocol(), HikvisionOpenAPIComstant.camerasByPageApi);
            }
        };
        try {
           return ArtemisHttpUtil.doPostStringArtemis(config, path, body, null, null, "application/json");
        } catch (Exception e) {
            logger.error("分页获取监控点资源出现异常:{}",e.getMessage());
        }
        return null;
    }

    public String getSearchCameraApi(String json){
        ArtemisConfig config = hikvisionArtemisConfig.setArtemisConfig();
        Map<String, String> path
 = new HashMap<String, String>(2) {
            {
                put(nacosDataConfig.getProtocol(), HikvisionOpenAPIComstant.searchCameraApi);
            }
        };
        try {
            return ArtemisHttpUtil.doPostStringArtemis(config, path, json, null, null, "application/json");
        } catch (Exception e) {
            logger.error("查询监控点列表v2出现异常:{}",e.getMessage());
        }
        return null;
    }

    public String getIndexCodeCamerasApi(String cameraIndexCode){
        ArtemisConfig config = hikvisionArtemisConfig.setArtemisConfig();
        Map<String, String> map = new HashMap<>();
        map.put(HikvisionOpenAPIComstant.CAMERAINDEXCODE, cameraIndexCode);
        String body = JSONObject.toJSONString(map);
        Map<String, String> path = new HashMap<String, String>(2) {
            {
                put(nacosDataConfig.getProtocol(), HikvisionOpenAPIComstant.indexCodeCamerasApi);
            }
        };
        try {
            return ArtemisHttpUtil.doPostStringArtemis(config, path, body, null, null, "application/json");
        } catch (Exception e) {
            logger.error("根据编号获取监控点详细信息出现异常:{}",e.getMessage());
        }
        return null;
    }

    public String getPreviewURLsCamerasApi(String jsonbody){
        ArtemisConfig config = hikvisionArtemisConfig.setArtemisConfig();
        Map<String, String> path = new HashMap<String, String>(2) {
            {
                put(nacosDataConfig.getProtocol(), HikvisionOpenAPIComstant.previewURLsCamerasApi);
            }
        };
        try {
            return ArtemisHttpUtil.doPostStringArtemis(config, path, jsonbody, null, null, "application/json");
        } catch (Exception e) {
            logger.error("获取监控点预览取流URLv2出现异常:{}",e.getMessage());
        }
        return null;
    }

    public String getCameraStatusApi(String jsonbody){
        ArtemisConfig config = hikvisionArtemisConfig.setArtemisConfig();
        Map<String, String> path = new HashMap<String, String>(2) {
            {
                put(nacosDataConfig.getProtocol(), HikvisionOpenAPIComstant.getCameraStatusApi);
            }
        };
        try {
            return ArtemisHttpUtil.doPostStringArtemis(config, path, jsonbody, null, null, "application/json");
        } catch (Exception e) {
            logger.error("获取监控点在线状态出现异常:{}",e.getMessage());
        }
        return null;
    }
}
2.3.6 海康威视设备资源通用(DeviceResourceCommonService)
package com.hikvision.sdk.service;

import com.alibaba.fastjson.JSONObject;
import com.fz.coldchainbase.server.common.config.NacosDataConfig;
import com.hikvision.artemis.sdk.ArtemisHttpUtil;
import com.hikvision.artemis.sdk.config.ArtemisConfig;
import com.hikvision.sdk.config.HikvisionArtemisConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

@Component
public class DeviceResourceCommonService {
    private static Logger logger = LoggerFactory.getLogger(DeviceResourceCommonService.class);

    @Autowired
    private NacosDataConfig nacosDataConfig;
    @Autowired
    private HikvisionArtemisConfig hikvisionArtemisConfig;

    public String getDeviceResourceApi(Integer pageNo, Integer pageSize, String resourceType){
        ArtemisConfig config = hikvisionArtemisConfig.setArtemisConfig();
        if(pageNo == null) pageNo = HikvisionOpenAPIComstant.pageNoNum;
        if(pageSize == null) pageSize = HikvisionOpenAPIComstant.pageSizeNum;
        Map<String, Object> map = new HashMap<>();
        map.put(HikvisionOpenAPIComstant.PAGENO, pageNo);
        map.put(HikvisionOpenAPIComstant.PAGESIZE, pageSize);
        map.put(HikvisionOpenAPIComstant.RESOURCETYPE, resourceType);
        String body = JSONObject.toJSONString(map);
        Map<String, String> path = new HashMap<String, String>(2) {
            {
                put(nacosDataConfig.getProtocol(), HikvisionOpenAPIComstant.deviceResourceApi);
            }
        };
        try {
            return ArtemisHttpUtil.doPostStringArtemis(config, path, body, null, null, "application/json");
        } catch (Exception e) {
            logger.error("获取资源列表出现异常:{}",e.getMessage());
        }
        return null;
    }
}

3. 扩展

3.1 视音频播放

海康威视提供了多种视音频播放方案,具体可以在官网查看详细文档。

3.2 工具下载

可以在海康威视的官网底部找到工具下载入口,下载所需的硬件产品和综合安防管理平台相关工具。


以上就是使用Java对接海康威视iSecure Center综合安防管理平台的基本步骤和代码示例。希望对你有所帮助。

### 回答1: 要实现java海康威视摄像头的实时预览视频流保存到指定文件中,需要先安装海康威视的SDK,并使用Java SDK开发工具包中的类库来开发应用程序。 首先,在应用程序中引入海康威视的SDK库,包括HCNetSDK.dll、PlayCtrl.dll、HCAlarm.dll等。然后,使用HCNetSDK类库中提供的方法来实现视频流实时预览功能,并将预览的视频流通过PlayCtrl.dll中提供的方法进行渲染和显示。 同时,在将视频流保存到指定文件时,可以使用Java中的IO流进行文件操作。首先在程序中创建File对象指定文件路径,然后使用FileOutputStream类创建输出流对象,通过读取预览视频流数据的byte数组并将其写入到输出流中实现将视频流保存到文件的功能。 需要注意的是,保存到文件时,时间戳的处理,文件格式等问题都需要按照实际需求进行处理。 总之,要实现java海康威视摄像头实时预览视频流保存到指定文件中,需要结合使用海康威视的SDK和Java SDK开发工具包,具体实现过程需要根据实际情况灵活处理。 ### 回答2: Java是一种广泛应用于各种领域的高级编程语言,海康威视摄像头是一种高清晰度的视频监控设备。如何实现将海康威视摄像头的实时预览视频流保存到指定文件中呢?下面以Java编程语言为主体进行分析探讨。 首先,需要了解Java的多媒体相关类库和海康威视摄像头的API接口。Java多媒体相关类库包括javax.sound.sampled和javax.media包。javax.sound.sampled是Java音频API,可以处理音频文件的读、写、播放和录制等操作;javax.media则是Java多媒体API,可以处理音频、视频和图像等媒体数据。海康威视摄像头的API接口包括SDK、HCNetSDK和PlayCtrl等。 其次,需要进行海康威视摄像头的实时预览视频流以及保存到指定文件中的操作。具体步骤如下: 1. 初始化海康威视摄像头SDK,包括设备登录、设备初始化和预览四个步骤。设备登录是使用设备账号密码进行登录,设备初始化是对设备进行初始化设置,预览则是打开视频流并进行播放。 2. 在预览中添加截图功能,通过调用SDK中的抓图函数将视频帧数据保存到内存中的一个缓冲区中。抓取一帧数据需要使用NET_DVR_CaptureJPEGPicture_V30函数,并将数据放置到指定的缓存区。 3. 将缓冲区中的数据保存到本地文件中。在Java中可以使用BufferedImage类来保存JPEG图像数据,使用ImageIO类将缓冲区中的图像数据保存到指定的文件中。 4. 关闭设备预览,退出SDK。 需要注意的是,保存视频流到文件中需要根据需求进行设置参数,包括视频流的编码格式、分辨率、帧率等。在进行保存时还应该进行异常处理,例如文件不存在、写入失败等异常情况的处理。 总之,Java实现海康威视摄像头实时预览视频流保存到指定文件中需要进行多项操作,包括海康威视SDK的初始化和调用、截图和保存等。具体操作可以根据实际需要进行调整和修改,最终实现预览视频流保存到文件的功能。 ### 回答3: java是一种广泛使用的编程语言,可用于开发各种应用程序,包括与摄像头相关的应用程序。海康威视(Hikvision)是一家专业从事视频监控设备制造的企业,提供多种摄像头系列产品。本文将介绍如何使用java编写程序,实现海康威视摄像头实时预览视频流,并将视频流保存到指定文件中。 首先,要实现海康威视摄像头实时预览视频流,需要使用其提供的软件开发包(SDK),该SDK提供了一组API,用于控制海康威视摄像头的各种功能。在使用SDK前,需要先在操作系统中安装相关依赖库,并且在开发环境中配置好SDK相关参数。 接下来,我们需要按照以下步骤编写java程序: 1.引入SDK相关jar包,并创建SDK实例。 import com.sun.jna.NativeLong; import com.sun.jna.Pointer; import com.sun.jna.ptr.IntByReference; import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.PointerByReference; import com.hikvision.netsdk.*; public class HikvisionTest { private HCNetSDK hCNetSDK; public static void main(String[] args) { HikvisionTest test = new HikvisionTest(); test.init(); test.preview(); } public void init() { hCNetSDK = HCNetSDK.INSTANCE; boolean initSuc = hCNetSDK.NET_DVR_Init(); if(!initSuc) { System.out.println("SDK初始化失败"); } } public void preview() { int userId = -1; HCNetSDK.NET_DVR_DEVICEINFO_V30 devInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30(); NativeLong lRealHandle = new NativeLong(-1); NativeLong lLoginHandle = hCNetSDK.NET_DVR_Login_V30("10.10.10.1", 8000, "admin", "password", devInfo); if(lLoginHandle.longValue() < 0) { System.out.println("登录失败"); return; } HCNetSDK.NET_DVR_PREVIEWINFO previewInfo = new HCNetSDK.NET_DVR_PREVIEWINFO(); previewInfo.lChannel = 1; previewInfo.dwStreamType = 0; previewInfo.dwLinkMode = 0x80000000; Pointer hPlayWnd = null;//播放窗口句柄,为null表示不播放画面,只预览数据 lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(lLoginHandle, previewInfo, null); if(lRealHandle.longValue() < 0) { System.out.println("预览失败"); return; } //TODO: 在这里添加保存视频流到文件的代码 } } 2.登录网络摄像头,并开启实时预览。 在上述代码中,我们调用了NET_DVR_Login_V30方法登录摄像头设备,该方法返回登录句柄,如果登录失败则返回-1。登录成功后,我们可以通过NET_DVR_RealPlay_V40方法开启实时预览功能,该方法调用后返回实时预览句柄,如果开启预览失败则返回-1。在实时预览时,我们可以指定播放窗口句柄,如果传入null则表示只预览不播放。 3.将视频流保存到指定文件中。 要将视频流保存到指定文件中,我们可以在预览时添加代码,调用NET_DVR_SaveRealData保存视频流数据。 hCNetSDK.NET_DVR_SaveRealData(lRealHandle, "D:\\video\\test.mp4"); 以上代码将把视频流数据保存到指定文件路径(D:\\video\\test.mp4)中。 另外,为了保证视频流数据正常保存,还需要添加停止预览和注销登录相关的代码。停止预览时,可以调用NET_DVR_StopRealPlay方法停止实时预览;注销登录时,可以调用NET_DVR_Logout方法注销登录句柄。 总之,使用java编写程序实现海康威视摄像头实时预览视频流并保存视频到指定文件,需要使用海康威视摄像头SDK提供的API来控制摄像头功能,同时需要注意代码的执行顺序和各种参数的设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真心喜欢你吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值