1.前置准备工作

1.1下载h5播放器

https://open.hikvision.com/download/5c67f1e2f05948198c909700?type=10

java对接海康需要那些技术 海康平台对接_码流


java对接海康需要那些技术 海康平台对接_java_02


安装包解压

java对接海康需要那些技术 海康平台对接_码流_03


1.2配置nginx反向代理

将解压的h5放到nginx目录下

java对接海康需要那些技术 海康平台对接_码流_04


java对接海康需要那些技术 海康平台对接_java对接海康需要那些技术_05


配置nginx配置文件,修改如下两个配置

java对接海康需要那些技术 海康平台对接_码流_06

server {
        listen       9051;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   F:/nginx/nginx-1.22.1/h5play/demo;
            index  /demo.html /index.htm;
        }

浏览器访问,可以出来页面说明显示正常

http://localhost:9051/demo.html

java对接海康需要那些技术 海康平台对接_json_07

1.3获取安防平台的ip,两个密钥,需要找对接相关人员,并同时要求开放你的ip可以访问安防平台

官方文档,可以参考,用处不大

https://open.hikvision.com/docs/docId?productId=5c67f1e2f05948198c909700&version=%2F9e6b1870e25348608d01b5669a7f3595&tagPath=%E6%96%87%E6%A1%A3%E8%AF%B4%E6%98%8E

2.java后台实现

2.1获取实时监控url

package com.example.demo.haikang;

import com.example.demo.util.ArtemisUtil;
import com.hikvision.artemis.sdk.ArtemisHttpUtil;
import com.hikvision.artemis.sdk.config.ArtemisConfig;
import org.json.JSONException;
import org.json.JSONObject;


import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class GetCameraPreviewURL {

    public static String GetCameraPreviewURL(){

        /**
         * STEP1:设置平台参数,根据实际情况,设置host appkey appsecret 三个参数.
         */
        ArtemisConfig.host = "ip:端口,一般是433"; // 平台的ip端口
        ArtemisConfig.appKey = "密钥1";  // 密钥appkey
        ArtemisConfig.appSecret = "密钥2";// 密钥appSecret

        /**
         * STEP2:设置OpenAPI接口的上下文
         */
        final String ARTEMIS_PATH = "/artemis";

        /**
         * STEP3:设置接口的URI地址
         */
        final String previewURLsApi = ARTEMIS_PATH + "/api/video/v1/cameras/previewURLs";
        Map<String, String> path = new HashMap<String, String>(2) {
            {
                put("https://", previewURLsApi);//根据现场环境部署确认是http还是https
            }
        };

        /**
         * STEP4:设置参数提交方式
         */
        String contentType = "application/json";

        /**
         * STEP5:组装请求参数
         */
        JSONObject jsonBody = new JSONObject();
        try {
            //监控点唯一标识
            jsonBody.put("cameraIndexCode", "587f55d033dcdd73306");
            //码流类型,0:主码流,1:子码流,2:第三码流,参数不填,默认为主码流
            jsonBody.put("streamType", 0);
            //取流协议,“rtsp”:RTSP协议,“rtmp”:RTMP协议,“hls”:HLS协议
            jsonBody.put("protocol", "ws");
            //传输协议,0:UDP,1:TCP,默认是TCP      "playType":"back-",
            jsonBody.put("transmode", 1);
            //扩展内容,格式:key=value
            jsonBody.put("expand", "streamform=ps");
        } catch (JSONException e) {
            e.printStackTrace();
        }
        String body = jsonBody.toString();
        /**
         * STEP6:调用接口
         */
        String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, contentType , null);// post请求application/json类型参数
        Map map = com.alibaba.fastjson.JSONObject.parseObject(result, Map.class);
        String data = map.get("data").toString();
        Map mapurl = com.alibaba.fastjson.JSONObject.parseObject(data, Map.class);
        Object url = mapurl.get("url");
        System.out.println("url路径:"+url);
        return result;
    }


    public static void main(String[] args) {
        //String result = GetCameraPreviewURL();  2022-12-12T00:00:00.000+08:00
        //String result = getCameraPlayBackURL("533dcdd73306","2022-12-11T00:00:00.000+08:00","2022-12-13T00:00:00.000+08:00");
        String result = ArtemisUtil.getCameraPlayBackURL("71db88fc77179", "2022-12-11T00:00:00.000+08:00", "2022-12-13T00:00:00.000+08:00");
        System.out.println("***********************************************************************8");
        System.out.println("result结果示例: " + result);
    }
}

java对接海康需要那些技术 海康平台对接_码流_08


复制后面的url路径:ws到页面中,选择高级模式

java对接海康需要那些技术 海康平台对接_码流_09


注意:协议部分根据自己的情况选择,本人不清楚这个什么意思,切换后无法看到监控

java对接海康需要那些技术 海康平台对接_码流_10


2.2获取回放视频url

package com.example.demo.util;
import com.hikvision.artemis.sdk.ArtemisHttpUtil;
import com.hikvision.artemis.sdk.config.ArtemisConfig;
import org.json.JSONException;
import org.json.JSONObject;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ArtemisUtil {




    static {
        // 代理API网关nginx服务器ip端口
        ArtemisConfig.host = ""ip:端口,一般是433"";
        // 秘钥appkey
        ArtemisConfig.appKey = "密钥1";
        // 秘钥appSecret
        ArtemisConfig.appSecret = "密钥2";
    }

    /**
     * 获取监控点回放取流url
     */
    public static String getCameraPlayBackURL(String cameraIndexCode, String beginTime, String endTime) {

        String getRootApi = ARTEMIS_PATH + "/api/video/v2/cameras/playbackURLs";
        Map<String, String> path = new HashMap<String, String>(2) {
            {
                put("https://", getRootApi);
            }
        };

        String contentType = "application/json";

        JSONObject jsonBody = null;
        try {
            jsonBody = new JSONObject();
            jsonBody.put("cameraIndexCode", cameraIndexCode);
            jsonBody.put("recordLocation", 0);//存储类型,0:中心存储,1:设备存储,默认为中心存储
            jsonBody.put("protocol", "ws");
            jsonBody.put("transmode", 1);
            jsonBody.put("beginTime", beginTime);//开始查询时间
            jsonBody.put("endTime", endTime);//结束查询时间,IOS8601格式:yyyy-MM-dd’T’HH:mm:ss.SSSXXX
            jsonBody.put("expand", "streamform=ps");
        } catch (JSONException e) {
            e.printStackTrace();
        }
        String body = jsonBody.toString();

        String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, contentType, null);
        return result;
    }

    /**
     * 时间格式转换
     * 将时间抓换成IOS8601格式
     * @param data
     * @param formatType
     * @return
     */
    public static String dateToString(Date data, String formatType){
        return new SimpleDateFormat(formatType).format(data);
    }
}

ws:开头为回放路径:去掉后面的日期,复制到页面

java对接海康需要那些技术 海康平台对接_java_11


java对接海康需要那些技术 海康平台对接_码流_12


注意:需要根据自己的情况选择是0还是1

java对接海康需要那些技术 海康平台对接_json_13