package cn.gistack.sm.hk.util; import cn.gistack.sm.hk.constant.HkConstant; import cn.gistack.sm.hk.constant.ProtocolConstant; import cn.gistack.sm.hk.vo.HkVO; import com.alibaba.fastjson.JSON; 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.springblade.core.tool.api.R; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import static cn.gistack.sm.hk.constant.HkConstant.ARTEMIS_PATH; public class GetCameraUtils { /** * 公共方法 * * @param url * @param body * @return */ public static String common(String url, String body) { /** * STEP1:设置平台参数,根据实际情况,设置host appkey appsecret 三个参数. */ // artemis网关服务器ip端口 ArtemisConfig.host = HkConstant.HOST; // 秘钥appKey ArtemisConfig.appKey = HkConstant.AppKey; // 秘钥appSecret ArtemisConfig.appSecret = HkConstant.AppSecret; /** * STEP3:设置接口的URI地址 */ final String apiUrl = ARTEMIS_PATH + url; Map path = new HashMap(2) { { //根据现场环境部署确认是http还是https put("https://", apiUrl); } }; /** * STEP4:设置参数提交方式 */ String contentType = "application/json"; /** * STEP6:调用接口 * // post请求application/json类型参数 */ String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, contentType, null); // 返回数据 return result; } /** * 获取视频预览数据 * * @param url 视频预览url * @param cameraIndexCode 监控点唯一标识 * @return */ public static String GetCameraPreviewURL(String url, String cameraIndexCode, String protocol) { /** * 组装请求参数 */ JSONObject jsonBody = new JSONObject(); jsonBody.put("cameraIndexCode", cameraIndexCode); jsonBody.put("streamType", 0); jsonBody.put("protocol", protocol); jsonBody.put("transmode", 1); // jsonBody.put("expand", "streamform=ps"); String body = jsonBody.toJSONString(); // 调用公共方法 return common(url,body); } /** * 获取视频预览数据 * * @param url 视频预览url * @param cameraCode 监控点唯一标识 * @return */ public static String QueryCameraPreviewURL(String url, String cameraCode, String resourceType, String key) { /** * 组装请求参数 */ JSONObject jsonBody = new JSONObject(); List list = new ArrayList<>(); List list2 = new ArrayList(); JSONObject map = new JSONObject(); list2.add(cameraCode); map.put("key", key); map.put("operator", 0); map.put("values", list2); list.add(map); jsonBody.put("pageNo", 1); jsonBody.put("pageSize", 100); jsonBody.put("resourceType", resourceType); jsonBody.put("expressions", list); String body = jsonBody.toJSONString(); System.out.println(jsonBody); return common(url,body); } /** * 语音对讲 * * @param url 语音对讲url * @param cameraIndexCode 监控点唯一标识 * @return */ public static String GetTalkURLs(String url, String cameraIndexCode) { /** * 组装请求参数 */ JSONObject jsonBody = new JSONObject(); jsonBody.put("cameraIndexCode", cameraIndexCode); jsonBody.put("streamType", ""); jsonBody.put("expand", ""); jsonBody.put("eurlExpand", ""); jsonBody.put("netZoneCode", 0); jsonBody.put("transmode", 1); jsonBody.put("talkIndexCode", "ce744c4c67df464f92994185d825b6fa"); jsonBody.put("protocol", "wss"); String body = jsonBody.toJSONString(); return common(url,body); } /** * 云台控制 * action 0-开始 1-停止 * 注:GOTO_PRESET命令下填任意值均可转到预置点,建议填0即可 * @param url 云台控制url * @param cameraIndexCode 监控点唯一标识 * @param command 命令 * @return */ public static String controlling(String url, String cameraIndexCode, Integer action, String command, Integer speed, Integer presetIndex ) { /** * 组装请求参数 */ JSONObject jsonBody = new JSONObject(); jsonBody.put("cameraIndexCode", cameraIndexCode); jsonBody.put("action", action); jsonBody.put("command", command); jsonBody.put("speed", speed); jsonBody.put("presetIndex", presetIndex); String body = jsonBody.toJSONString(); /** * 调用接口 */ return common(url,body); } /** * 查询监控点的预置点信息 * * @param url 查询监控点的预置点信息URL * @param cameraIndexCode 监控点唯一标识 * @return */ public static String presetsSearches(String url,String cameraIndexCode) { /** * 组装请求参数 */ JSONObject jsonBody = new JSONObject(); jsonBody.put("cameraIndexCode", cameraIndexCode); String body = jsonBody.toJSONString(); /** * 调用接口 */ return common(url,body); } /** * 云台控制 * * @param url 云台控制url * @param cameraIndexCode 监控点唯一标识 * @param startX 命令 * @param startY 命令 * @param endX 命令 * @param endY 命令 * @return */ public static String selZoomURLs(String url, String cameraIndexCode, Integer startX, Integer startY, Integer endX, Integer endY ) { /** * 组装请求参数 */ JSONObject jsonBody = new JSONObject(); jsonBody.put("cameraIndexCode", cameraIndexCode); jsonBody.put("startX", startX); jsonBody.put("startY", startY); jsonBody.put("endX", endX); jsonBody.put("endY", endY); String body = jsonBody.toJSONString(); /** * 调用接口 */ return common(url,body); } /** * 获取监控点资源分页数据 * * @param url 监控资源url * @return */ public static String GetCameraResourcePage(Integer pageNo, Integer pageSize, String url) { /** * 组装请求参数 */ JSONObject jsonBody = new JSONObject(); jsonBody.put("pageNo", pageNo); jsonBody.put("pageSize", pageSize); String body = jsonBody.toJSONString(); /** * 调用接口并返回数据 * post请求application/json类型参数; */ return common(url, body); } /** * 抓图 * * @param url 监控资源url * @return */ public static String manualCaptureUrls(String url,String cameraIndexCode) { /** * 组装请求参数 */ JSONObject jsonBody = new JSONObject(); jsonBody.put("cameraIndexCode", cameraIndexCode); String body = jsonBody.toJSONString(); /** * 调用接口并返回数据 * post请求application/json类型参数; */ return common(url, body); } // public static void main(String[] args) { // //// String result = GetCameraResourcePage(1, 10, HkConstant.cameras); //// //// JSONObject jsonObject1 = JSONObject.parseObject(result); //// JSONObject res1 = (JSONObject) jsonObject1.get("data"); //// JSONArray arr1 = JSON.parseArray(res1.getString("list")); //// JSONObject data1 = (JSONObject) arr1.get(1); //// String code1 = data1.get("cameraIndexCode").toString(); // // // 云台控制 //// String right = controlling(HkConstant.controllingURLs, //// "ff1f050afd1c47829dec1ec14575c9e3", //// 0, //// "ZOOM_OUT", //// null, //// null //// ); //// System.out.println("right = " + right); // //// // 放大 //// String big = selZoomURLs(HkConstant.selZoomURLs, //// "ff1f050afd1c47829dec1ec14575c9e3", //// 55, //// 58, //// 22, //// 23 //// ); //// System.out.println("big = " + big); // // // 抓图 //// String manualCapture = manualCaptureUrls(HkConstant.manualCaptureUrls, //// "ff1f050afd1c47829dec1ec14575c9e3"); //// System.out.println("manualCapture = " + manualCapture); // // //根据设备编号获取子节点编号 //// String result2 = QueryCameraPreviewURL(HkConstant.camerasID, code1, "camera", "parentIndexCode"); //// //// JSONObject jsonObject2 = JSONObject.parseObject(result2); //// JSONObject res2 = (JSONObject) jsonObject2.get("data"); //// JSONArray arr2 = JSON.parseArray(res2.getString("list")); //// JSONObject data2 = (JSONObject) arr2.get(0); //// String code2 = data2.get("indexCode").toString(); // //ff1f050afd1c47829dec1ec14575c9e3 // //e2cb261e14144f53a300769839d54753 // //根据子节点编号获取设备播放地址 //// String result3 = GetCameraPreviewURL(HkConstant.previewURLs, //// "0113d3498d2e41caaf9e5355d1575da3", ProtocolConstant.WS); //// JSONObject jsonObject = JSONObject.parseObject(result3); //// Map map = (Map) jsonObject.get("data"); // //根据子节点编号获取音频对讲地址 //// String result4 = GetTalkURLs(HkConstant.talkURLs, code1); // //// System.out.println("result结果示例: " + result); //// System.out.println("result1 = " + result1); //// System.out.println("result2 = " + result2); //// System.out.println("result3 = " + result3); //// System.out.println("url = " + map.get("url")); //// System.out.println("result4 = " + result4); // // // 查询回放url // HkVO hk = new HkVO(); // hk.setCameraIndexCode("0c4f30948dde4998a676ec6983119cb5"); // hk.setBeginTime("2023-05-08T11:52:16.000+08:00"); // hk.setEndTime("2023-05-11T11:52:15.000+08:00"); // hk.setProtocol("wss"); // // /** // * 组装请求参数 // */ // JSONObject jsonBody = new JSONObject(); // jsonBody.put("cameraIndexCode", hk.getCameraIndexCode()); // jsonBody.put("protocol", hk.getProtocol()); // jsonBody.put("recordLocation", "1"); // jsonBody.put("beginTime", hk.getBeginTime()); // jsonBody.put("endTime", hk.getEndTime()); // String body = jsonBody.toJSONString(); // // String common = common(HkConstant.playbackURLs, body); // // System.out.println("common = " + common); // } }