Advertisement

Java对接海康威视硬件(iSecure Center综合安防管理平台)

阅读量:

前言

  • 根据自己的需求灵活选用对接方式。我们客户购买了海康的综合安防管理平台,经与海康交流过后,我这里选择直接通过调用海康的综合安防管理平台的Open Api进行对接
  • 这篇文章只包含java如何对接海康威视,不涉及前端具体技术
  • 需求:对接海康威视的视频与门禁。

( 1)大屏可视化,实现视频的取流,摄像头监控实时预览。

(2)获取摄像头监控点与门禁设备的状态,是否运行正常

(3)获取门禁设备的事件,用户进出情况记录。

  • 大致对接流程:注册登录后,在场景方案中选择基础对接,先了解接口安全认证规则,确保必要参数客户/海康已经提供,选择集成Java安全认证库,下载OpenApi安全认证库(JAVA),解压后,在项目中引用相关jar包,调用jar包中ArtemisHttpUtil类的相关方法即可。

一、海康威视协议概述

1、接口规则
2、调用认证

AK\SK摘要认证:

平台的接口调用安全认证方案,使用普遍被各大开放平台使用的ak/sk安全认证方案。调用 API 时,如果API需要安全认证,首先需要获取API的授权,得到AppKey和AppSecret;其次,拼接签名字符串,将计算后的签名放在请求的 Header 传入,网关会通过对称计算签名来验证请求者的身份。

2.1、名称解释

二、对接海康威视业务接口

2.1、pom.xml导入海康威视依赖

注:OpenAPI 安全认证库 (Java) maven依赖坐标: 开发前请先导入 artemis-http-client.jar 包

使用公共库中的,artemis-http-client可能不是最新

maven库:https://mvnrepository.com/artifact/com.hikvision.ga/artemis-http-client

最新的版本为1.1.3,如果想用更新的版本,就手动导入指定jar包即可

复制代码
 <!--海康威视依赖  -->

    
 <dependency>
    
   <groupId>com.hikvision.ga</groupId>
    
   <artifactId>artemis-http-client</artifactId>
    
   <version>1.1.11.RELEASE</version>
    
 </dependency>
    
    
    
    
    AI写代码
2.2、yml文件配置海康api所需要信息
复制代码
 #根据现场情况进行调整:"https://" 或 "http://"

    
 hikvision:
    
   Protocol: "https://"
    
   ip: 
    
   port: 
    
   appKey: 
    
   appSecret: 
    
    
    
    
    AI写代码

编写配置类,动态获取yml配置信息

复制代码
 package com.fz.coldchainbase.server.common.config;

    
  
    
  
    
 import lombok.Data;
    
 import org.springframework.beans.factory.annotation.Value;
    
 import org.springframework.cloud.context.config.annotation.RefreshScope;
    
 import org.springframework.stereotype.Component;
    
  
    
  
    
 /** * 读yml中相关配置
    
  * @Author xlsky
    
  * @Date 2024/09/21
    
  */
    
 @Data
    
 @Component
    
 @RefreshScope
    
 public class HIKConfig {
    
     /** * 海康威视相关
    
      */
    
     @Value("${hikvision.Protocol}")
    
     private String Protocol;
    
     @Value("${hikvision.ip}")
    
     private String hkip;
    
     @Value("${hikvision.port}")
    
     private String hkport;
    
     @Value("${hikvision.appKey}")
    
     private String hkappKey;
    
     @Value("${hikvision.appSecret}")
    
     private String hkappSecret;
    
 }
    
    
    
    
    AI写代码
2.3、编写海康威视相关代码
2.3.1、海康威视配置类(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;
    
  
    
 /** * @Author xlsky
    
  * @Date 2024/09/21
    
  */
    
 @Component
    
 public class HikvisionArtemisConfig {
    
  
    
     /** * 请根据技术支持提供的实际的平台IP/端口和API网关中的合作方信息更换static静态块中的三个参数.
    
      * [1 host]
    
      * 		host格式为IP:Port,如10.0.0.1:443
    
      * 		当使用https协议调用接口时,IP是平台(nginx)IP,Port是https协议的端口;
    
      *     当使用http协议调用接口时,IP是artemis服务的IP,Port是artemis服务的端口(默认9016)。
    
      * [2 appKey和appSecret]
    
      * 		请按照技术支持提供的合作方Key和合作方Secret修改
    
      * 	    appKey:合作方Key
    
      * 	    appSecret:合作方Secret
    
      * 调用前看清接口传入的是什么,是传入json就用doPostStringArtemis方法,是表单提交就用doPostFromArtemis方法
    
      * */
    
     public ArtemisConfig setArtemisConfig(){
    
     //代理API网关nginx服务器ip端口
    
     String ipAndPort = HIKConfig.getHkport();
    
     // 秘钥appkey
    
     String appKey = HIKConfig.getHkappKey();
    
     // 秘钥appSecret
    
     String appSecret = HIKConfig.getHkappSecret();
    
     ArtemisConfig config = new ArtemisConfig(ipAndPort,appKey,appSecret);
    
     return config;
    
     }
    
 }
    
    
    
    
    AI写代码
2.3.2、海康Api相关的静态变量(HikvisionOpenAPIComstant)
复制代码
 package com.hikvision.sdk.constant;

    
  
    
 /** * 海康威视openAPI相关
    
  * @Author xlsky
    
  * @Date 2024/09/21
    
  */
    
 public class HikvisionOpenAPIComstant {
    
     /** * pageNo:范围 ( 0 , ~ ),若是范围内数字超过实际最大页码值,返回最后一页记录 注:0 < pageNo
    
      * pageSize 范围 ( 0 , 1000 ] 注:0 < pageSize≤1000
    
      */
    
     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";   //0:接口业务处理成功,
    
     //海康api通用标识
    
     public static String HKCODE = "code";   //返回码,0:接口业务处理成功,
    
     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";   //结束时间标识
    
  
    
     //海康获取监控点列表接api接口的返回值标识
    
     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";           //接入协议类型说明
    
     //海康获取监控点在线状态api接口的返回值标识
    
     public static String indexCode = "indexCode";           //资源(监控点)唯一编码
    
     public static String online = "online";           //在线状态,0离线,1在线
    
     public static String onlineYes = "1";           //在线状态,1在线
    
     public static String onlineNo = "0";           //在线状态,0离线,1在线
    
     //获取监控点预览取流api接口返回值
    
     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";           //取流URL
    
     //获取门禁事件和图片api相关
    
     public static String SVRINDEXCODE = "svrIndexCode";           //提供picUri处会提供此字段
    
     public static String PICURI = "picUri";           //图片相对地址
    
     public static String SORT = "sort";           //排序字段标识
    
     public static String EVENTTIME = "eventTime";           //事件产生时间
    
     public static String ORDER = "order";           //升/降序(指定排序字段是使用升序(asc)还是降序(desc)
    
     public static String ASC = "asc";               //升序(asc)
    
     public static String DESC = "desc";             //降序(desc)
    
     //字符串格式化标识,含有偏移量
    
     public static String YYYYMMDDTHHMMSS = "yyyy-MM-dd'T'HH:mm:ssXXX";
    
  
    
  
    
  
    
     /** * 资源类型
    
      */
    
     public static String RESOURCETYPE = "resourceType";
    
     /** * 监控点编号,可通过分页获取监控点资源获取
    
      */
    
     public static String CAMERAINDEXCODE = "cameraIndexCode";
    
     /** * API网关后端服务(artemis)的上下文为“/artemis”
    
      */
    
     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";
    
     /** * 获取资源列表v2:根据资源类型分页获取资源列表,主要用于资源信息的全量同步。
    
      */
    
     public static String deviceResourceApi = ARTEMIS + "/api/irds/v2/deviceResource/resources";
    
     /** * 分页获取监控点资源:获取监控点列表接口可用来全量同步监控点信息,返回结果分页展示。
    
      */
    
     public static String camerasByPageApi = ARTEMIS + "/api/resource/v1/cameras";
    
     /** *  查询监控点列表v2:根据条件查询目录下有权限的监控点列表。当返回字段对应的值为空时,该字段不返回。
    
      */
    
     public static String searchCameraApi = ARTEMIS + "/api/resource/v2/camera/search";
    
     /** * 根据编号获取监控点详细信息:获取单个监控点信息是指根据监控点唯一标识来获取指定的监控点信息。
    
      */
    
     public static String indexCodeCamerasApi = ARTEMIS + "/api/resource/v1/cameras/indexCode";
    
     /** * 获取监控点预览取流URLv2:
    
      * 1.平台正常运行;平台已经添加过设备和监控点信息。
    
      * 2.平台需要安装mgc取流服务。
    
      * 3.通过openAPI获取到监控点数据,依据自身业务开发监控点导航界面。
    
      * 4.根据监控点编号调用本接口获取预览取流URL,协议类型包括:hik、rtsp、rtmp、hls、ws。
    
      * 5.通过开放平台的开发包进行实时预览或者使用标准的GUI播放工具进行实时预览。
    
      * 6.为保证数据的安全性,取流URL设有有效时间,有效时间为5分钟。
    
      */
    
     public static String previewURLsCamerasApi = ARTEMIS + "/api/video/v2/cameras/previewURLs";
    
     /** * 获取监控点在线状态:
    
      * 根据条件获取监控点在线状态接口
    
      * 级联场景下, 如需调用需要在 "系统配置–>网络管理配置–>下级平台管理” 中进行配置
    
      */
    
     public static String getCameraStatusApi = ARTEMIS + "/api/nms/v1/online/camera/get";
    
     /** * 查询门禁设备列表v2:
    
      * 根据条件查询目录下有权限的门禁设备列表。
    
      * 当返回字段对应的值为空时,该字段不返回。
    
      */
    
     public static String searchAcsDeviceApi = ARTEMIS + "/api/resource/v2/acsDevice/search";
    
     /** * 获取门禁设备在线状态:根据条件获取门禁设备在线状态接口
    
      */
    
     public static String getDeviceStatusApi = ARTEMIS + "/api/nms/v1/online/acs_device/get";
    
  
    
     /** * 查询门禁点事件v2:
    
      * 功能描述:该接口可以查询发生在门禁点上的人员出入事件,支持多个维度来查询,支持按时间、人员、门禁点、事件类型四个维度来查询;
    
      * 其中按事件类型来查询的方式,如果查询不到事件,存在两种情况,一种是该类型的事件没有发生过,所以查询不到,还有一种情况,该类型的事件发生过,
    
      * 但是由于门禁管理组件对该事件类型订阅配置处于关闭状态,所以不会存储该类型的事件,导致查询不到,对于这种情况,需要到门禁管理组件中,将该事件类型的订阅配置打开。
    
      */
    
     public static String getDoorEvents = ARTEMIS + "/api/acs/v2/door/events";
    
     /** * 获取门禁事件的图片:
    
      * 获取门禁事件的图片,配合门禁实时订阅事件附录D2.1 门禁事件使用,或配合查询门禁点事件v2接口使用
    
      */
    
     public static String getEventPictures = ARTEMIS + "/api/acs/v1/event/pictures";
    
 }
    
    
    
    
    AI写代码
2.3.3、海康威视门禁通用业务类(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 static com.hikvision.sdk.constant.HikvisionOpenAPIComstant.*;
    
 import java.util.HashMap;
    
 import java.util.Map;
    
  
    
  
    
 /** * 海康威视,门禁通用
    
  * @Author xlsky
    
  * @Date 2024/09/21
    
  */
    
 @Component
    
 public class AccessCommonService {
    
     private static Logger logger = LoggerFactory.getLogger(AccessCommonService.class);
    
  
    
     @Autowired
    
     private HIKConfig HikConfig;
    
     @Autowired
    
     private HikvisionArtemisConfig hikvisionArtemisConfig;
    
  
    
  
    
     /** * 查询门禁设备列表v2:根据条件查询目录下有权限的门禁设备列表。当返回字段对应的值为空时,该字段不返回。
    
      *@param jsonBody  pageNo与pageSize必传
    
      *       {
    
      *     "name": "test",
    
      *     "regionIndexCodes": [
    
      *         "8fyc8qw8280y0y43"
    
      *     ],
    
      *     "isSubRegion": true,
    
      *     "pageNo": 1,
    
      *     "pageSize": 1,
    
      *     "authCodes": [
    
      *         "view"
    
      *     ],
    
      *     "expressions": [
    
      *         {
    
      *             "key": "indexCode",
    
      *             "operator": 0,
    
      *             "values": [
    
      *                 "ayd8y80y1y082ye01y2e8"
    
      *             ]
    
      *         }
    
      *     ],
    
      *     "orderBy": "name",
    
      *     "orderType": "desc"
    
      * }
    
      * @return
    
      */
    
     public String getSearchAcsDeviceApi(String jsonBody){
    
     ArtemisConfig config = hikvisionArtemisConfig.setArtemisConfig();
    
     Map<String, String> path = new HashMap<String, String>(2) {
    
         {
    
             put(HikConfig.getProtocol(), searchAcsDeviceApi);
    
         }
    
     };
    
     try {
    
         return ArtemisHttpUtil.doPostStringArtemis(config, path, jsonBody, null, null, "application/json");
    
     } catch (Exception e) {
    
         logger.error("查询门禁设备列表v2出现异常:{}",e.getMessage());
    
     }
    
     return null;
    
     }
    
  
    
     /** * 获取门禁设备在线状态:根据条件获取门禁设备在线状态接口
    
      * @param jsonBody
    
      * {
    
      *     "regionId": "root000000",
    
      *     "ip": "10.33.43.135",
    
      *     "indexCodes": [
    
      *         "f98y8c28y85y7y213c082yu95yu"
    
      *     ],
    
      *     "status": "1",
    
      *     "pageNo": 1,
    
      *     "pageSize": 20,
    
      *     "includeSubNode": "1"
    
      * }
    
      * @return
    
      */
    
     public String getDeviceStatusApi(String jsonBody){
    
     ArtemisConfig config = hikvisionArtemisConfig.setArtemisConfig();
    
     Map<String, String> path = new HashMap<String, String>(2) {
    
         {
    
             put(HikConfig.getProtocol(), getDeviceStatusApi);
    
         }
    
     };
    
     try {
    
         return ArtemisHttpUtil.doPostStringArtemis(config, path, jsonBody, null, null, "application/json");
    
     } catch (Exception e) {
    
         logger.error("获取门禁设备在线状态出现异常:{}",e.getMessage());
    
     }
    
     return null;
    
     }
    
  
    
     /** * 查询门禁点事件v2:
    
      * @param jsonBody  pageNo与pageSize必填
    
      * {
    
      *     "pageNo": 1,
    
      *     "pageSize": 10,
    
      *     "doorIndexCodes": [
    
      *         "1f276203e5234bdca08f7d99e1097bba"
    
      *     ],
    
      *     "doorName": "11",
    
      *     "readerDevIndexCodes": [
    
      *         "1f2762v4523547374"
    
      *     ],
    
      *     "startTime": "2018-05-21T12:00:00+08:00",
    
      *     "endTime": "2018-05-21T12:00:00+08:00",
    
      *     "receiveStartTime": "2018-05-21T12:00:00+08:00",
    
      *     "receiveEndTime": "2018-05-21T12:00:00+08:00",
    
      *     "doorRegionIndexCodes": [
    
      *         "c654234f-61d4-4dcd-9d21-e7a45e0f1334",
    
      *     ],
    
      * *     "eventTypes": [
    
      *         10
    
      *     ],
    
      *     "personName": "xx",
    
      *     "sort": "personName",
    
      *     "order": "asc"
    
      * }
    
      * @return
    
      */
    
     public String getDoorEvents(String jsonBody){
    
     ArtemisConfig config = hikvisionArtemisConfig.setArtemisConfig();
    
     Map<String, String> path = new HashMap<String, String>(2) {
    
         {
    
             put(HikConfig.getProtocol(), getDoorEvents);
    
         }
    
     };
    
     try {
    
         return ArtemisHttpUtil.doPostStringArtemis(config, path, jsonBody, null, null, "application/json");
    
     } catch (Exception e) {
    
         logger.error("查询门禁点事件出现异常:{}",e.getMessage());
    
     }
    
     return null;
    
     }
    
  
    
     /** * 获取门禁事件的图片
    
      * @param svrIndexCode  图片存储服务的唯一标识
    
      * @param picUri  图片相对地址
    
      * @return
    
      */
    
     public String getEventPictures(String svrIndexCode,String picUri){
    
     Map<String, Object> map = new HashMap<>();
    
     map.put(SVRINDEXCODE,svrIndexCode);
    
     map.put(PICURI,picUri);
    
     String jsonBody = JSON.toJSONString(map);
    
     ArtemisConfig config = hikvisionArtemisConfig.setArtemisConfig();
    
     Map<String, String> path = new HashMap<String, String>(2) {
    
         {
    
             put(HikConfig.getProtocol(), getEventPictures);
    
         }
    
     };
    
     try {
    
         return ArtemisHttpUtil.doPostStringArtemis(config, path, jsonBody, null, null, "application/json");
    
     } catch (Exception e) {
    
         logger.error("获取门禁设备在线状态出现异常:{}",e.getMessage());
    
     }
    
     return null;
    
     }
    
  
    
  
    
  
    
  
    
 }
    
    
    
    
    AI写代码
2.3.4 海康威视(摄像头)视屏监控通用(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 static com.hikvision.sdk.constant.HikvisionOpenAPIComstant.*;
    
 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 org.springframework.stereotype.Service;
    
  
    
 import javax.annotation.PostConstruct;
    
 import java.util.HashMap;
    
 import java.util.Map;
    
  
    
  
    
 /** * 海康威视(摄像头)视屏监控通用
    
  * @Author xlsky
    
  * @Date 2024/09/21
    
  */
    
 @Component
    
 public class CameraCommonService {
    
     private static Logger logger = LoggerFactory.getLogger(CameraCommonService.class);
    
  
    
     @Autowired
    
     private HIKConfig HikConfig;
    
     @Autowired
    
     private HikvisionArtemisConfig hikvisionArtemisConfig;
    
  
    
     /** * 分页获取监控点资源:https://ip:port/artemis/api/resource/v1/cameras
    
      * @param pageNo 范围 ( 0 , ~ ),若是范围内数字超过实际最大页码值,返回最后一页记录 注:0 < pageNo
    
      * @param pageSize 范围 ( 0 , 1000 ] 注:0 < pageSize≤1000
    
      * @return
    
      */
    
     public String getCamerasByPageApi(Integer pageNo,Integer pageSize){
    
     ArtemisConfig config = hikvisionArtemisConfig.setArtemisConfig();
    
     if(pageNo == null){pageNo = pageNoNum;}
    
     if(pageSize == null){pageSize = pageSizeNum;}
    
     Map<String, Integer> map = new HashMap<>();
    
     map.put(PAGENO,pageNo);
    
     map.put(PAGESIZE,pageSize);
    
     String body = JSONObject.toJSONString(map);
    
     Map<String, String> path = new HashMap<String, String>(2) {
    
         {
    
             put(HikConfig.getProtocol(), camerasByPageApi);
    
         }
    
     };
    
     //接口调用超时时间设置(单位毫秒),以下示例10s
    
     //Constants.DEFAULT_TIMEOUT = 10000;
    
     try {
    
        return ArtemisHttpUtil.doPostStringArtemis(config, path, body, null, null, "application/json");
    
     } catch (Exception e) {
    
         logger.error("分页获取监控点资源出现异常:{}",e.getMessage());
    
     }
    
     return null;
    
     }
    
  
    
     /** * 查询监控点列表v2:根据条件查询目录下有权限的监控点列表。当返回字段对应的值为空时,该字段不返回。
    
      * @param json  查询条件,json格式,需转化成字符串
    
      *           {
    
      *     "name": "test",
    
      *     "regionIndexCodes": [
    
      *         "8fyc8qw8280y0y43"
    
      *     ],
    
      *     "isSubRegion": true,
    
      *     "pageNo": 1,
    
      *     "pageSize": 1,
    
      *     "authCodes": [
    
      *         "view"
    
      *     ],
    
      *     "expressions": [
    
      *         {
    
      *             "key": "indexCode",
    
      *             "operator": 0,
    
      *             "values": [
    
      *                 "ayd8y80y1y082ye01y2e8"
    
      *             ]
    
      *         }
    
      *     ],
    
      *     "orderBy": "name",
    
      *     "orderType": "desc"
    
      * }
    
      * @return
    
      */
    
     public String getSearchCameraApi(String json){
    
     ArtemisConfig config = hikvisionArtemisConfig.setArtemisConfig();
    
     Map<String, String> path = new HashMap<String, String>(2) {
    
         {
    
             put(HikConfig.getProtocol(), searchCameraApi);
    
         }
    
     };
    
     try {
    
         return ArtemisHttpUtil.doPostStringArtemis(config, path, json, null, null, "application/json");
    
     } catch (Exception e) {
    
         logger.error("查询监控点列表v2出现异常:{}",e.getMessage());
    
     }
    
     return null;
    
     }
    
  
    
     /** * 根据编号获取监控点详细信息:获取单个监控点信息是指根据监控点唯一标识来获取指定的监控点信息。
    
      * @param cameraIndexCode  监控点编号,可通过分页获取监控点资源获取
    
      * @return
    
      */
    
     public String getIndexCodeCamerasApi(String cameraIndexCode){
    
     ArtemisConfig config = hikvisionArtemisConfig.setArtemisConfig();
    
     Map<String, String> map = new HashMap<>();
    
     map.put(CAMERAINDEXCODE,cameraIndexCode);
    
     String body = JSONObject.toJSONString(map);
    
     Map<String, String> path = new HashMap<String, String>(2) {
    
         {
    
             put(HikConfig.getProtocol(), indexCodeCamerasApi);
    
         }
    
     };
    
     try {
    
         return ArtemisHttpUtil.doPostStringArtemis(config, path, body, null, null, "application/json");
    
     } catch (Exception e) {
    
         logger.error("根据编号获取监控点详细信息出现异常:{}",e.getMessage());
    
     }
    
     return null;
    
     }
    
  
    
     /** * 获取监控点预览取流URLv2:
    
      * 1.平台正常运行;平台已经添加过设备和监控点信息。
    
      * 2.平台需要安装mgc取流服务。
    
      * 3.通过openAPI获取到监控点数据,依据自身业务开发监控点导航界面。
    
      * 4.根据监控点编号调用本接口获取预览取流URL,协议类型包括:hik、rtsp、rtmp、hls、ws。
    
      * 5.通过开放平台的开发包进行实时预览或者使用标准的GUI播放工具进行实时预览。
    
      * 6.为保证数据的安全性,取流URL设有有效时间,有效时间为5分钟。
    
      * @param jsonbody
    
      *       {
    
      *     "cameraIndexCode": "748d84750e3a4a5bbad3cd4af9ed5101",
    
      *     "streamType": 0,
    
      *     "protocol": "rtsp",
    
      *     "transmode": 1,
    
      *     "expand": "transcode=0",
    
      *     "streamform": "ps"
    
      *      }
    
      * @return
    
      */
    
     public String getPreviewURLsCamerasApi(String jsonbody){
    
     ArtemisConfig config = hikvisionArtemisConfig.setArtemisConfig();
    
  
    
     Map<String, String> path = new HashMap<String, String>(2) {
    
         {
    
             put(HikConfig.getProtocol(), previewURLsCamerasApi);
    
         }
    
     };
    
     try {
    
         return ArtemisHttpUtil.doPostStringArtemis(config, path, jsonbody, null, null, "application/json");
    
     } catch (Exception e) {
    
         logger.error("获取监控点预览取流URLv2出现异常:{}",e.getMessage());
    
     }
    
     return null;
    
     }
    
  
    
     /** * 获取监控点在线状态:根据条件获取监控点在线状态接口
    
      * 级联场景下, 如需调用需要在 "系统配置–>网络管理配置–>下级平台管理” 中进行配置
    
      * @param jsonbody
    
      *      {
    
      *     "regionId": "root000000",
    
      *     "includeSubNode": "1",
    
      *     "indexCodes": [
    
      *         "f98y8c28y85y7y213c082yu95yu"
    
      *     ],
    
      *     "status": "1",
    
      *     "pageNo": 1,
    
      *     "pageSize": 20
    
      *      }
    
      * @return
    
      */
    
     public String getCameraStatusApi(String jsonbody){
    
     ArtemisConfig config = hikvisionArtemisConfig.setArtemisConfig();
    
     Map<String, String> path = new HashMap<String, String>(2) {
    
         {
    
             put(HikConfig.getProtocol(), getCameraStatusApi);
    
         }
    
     };
    
     try {
    
         return ArtemisHttpUtil.doPostStringArtemis(config, path, jsonbody, null, null, "application/json");
    
     } catch (Exception e) {
    
         logger.error("获取监控点在线状态出现异常:{}",e.getMessage());
    
     }
    
     return null;
    
     }
    
 }
    
    
    
    
    AI写代码
2.3.5、海康威视设备资源通用(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;
    
 import static com.hikvision.sdk.constant.HikvisionOpenAPIComstant.*;
    
  
    
 /** * 海康威视,设备资源通用
    
  * @Author xlsky
    
  * @Date 2024/09/21
    
  */
    
 @Component
    
 public class DeviceResourceCommonService {
    
     private static Logger logger = LoggerFactory.getLogger(DeviceResourceCommonService.class);
    
  
    
     @Autowired
    
     private NacosDataConfig nacosDataConfig;
    
     @Autowired
    
     private HikvisionArtemisConfig hikvisionArtemisConfig;
    
     /** * 获取资源列表v2(设备通用):根据资源类型分页获取资源列表,主要用于资源信息的全量同步。
    
      * @param pageNo    范围 ( 0 , ~ ),若是范围内数字超过实际最大页码值,返回最后一页记录 注:0 < pageNo
    
      * @param pageSize 范围 ( 0 , 1000 ] 注:0 < pageSize≤1000
    
      * @param resourceType
    
      * @return
    
      */
    
     public String getDeviceResourceApi(Integer pageNo,Integer pageSize,String resourceType){
    
     ArtemisConfig config = hikvisionArtemisConfig.setArtemisConfig();
    
     if(pageNo == null){pageNo = pageNoNum;}
    
     if(pageSize == null){pageSize = pageSizeNum;}
    
     Map<String, Object> map = new HashMap<>();
    
     map.put(PAGENO,pageNo);
    
     map.put(PAGESIZE,pageSize);
    
     map.put(RESOURCETYPE,resourceType);
    
     String body = JSONObject.toJSONString(map);
    
     Map<String, String> path = new HashMap<String, String>(2) {
    
         {
    
             put(HikConfig.getProtocol(), deviceResourceApi);
    
         }
    
     };
    
     try {
    
         return ArtemisHttpUtil.doPostStringArtemis(config, path, body, null, null, "application/json");
    
     } catch (Exception e) {
    
         logger.error("获取资源列表出现异常:{}",e.getMessage());
    
     }
    
     return null;
    
     }
    
 }
    
    
    
    
    AI写代码

全部评论 (0)

还没有任何评论哟~