.idea/misc.xml
@@ -1,6 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="ProjectRootManager"> <output url="file://$PROJECT_DIR$/out" /> <component name="MavenProjectsManager"> <option name="originalFiles"> <list> <option value="$PROJECT_DIR$/pom.xml" /> </list> </option> </component> <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK" /> </project> .idea/modules.xml
@@ -2,7 +2,35 @@ <project version="4"> <component name="ProjectModuleManager"> <modules> <module fileurl="file://$PROJECT_DIR$/.idea/manager.iml" filepath="$PROJECT_DIR$/.idea/manager.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager.iml" filepath="$PROJECT_DIR$/skjcmanager.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager-ops/skjcmanager-admin/skjcmanager-admin.iml" filepath="$PROJECT_DIR$/skjcmanager-ops/skjcmanager-admin/skjcmanager-admin.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager-auth/skjcmanager-auth.iml" filepath="$PROJECT_DIR$/skjcmanager-auth/skjcmanager-auth.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager-common/skjcmanager-common.iml" filepath="$PROJECT_DIR$/skjcmanager-common/skjcmanager-common.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager-service/skjcmanager-desk/skjcmanager-desk.iml" filepath="$PROJECT_DIR$/skjcmanager-service/skjcmanager-desk/skjcmanager-desk.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager-service-api/skjcmanager-desk-api/skjcmanager-desk-api.iml" filepath="$PROJECT_DIR$/skjcmanager-service-api/skjcmanager-desk-api/skjcmanager-desk-api.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager-ops/skjcmanager-develop/skjcmanager-develop.iml" filepath="$PROJECT_DIR$/skjcmanager-ops/skjcmanager-develop/skjcmanager-develop.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager-service-api/skjcmanager-dict-api/skjcmanager-dict-api.iml" filepath="$PROJECT_DIR$/skjcmanager-service-api/skjcmanager-dict-api/skjcmanager-dict-api.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager-ops/skjcmanager-flow/skjcmanager-flow.iml" filepath="$PROJECT_DIR$/skjcmanager-ops/skjcmanager-flow/skjcmanager-flow.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager-ops-api/skjcmanager-flow-api/skjcmanager-flow-api.iml" filepath="$PROJECT_DIR$/skjcmanager-ops-api/skjcmanager-flow-api/skjcmanager-flow-api.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager-gateway/skjcmanager-gateway.iml" filepath="$PROJECT_DIR$/skjcmanager-gateway/skjcmanager-gateway.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager-ops/skjcmanager-log/skjcmanager-log.iml" filepath="$PROJECT_DIR$/skjcmanager-ops/skjcmanager-log/skjcmanager-log.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager-ops/skjcmanager-ops.iml" filepath="$PROJECT_DIR$/skjcmanager-ops/skjcmanager-ops.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager-ops-api/skjcmanager-ops-api.iml" filepath="$PROJECT_DIR$/skjcmanager-ops-api/skjcmanager-ops-api.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager-plugin/skjcmanager-plugin.iml" filepath="$PROJECT_DIR$/skjcmanager-plugin/skjcmanager-plugin.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager-plugin-api/skjcmanager-plugin-api.iml" filepath="$PROJECT_DIR$/skjcmanager-plugin-api/skjcmanager-plugin-api.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager-ops/skjcmanager-report/skjcmanager-report.iml" filepath="$PROJECT_DIR$/skjcmanager-ops/skjcmanager-report/skjcmanager-report.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager-ops/skjcmanager-resource/skjcmanager-resource.iml" filepath="$PROJECT_DIR$/skjcmanager-ops/skjcmanager-resource/skjcmanager-resource.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager-ops-api/skjcmanager-resource-api/skjcmanager-resource-api.iml" filepath="$PROJECT_DIR$/skjcmanager-ops-api/skjcmanager-resource-api/skjcmanager-resource-api.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager-service-api/skjcmanager-scope-api/skjcmanager-scope-api.iml" filepath="$PROJECT_DIR$/skjcmanager-service-api/skjcmanager-scope-api/skjcmanager-scope-api.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager-service/skjcmanager-service.iml" filepath="$PROJECT_DIR$/skjcmanager-service/skjcmanager-service.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager-service-api/skjcmanager-service-api.iml" filepath="$PROJECT_DIR$/skjcmanager-service-api/skjcmanager-service-api.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager-ops/skjcmanager-swagger/skjcmanager-swagger.iml" filepath="$PROJECT_DIR$/skjcmanager-ops/skjcmanager-swagger/skjcmanager-swagger.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager-service/skjcmanager-system/skjcmanager-system.iml" filepath="$PROJECT_DIR$/skjcmanager-service/skjcmanager-system/skjcmanager-system.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager-service-api/skjcmanager-system-api/skjcmanager-system-api.iml" filepath="$PROJECT_DIR$/skjcmanager-service-api/skjcmanager-system-api/skjcmanager-system-api.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager-service/skjcmanager-user/skjcmanager-user.iml" filepath="$PROJECT_DIR$/skjcmanager-service/skjcmanager-user/skjcmanager-user.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager-service-api/skjcmanager-user-api/skjcmanager-user-api.iml" filepath="$PROJECT_DIR$/skjcmanager-service-api/skjcmanager-user-api/skjcmanager-user-api.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager-ops/skjcmanager-xxljob/skjcmanager-xxljob.iml" filepath="$PROJECT_DIR$/skjcmanager-ops/skjcmanager-xxljob/skjcmanager-xxljob.iml" /> <module fileurl="file://$PROJECT_DIR$/skjcmanager-ops/skjcmanager-xxljob-admin/skjcmanager-xxljob-admin.iml" filepath="$PROJECT_DIR$/skjcmanager-ops/skjcmanager-xxljob-admin/skjcmanager-xxljob-admin.iml" /> </modules> </component> </project> skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/constant/LauncherConstant.java
@@ -40,7 +40,7 @@ /** * nacos dev 地址 */ String NACOS_DEV_ADDR = "172.16.13.144:8848"; String NACOS_DEV_ADDR = "172.16.13.150:8848"; /** * nacos prod 地址 skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/launch/LauncherServiceImpl.java
@@ -38,6 +38,11 @@ // 通用注册 PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.server-addr", LauncherConstant.nacosAddr(profile)); PropsUtil.setProperty(props, "spring.cloud.nacos.config.server-addr", LauncherConstant.nacosAddr(profile)); //自定义注册 PropsUtil.setProperty(props, "spring.cloud.nacos.config.namespace", "zhongrijian"); PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.namespace", "zhongrijian"); PropsUtil.setProperty(props, "spring.cloud.sentinel.transport.dashboard", LauncherConstant.sentinelAddr(profile)); PropsUtil.setProperty(props, "spring.zipkin.base-url", LauncherConstant.zipkinAddr(profile)); PropsUtil.setProperty(props, "spring.datasource.dynamic.enabled", "false"); skjcmanager/skjcmanager-service/skjcmanager-sm/pom.xml
@@ -18,6 +18,12 @@ <groupId>org.springblade</groupId> <artifactId>blade-core-boot</artifactId> </dependency> <!--hk Hikvision AI 安全认证库--> <dependency> <groupId>com.hikvision.ga</groupId> <artifactId>artemis-http-client</artifactId> <version>1.1.3</version> </dependency> </dependencies> <build> skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/HkConstant.java
New file @@ -0,0 +1,65 @@ package cn.gistack.sm.hk.constant; /** * @author zhongrj * @since 2021-08-06 */ public class HkConstant { /** * post */ public static final String HOST = "36.134.79.80:1443"; /** * STEP2:设置OpenAPI接口的上下文 */ public static final String ARTEMIS_PATH = "/artemis"; /** * appKey */ public static final String AppKey = "25476341"; /** * appSecret */ public static final String AppSecret = "1eyDaLIxOU4XBC8P7Jyr"; /** * 分页获取监控点资源 url */ public static final String cameras = "/api/resource/v1/cameras"; /** * 视频预览url */ public static final String previewURLs = "/api/video/v2/cameras/previewURLs"; public static final String previewURLshttps = "/api/vnsc/mls/v1/preview/openApi/getPreviewParam"; /** * 设备查询 */ public static final String camerasID = "/api/irds/v2/resource/resourcesByParams"; /** * 语音对讲 */ public static final String talkURLs = "/api/vnsc/mls/v1/talk/openApi/getTalkParam"; /** * 查询编码设备列表v2 */ public static final String searchURLs = "/api/resource/v2/encodeDevice/search"; /** * 查询编码设备列表v2 */ public static final String cameraSearchURLs = "/api/resource/v2/camera/search"; } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/ProtocolConstant.java
New file @@ -0,0 +1,37 @@ package cn.gistack.sm.hk.constant; /** * 取流协议常量 * @author zhongrj * @since 2021-08-06 */ public interface ProtocolConstant { /** * HIK私有协议,使用视频SDK进行播放时,传入此类型; */ String HIK = "hik"; /** * RTSP协议 */ String RTSP = "rtsp"; /** * RTMP协议(RTMP协议只支持海康SDK协议、EHOME协议、ONVIF协议接入的设备;只支持H264视频编码和AAC音频编码) */ String RTMP = "rtmp"; /** * HLS协议(HLS协议只支持海康SDK协议、EHOME协议、ONVIF协议接入的设备;只支持H264视频编码和AAC音频编码) */ String HLS = "hls"; String HLSS = "hlss"; /** * Websocket协议(一般用于H5视频播放器取流播放) */ String WS ="ws"; } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/controller/HkController.java
New file @@ -0,0 +1,37 @@ package cn.gistack.sm.hk.controller; import cn.gistack.sm.hk.constant.HkConstant; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springframework.web.bind.annotation.*; import static cn.gistack.sm.hk.util.GetCameraPreviewURL.GetCameraResourcePage; /** * @author zhongrj * @Description: 海康设备控制层 * @date 2023-03-30 */ @Slf4j @Api(tags = "海康设备") @RestController @RequestMapping("/hk/hk") @AllArgsConstructor public class HkController { /** * 分页列表查询 * @param query 查询参数 * @return */ @ApiOperation(value = "海康设备-分页列表查询", notes = "海康设备-分页列表查询") @GetMapping(value = "/queryHkList") public R queryHkList(Query query) { // 查询海康设备列表并返回 return R.data(GetCameraResourcePage(query.getCurrent(), query.getSize(), HkConstant.cameras)); } } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/util/GetCameraPreviewURL.java
New file @@ -0,0 +1,285 @@ package cn.gistack.sm.hk.util; import cn.gistack.sm.hk.constant.HkConstant; import cn.gistack.sm.hk.constant.ProtocolConstant; 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 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 GetCameraPreviewURL { /** * 获取视频预览数据 * * @param url 视频预览url * @param cameraIndexCode 监控点唯一标识 * @return */ public static String GetCameraPreviewURL(String url, String cameraIndexCode, String protocol) { /** * 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<String, String> path = new HashMap<String, String>(2) { { //根据现场环境部署确认是http还是https put("https://", apiUrl); } }; /** * STEP4:设置参数提交方式 */ String contentType = "application/json"; /** * STEP5:组装请求参数 */ // JSONObject jsonBody = new JSONObject(); // jsonBody.put("indexCode", cameraIndexCode); // jsonBody.put("streamType", 0); // jsonBody.put("netZoneCode", 0); // jsonBody.put("protocol", protocol); // jsonBody.put("transmode", 1); // jsonBody.put("expireTime", 300); // String body = jsonBody.toJSONString(); 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(); /** * STEP6:调用接口 */ String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, contentType, null);// post请求application/json类型参数 return result; } /** * 获取视频预览数据 * * @param url 视频预览url * @param cameraCode 监控点唯一标识 * @return */ public static String QueryCameraPreviewURL(String url, String cameraCode, String resourceType, String key) { /** * 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<String, String> path = new HashMap<String, String>(2) { { //根据现场环境部署确认是http还是https put("https://", apiUrl); } }; /** * STEP4:设置参数提交方式 */ String contentType = "application/json"; /** * STEP5:组装请求参数 */ JSONObject jsonBody = new JSONObject(); List<JSONObject> 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); /** * STEP6:调用接口 */ String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, contentType, null);// post请求application/json类型参数 return result; } /** * 语音对讲 * * @param url 语音对讲url * @param cameraIndexCode 监控点唯一标识 * @return */ public static String GetTalkURLs(String url, String cameraIndexCode) { /** * 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<String, String> path = new HashMap<String, String>(2) { { //根据现场环境部署确认是http还是https put("https://", apiUrl); } }; /** * STEP4:设置参数提交方式 */ String contentType = "application/json"; /** * STEP5:组装请求参数 */ 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(); /** * STEP6:调用接口 */ String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, contentType, null);// post请求application/json类型参数 return result; } /** * 获取监控点资源分页数据 * * @param url 监控资源url * @return */ public static String GetCameraResourcePage(Integer pageNo, Integer pageSize, String url) { /** * 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<String, String> path = new HashMap<String, String>(2) { { //根据现场环境部署确认是http还是https put("https://", apiUrl); } }; /** * STEP4:设置参数提交方式 */ String contentType = "application/json"; /** * STEP5:组装请求参数 */ JSONObject jsonBody = new JSONObject(); jsonBody.put("pageNo", pageNo); jsonBody.put("pageSize", pageSize); String body = jsonBody.toJSONString(); /** * STEP6:调用接口并返回数据 * post请求application/json类型参数; */ return ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, contentType, null); } public static void main(String[] args) { String result = GetCameraResourcePage(1, 10, HkConstant.cameras); //根据设备id获取设备编号 // String result1 = QueryCameraPreviewURL(HkConstant.camerasID, "111111222", "encodeDevice", "deviceCode"); 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 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(); //根据子节点编号获取设备播放地址 String result3 = GetCameraPreviewURL(HkConstant.previewURLs, "59f945a2d0354eb3b2794979c62228f2", ProtocolConstant.HLS); //根据子节点编号获取音频对讲地址 // 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("result4 = " + result4); } }