package cn.com.goldenwater.dcproj.utils.http; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.hikvision.artemis.sdk.ArtemisHttpUtil; import com.hikvision.artemis.sdk.config.ArtemisConfig; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.util.HashMap; import java.util.Map; /** * HikvisionOpenApiUtil * 调用海康威视的 安全综合管理平台的工具类 * * @author lxf * @version 1.0 * @date 2023/08/10 12:39 **/ @Component public class HikvisionOpenApiUtil { private static String apiHost; private static String apiKey; private static String apiSecrect; public static String getApiHost() { return apiHost; } @Value("${fj.video.SERVER}") public void setApiHost(String apiHost) { HikvisionOpenApiUtil.apiHost = apiHost; // 代理API网关nginx服务器ip端口 ArtemisConfig.host = apiHost; } public static String getApiKey() { return apiKey; } @Value("${fj.video.APIKEY}") public void setApiKey(String apiKey) { HikvisionOpenApiUtil.apiKey = apiKey; // 秘钥appkey ArtemisConfig.appKey = apiKey; } public static String getApiSecrect() { return apiSecrect; } @Value("${fj.video.APISECRET}") public void setApiSecrect(String apiSecrect) { HikvisionOpenApiUtil.apiSecrect = apiSecrect; // 秘钥appSecret ArtemisConfig.appSecret = apiSecrect; } /** * 请根据自己的appKey和appSecret更换static静态块中的三个参数. [1 host] * 如果你选择的是和现场环境对接,host要修改为现场环境的ip,https端口默认为443,http端口默认为80.例如10.33.25.22:443 或者10.33.25.22:80 * appKey和appSecret请按照或得到的appKey和appSecret更改. * TODO 调用前先要清楚接口传入的是什么,是传入json就用doPostStringArtemis方法,下载图片doPostStringImgArtemis方法 */ public static void initConfig(){ // 代理API网关nginx服务器ip端口 ArtemisConfig.host = getApiHost(); // 秘钥appkey ArtemisConfig.appKey = getApiKey(); // 秘钥appSecret ArtemisConfig.appSecret = getApiSecrect(); } /** * 能力开放平台的网站路径 * TODO 路径不用修改,就是/artemis */ private static final String ARTEMIS_PATH = "/artemis"; /** * 调用POST请求类型(application/json)接口,这里以入侵报警事件日志为例 * https://open.hikvision.com/docs/918519baf9904844a2b608e558b21bb6#e6798840 * 获取预览地址 * @return */ public static JSONObject callPostPreviewURLs(String cameraIndexCode){ initConfig(); /** * http://10.33.47.50/artemis/api/scpms/v1/eventLogs/searches * 根据API文档可以看出来,这是一个POST请求的Rest接口,而且传入的参数值为一个json * ArtemisHttpUtil工具类提供了doPostStringArtemis这个函数,一共六个参数在文档里写明其中的意思,因为接口是https, * 所以第一个参数path是一个hashmap类型,请put一个key-value,query为传入的参数,body为传入的json数据 * 传入的contentType为application/json,accept不指定为null * header没有额外参数可不传,指定为null * */ final String getCamsApi = ARTEMIS_PATH+"/api/video/v1/cameras/previewURLs"; /** * { * "cameraIndexCode": "748d84750e3a4a5bbad3cd4af9ed5101", * "streamType": 0, * "protocol": "rtsp", * "transmode": 1, * "expand": "transcode=0", * "streamform": "ps" * } */ Map path = new HashMap(2) { { put("http://", getCamsApi);//根据现场环境部署确认是http还是https } }; JSONObject jsonBody = new JSONObject(); jsonBody.put("cameraIndexCode", cameraIndexCode); jsonBody.put("streamType", 0); jsonBody.put("protocol", "rtsp"); jsonBody.put("transmode", 1); jsonBody.put("expand", "streamform=rtp"); jsonBody.put("streamform", "rtp"); String body = jsonBody.toJSONString(); try { String result = ArtemisHttpUtil.doPostStringArtemis(path,body,null,null,"application/json",null);// post请求application/json类型参数 JSONObject jsonResponse = JSONObject.parseObject(result); JSONObject data = jsonResponse.getJSONObject("data"); return data; } catch (Exception e) { return new JSONObject(); } } /** * 根据水库名称 获取水库的监控点信息列表 * @return */ public static JSONArray callPostResourcesByParams(String rsName){ initConfig(); /** * http://10.33.47.50/artemis/api/scpms/v1/eventLogs/searches * 根据API文档可以看出来,这是一个POST请求的Rest接口,而且传入的参数值为一个json * ArtemisHttpUtil工具类提供了doPostStringArtemis这个函数,一共六个参数在文档里写明其中的意思,因为接口是https, * 所以第一个参数path是一个hashmap类型,请put一个key-value,query为传入的参数,body为传入的json数据 * 传入的contentType为application/json,accept不指定为null * header没有额外参数可不传,指定为null * */ final String getCamsApi = ARTEMIS_PATH+"/api/irds/v1/resource/resourcesByParams"; /** * { * "catalogCode": "region", * "name": "山仔水库", * "resourceType": "camera", * "pageNo": 1, * "pageSize": 20 * } */ Map path = new HashMap(2) { { put("http://", getCamsApi);//根据现场环境部署确认是http还是https } }; JSONObject jsonBody = new JSONObject(); jsonBody.put("name", rsName); jsonBody.put("catalogCode", "region"); jsonBody.put("resourceType", "camera"); jsonBody.put("pageNo", 1); jsonBody.put("pageSize", 100); String body = jsonBody.toJSONString(); try { String result = ArtemisHttpUtil.doPostStringArtemis(path,body,null,null,"application/json",null);// post请求application/json类型参数 JSONObject jsonResponse = JSONObject.parseObject(result); JSONObject data = jsonResponse.getJSONObject("data"); JSONArray jsonArray = data.getJSONArray("list"); return jsonArray; } catch (Exception e) { e.printStackTrace(); return new JSONArray(); } } }