调用海康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";
相关推荐
长不胖的路人甲17 分钟前
斐波那契查找Java 实现 + 完整思路
java·开发语言
祐樹28 分钟前
1987年5月25日下午15-17点出生性格、运势和命运
java
正儿八经的少年36 分钟前
Spring 事务保证数据一致性
java·数据库·spring
Lakers-241 小时前
1987年5月29日晚上19-21点出生性格、运势和命运
java
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第194题】【08_Kafka篇】第10题:简述 Kafka 的 Rebalance 机制?
java·kafka·消费者组·rebalance·分布式消息队列
__log1 小时前
幂等性设计:从“重复提交“到“稳如磐石“的系统防护
java·开发语言·spring boot
spider_xcxc1 小时前
Helm 部署 K8s 集群完整笔记
java·开发语言·kubernetes
祐樹1 小时前
1987年5月23日下午15-17点出生性格、运势和命运
java
zhangjw341 小时前
第35篇:Spring Boot入门:自动配置+快速搭建,简化企业开发
java·spring boot·后端
geovindu1 小时前
java: Backtracking Algorithm
java·开发语言·windows·后端·算法·回溯算法