
若依-引入海康平台对接依赖
AI-摘要
KunKunYu GPT
AI初始化中...
介绍自己
生成本文简介
推荐相关文章
前往主页
前往tianli博客
1、jar包直接导入
从官网下载的jar包有3个,把他们导入到resources/lib目录下去。
在pom.xml里面配置本地jar的依赖。
<!-- 引入本地resources/lib下的jar包 -->
<dependency>
<groupId>local</groupId>
<artifactId>hik</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/artemis-http-client-1.1.13.RELEASE.jar</systemPath>
</dependency>
2、maven依赖
<!-- https://mvnrepository.com/artifact/com.hikvision.ga/artemis-http-client -->
<dependency>
<groupId>com.hikvision.ga</groupId>
<artifactId>artemis-http-client</artifactId>
<version>1.1.3</version>
</dependency>
3、参考测试类
import cn.hutool.core.map.MapUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.hikvision.artemis.sdk.ArtemisHttpUtil;
import com.hikvision.artemis.sdk.config.ArtemisConfig;
import lombok.extern.slf4j.Slf4j;
import java.util.Map;
/**
* 海康视频流获取
* <a href="https://open.hikvision.com/docs/docId?productId=5c67f1e2f05948198c909700&version=%2Ff95e951cefc54578b523d1738f65f0a1&tagPath=%E5%AF%B9%E6%8E%A5%E6%8C%87%E5%8D%97">...</a>
*
* @author llmoe
* @date 2024/7/28 10:43
* @since 1.0.0
*/
@Slf4j
public class HikvisionUtil {
/**
* 能力开放平台的网站路径
*/
private static final String ARTEMIS_PATH = "/artemis";
/**
* 分页获取监控点资源
* <a href="https://open.hikvision.com/docs/docId?productId=5c67f1e2f05948198c909700&version=%2Ff95e951cefc54578b523d1738f65f0a1&tagPath=API%E5%88%97%E8%A1%A8-%E8%A7%86%E9%A2%91%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1-%E8%A7%86%E9%A2%91%E8%B5%84%E6%BA%90#ef459f4b">...</a>
*/
private static final String CAMERAS = "/api/resource/v1/cameras";
/**
* 获取监控点预览取流URL
* <a href="https://open.hikvision.com/docs/docId?productId=5c67f1e2f05948198c909700&version=%2Ff95e951cefc54578b523d1738f65f0a1&tagPath=API%E5%88%97%E8%A1%A8-%E8%A7%86%E9%A2%91%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1-%E8%A7%86%E9%A2%91%E8%83%BD%E5%8A%9B">...</a>
*/
private static final String PREVIEW_URLS = "/api/video/v2/cameras/previewURLs";
/**
* 获取监控点回放取流URL
* <a href="https://open.hikvision.com/docs/docId?productId=5c67f1e2f05948198c909700&version=%2Ff95e951cefc54578b523d1738f65f0a1&tagPath=API%E5%88%97%E8%A1%A8-%E8%A7%86%E9%A2%91%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1-%E8%A7%86%E9%A2%91%E8%83%BD%E5%8A%9B">...</a>
*/
private static final String PLAYBACK_URLS = "/api/video/v2/cameras/playbackURLs";
/**
* 请求类型
*/
private static final String CONTENT_TYPE = "application/json";
/**
* 成功返回码
*/
private static final String SUCCESS = "0";
/**
* 分页获取监控点资源
*
* @param appKey 访问密钥ID
* @param appSecret 与访问密钥ID结合使用的密钥
* @param host 平台门户/nginx的IP和端口(必须https)
*/
public static JSONArray getCameras(String host, String appKey, String appSecret) {
// 构建请求path
Map<String, String> path = MapUtil.builder("https://", ARTEMIS_PATH + CAMERAS).build();
ArtemisConfig artemisConfig = new ArtemisConfig();
artemisConfig.setHost(host);
artemisConfig.setAppKey(appKey);
artemisConfig.setAppSecret(appSecret);
JSONObject jsonBody = new JSONObject();
jsonBody.set("pageSize", 10000);
jsonBody.set("pageNo", 1);
// 调用接口
String result = ArtemisHttpUtil.doPostStringArtemis(path, jsonBody.toString(), null, null, CONTENT_TYPE, null);
// 获取返回结果
JSONObject data = getData(result);
return data.getJSONArray("list");
}
/**
* 校验结果并且获取data
*
* @param result 返回参数
*/
private static JSONObject getData(String result) {
// 获取返回结果
JSONObject object = JSONUtil.parseObj(result);
//返回码,0 – 成功,其他- 失败,参考附录E.1.1 视频应用错误码
if (!SUCCESS.equals(object.getStr("code"))) {
throw new RuntimeException("海康平台返回失败:" + object.getStr("msg"));
}
return object.getJSONObject("data");
}
/**
* 获取海康视频流URL(取流URL设有有效时间,有效时间为5分钟。)
*
* @param appKey 访问密钥ID
* @param appSecret 与访问密钥ID结合使用的密钥
* @param host 平台门户/nginx的IP和端口(必须https)
* @param cameraIndexCode 监控点唯一标识,分页获取监控点资源接口获取返回参数cameraIndexCode
*/
public String getVideoPreviewUrl(String cameraIndexCode, String host, String appKey, String appSecret) {
// 构建请求path
Map<String, String> path = MapUtil.builder("https://", ARTEMIS_PATH + PREVIEW_URLS).build();
JSONObject parameter = new JSONObject();
// 监控点唯一标识
parameter.set("cameraIndexCode", cameraIndexCode);
// 码流类型,0:主码流 1:子码流 2:第三码流 参数不填,默认为主码流
parameter.set("streamType", 0);
// 取流协议(应用层协议
parameter.set("protocol", "rtsp");
// 传输协议(传输层协议),0:UDP 1:TCP
parameter.set("transmode", 1);
// 输出码流转封装格式,“ps”:PS封装格式、“rtp”:RTP封装协议。当protocol=rtsp时生效,且不传值时默认为RTP封装协议。
parameter.set("streamform", "rtp");
ArtemisConfig artemisConfig = new ArtemisConfig();
artemisConfig.setHost(host);
artemisConfig.setAppKey(appKey);
artemisConfig.setAppSecret(appSecret);
String result = ArtemisHttpUtil.doPostStringArtemis(path, parameter.toString(), null, null, CONTENT_TYPE, null);
JSONObject info = getData(result);
return info.getStr("url");
}
/**
* 获取监控点回放取流URL
*
* @param appKey 访问密钥ID
* @param appSecret 与访问密钥ID结合使用的密钥
* @param host 平台门户/nginx的IP和端口(必须https)
* @param cameraIndexCode 监控点唯一标识,分页获取监控点资源接口获取返回参数cameraIndexCode
**/
public JSONObject getVideoHistoryUrl(String cameraIndexCode, String host, String appKey, String appSecret,
String beginTime,//"2022-07-22T09:58:58.000+08:00"
String endTime//"2022-07-22T10:00:00.000+08:00"
) {
// 构建请求path
Map<String, String> path = MapUtil.builder("https://", ARTEMIS_PATH + PLAYBACK_URLS).build();
JSONObject parameter = new JSONObject();
// 监控点唯一标识
parameter.set("cameraIndexCode", cameraIndexCode);
// 取流协议(应用层协议)
parameter.set("protocol", "rtsp");
//传输协议(传输层协议)0:UDP 1:TCP 默认为TCP,在protocol设置为rtsp或者rtmp时有效
parameter.set("transmode", 1);
// 查询录像的锁定类型,0-查询全部录像;1-查询未锁定录像;2-查询已锁定录像,不传默认值为0。
parameter.set("lockType", 0);
// 开始查询时间(IOS8601格式:yyyy-MM-dd’T’HH:mm:ss.SSSXXX)
parameter.set("beginTime", beginTime);
// 结束查询时间,开始时间和结束时间相差不超过三天;(IOS8601格式:yyyy-MM-dd’T’HH:mm:ss.SSSXXX)
parameter.set("endTime", endTime);
ArtemisConfig artemisConfig = new ArtemisConfig();
artemisConfig.setHost(host);
artemisConfig.setAppKey(appKey);
artemisConfig.setAppSecret(appSecret);
String result = ArtemisHttpUtil.doPostStringArtemis(path, parameter.toString(), null, null, CONTENT_TYPE, null);
return getData(result);
}
}
4、实际操作
package com.hm.manage.utils;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.hikvision.artemis.sdk.ArtemisHttpUtil;
import com.hikvision.artemis.sdk.config.ArtemisConfig;
import com.hm.common.constant.Constants;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.util.UriComponentsBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import java.io.StringReader;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
@Slf4j
public class XMLParserExample {
// 获取配置文件里的参数
@Value("${hikvision.baseurl}")
private String baseurl;
@Value("${hikvision.appKey}")
private String appKey;
@Value("${hikvision.appSecret}")
private String appSecret;
private static final String ARTEMIS_PATH = "/artemis";
public static void main(String[] args) {
// 创建ArtemisConfig对象,并设置相关参数
ArtemisConfig artemisConfig = new ArtemisConfig();
artemisConfig.setHost("172.18.16.170:8443");
artemisConfig.setAppKey("21447931");
artemisConfig.setAppSecret("7DhXWntBQcajDpI8v9jz");
//log.info("baseurl:{},appKey:{},appSecret:{}", baseurl, appKey, appSecret);
final String getCamsApi = ARTEMIS_PATH + "/api/resource/v1/cameras/indexCode";
Map<String, String> path = new HashMap<>();
path.put("https://", getCamsApi);
// 构造请求体
Map<String, String> paramMap = new HashMap<String, String>();// post请求Form表单参数
paramMap.put("cameraIndexCode", "a183125d2c7440d4af2d9091c2087afd");
String body = JSON.toJSON(paramMap).toString();
//发送请求
String s = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, "application/json",null);
JSONObject data = getData(s);
log.info("返回结果:{}", data.get("name"));
}
/**
* 校验结果并且获取data
*
* @param result 返回参数
*/
private static JSONObject getData(String result) {
// 把结果解析为JSON对象
JSONObject object = JSON.parseObject(result);
// 获取json中的code
Object code = object.get("code");
if (code.equals("0")) {
Object data = object.get("data");
log.info("getData返回结果data:{}", data);
return JSON.parseObject(JSON.toJSONString(data));
} else {
return null;
}
}
}
可以看到返回的结果
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 山山
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果