| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- 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<String, String> path = new HashMap<String, String>(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<String, String> path = new HashMap<String, String>(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();
- }
- }
- }
|