调用海康API预览视频

1. API

java 复制代码
    String rootRegionApi = "/api/resource/v1/regions/root";
    String subRegionApi = "/api/resource/v2/regions/subRegions";
    String cameraByRegionApi = "/api/resource/v1/regions/regionIndexCode/cameras";
    String preUrlByCameraApi = "/api/video/v2/cameras/previewURLs";

1. 获取 region 根节点

java 复制代码
	public IscRegionDO getTopTreeList() {
        String body = getRootJsonBody();
        String listResult = getHKDataByAPI(rootRegionApi, body);
        if (StringUtils.isNotEmpty(listResult)) {
            IscRegionDO obj = JSON.parseObject(listResult, IscRegionDO.class);
            return obj;
        }
        return null;
    }
       private static String getRootJsonBody() {
        JSONObject jsonBody = new JSONObject();
        jsonBody.put("treeCode", "0");
        String body = jsonBody.toJSONString();
        return body;
    } 
        private String getHKDataByAPI(String api, String body) {
        JSONObject jsonObject = queryHK(api, body);
        return jsonObject.getString("data");
    }

海康util 方法

java 复制代码
      private static JSONObject queryHK(String api, String body) {
        ArtemisConfig.host = Constant.HK_HOST;//服务器ip端口
        ArtemisConfig.appKey = Constant.HK_KEY;// 秘钥appkey
        ArtemisConfig.appSecret = Constant.HK_SECRET;// 秘钥appSecret
        HashMap<String, String> path = new HashMap<String, String>(8);
        path.put("https://", "/artemis" + api);

        String url = "https://" + Constant.HK_HOST + "/artemis" + api;
        log.info("IscRegionServiceImpl: appKey->{},appSecret->{},host->{},url->{},body->{}", ArtemisConfig.appKey, ArtemisConfig.appSecret, ArtemisConfig.host, url, body);
        String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null,
                null, "application/json", null);

        System.out.println(api + " ====== 请求返回结果:【{" + result + "}】");
        JSONObject jsonObject = JSONObject.parseObject(result);
        return jsonObject;
    }

海康maven依赖包

xml 复制代码
        <dependency>
            <groupId>com.hikvision.ga</groupId>
            <artifactId>artemis-http-client</artifactId>
            <version>1.1.3</version>
            <exclusions>
                <exclusion>
                    <groupId>ch.qos.logback</groupId>
                    <artifactId>logback-classic</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

2. 获取 region 中间节点

java 复制代码
    @Override
    public List<IscRegionDO> getSubTreeList(String indexCode) {
        String body = getSubRegionJsonBody(indexCode);
        String listResult = getHKListByAPI(subRegionApi, body);
        log.info("getSubTreeList listResult {}", listResult);

        if (StringUtils.isEmpty(listResult) || "[]".equals(listResult)) {
            List<IscCameraDO> camerasList = getCamerasByRegionIndexCode(indexCode);
            log.info("getSubTreeList camerasList {}", camerasList);
            List<IscRegionDO> resultList = transferyy(camerasList, indexCode);
            return resultList;
        } else {
            List<IscRegionDO> resultList = JSON.parseArray(listResult, IscRegionDO.class);
            resultList.forEach(o -> o.setLeaf(false));
            return resultList;
        }
    }
        private static String getSubRegionJsonBody(String parentIndexCode) {
        JSONObject jsonBody = new JSONObject();
        int pageNo = 1, pageSize = 500;
        jsonBody.put("parentIndexCode", parentIndexCode);
        jsonBody.put("resourceType", "region");
        jsonBody.put("pageNo", pageNo);
        jsonBody.put("pageSize", pageSize);
        jsonBody.put("cascadeFlag", "0");
        String body = jsonBody.toJSONString();
        return body;
    }
        private String getHKListByAPI(String api, String body) {
        JSONObject jsonObject = queryHK(api, body);
        String code = jsonObject.getString("code");// 操作成功
        JSONObject dataObject = jsonObject.getJSONObject("data");// 操作成功
        if (dataObject != null && "0".equals(code)) {// 查询成功
            String listResult = dataObject.getString("list");
            return listResult;
        }
        return null;
    }
        private List<IscRegionDO> transferyy(List<IscCameraDO> camerasList, String parentIndexCode) {
        List<IscRegionDO> resultList = new ArrayList<>();
        for (IscCameraDO iscCameraDO : camerasList) {
            IscRegionDO iscRegionDO = new IscRegionDO();
            iscRegionDO.setIndexCode(iscCameraDO.getCameraIndexCode()); // vv
            iscRegionDO.setParentIndexCode(parentIndexCode); // vv

            iscRegionDO.setName(iscCameraDO.getCameraName());//
            iscRegionDO.setStatus(iscCameraDO.getStatus());//
            iscRegionDO.setStatusName(iscCameraDO.getStatusName());//
            iscRegionDO.setLeaf(true); // vv
            resultList.add(iscRegionDO);
        }
        return resultList;
    }

3. 获取 region 叶子下的摄像头

java 复制代码
    @Override
    public List<IscCameraDO> getCamerasByRegionIndexCode(String regionIndexCode) {
        String body = getCameraJsonBody(regionIndexCode);
        String listResult = getHKListByAPI(cameraByRegionApi, body);
        if (StringUtils.isNotEmpty(listResult)) {
            List<IscCameraDO> resultList = JSON.parseArray(listResult, IscCameraDO.class);
            return resultList;
        }
        return Collections.emptyList();
    }

    private static String getCameraJsonBody(String parentIndexCode) {
        JSONObject jsonBody = new JSONObject();
        int pageNo = 1, pageSize = 500;
        jsonBody.put("regionIndexCode", parentIndexCode);
        jsonBody.put("pageNo", pageNo);
        jsonBody.put("pageSize", pageSize);
        String body = jsonBody.toJSONString();
        return body;
    }

4. 获取摄像头的视频预览连接

java 复制代码
    @Override
    public String getPreUrlByCameraIndexCode(String cameraIndexCode, String protocol) {
        String body = getPreUrlBody(cameraIndexCode, protocol);
        String listResult = getHKDataByAPI(preUrlByCameraApi, body);
        if (StringUtils.isNotEmpty(listResult)) {
            JSONObject obj = JSON.parseObject(listResult, JSONObject.class);
            String originStr = obj.getString("url");
            log.info("origin url :{}",originStr);
            String replaced = originStr.replace(Constant.HK_ORIGIN_URL, Constant.HK_REPLACE_URL);
            log.info("replaced url :{}",replaced);
            return replaced;
        }
        return null;
    }

    private static String getPreUrlBody(String cameraIndexCode, String protocol) {
        JSONObject jsonBody = new JSONObject();
        int pageNo = 1, pageSize = 500;
        jsonBody.put("cameraIndexCode", cameraIndexCode);
        if (StringUtils.isNotEmpty(protocol)) {
            jsonBody.put("protocol", protocol);
        } else {
            jsonBody.put("protocol", "hls");
        }
        jsonBody.put("pageNo", pageNo);
        jsonBody.put("pageSize", pageSize);
        String body = jsonBody.toJSONString();
        return body;
    }

其他配置

java 复制代码
    public static final String HK_HOST = "10.10.0.0";
    public static final String HK_KEY = "HK_KEY";
    public static final String HK_SECRET = "HK_SECRET";

    public static final String HK_ORIGIN_URL = "http://HK_HOST:83/openUrl";
    public static final String HK_REPLACE_URL = "https://xxx.company.com:7443/proxy-video";
相关推荐
缺点内向2 小时前
Java:创建、读取或更新 Excel 文档
java·excel
带刺的坐椅3 小时前
Solon v3.4.7, v3.5.6, v3.6.1 发布(国产优秀应用开发框架)
java·spring·solon
四谎真好看4 小时前
Java 黑马程序员学习笔记(进阶篇18)
java·笔记·学习·学习笔记
桦说编程4 小时前
深入解析CompletableFuture源码实现(2)———双源输入
java·后端·源码
java_t_t4 小时前
ZIP工具类
java·zip
lang201509285 小时前
Spring Boot优雅关闭全解析
java·spring boot·后端
pengzhuofan5 小时前
第10章 Maven
java·maven
百锦再6 小时前
Vue Scoped样式混淆问题详解与解决方案
java·前端·javascript·数据库·vue.js·学习·.net
刘一说6 小时前
Spring Boot 启动慢?启动过程深度解析与优化策略
java·spring boot·后端
壹佰大多6 小时前
【spring如何扫描一个路径下被注解修饰的类】
java·后端·spring