调用海康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";
相关推荐
weixin-a1530030831611 分钟前
【playwright篇】教程(十七)[html元素知识]
java·前端·html
DCTANT34 分钟前
【原创】国产化适配-全量迁移MySQL数据到OpenGauss数据库
java·数据库·spring boot·mysql·opengauss
Touper.43 分钟前
SpringBoot -- 自动配置原理
java·spring boot·后端
黄雪超1 小时前
JVM——函数式语法糖:如何使用Function、Stream来编写函数式程序?
java·开发语言·jvm
ThetaarSofVenice1 小时前
对象的finalization机制Test
java·开发语言·jvm
望获linux2 小时前
【实时Linux实战系列】CPU 隔离与屏蔽技术
java·linux·运维·服务器·操作系统·开源软件·嵌入式软件
JosieBook3 小时前
【Java编程动手学】使用IDEA创建第一个HelloJava程序
java·开发语言·intellij-idea
Thomas_YXQ3 小时前
Unity3D DOTS场景流式加载技术
java·开发语言·unity
summer夏1233 小时前
2025.07 做什么
java·android studio
钢铁男儿3 小时前
C# 委托(调用带引用参数的委托)
java·mysql·c#