iVMS-8700综合安防管理平台第三方开发

转载地址:https://blog.csdn.net/qq_17058993/article/details/84649394

项目中需要用到海康威视的iVMS-8700综合安防管理平台,需要进行第三方接口的调用,web端实现预览和回访。从平台在服务器上的安装部署到成功实现web端预览。

这里只是做一下自己研究的过程,不涉及开发机密,不提供任何安装包。

一、准备服务器

 8核CPU 32G内存 

最好是在内网,或者公网可以访问,vpn的话需要配置客户端机器的ip和摄像头的ip在同一个网段。

在服务器上可以ping通摄像头,不可以ping通本机电脑,摄像头做了端口映射无需vpn(之前还想找个路由器,在里面配置vpn,然后摄像头的网线先接到路由器上再接公司内网,可惜没找到路由器),但是本机电脑登录还需要vpn。

后期在内网开发的话应该简单很多

 

二、海康摄像头ip地址配置修改

从海康官网下载修改ip的软件

 

 

三、服务器中心管理安装

1、初始的用户名密码在文档中,后面提示修改。

2、安装授权文件 

运行管理中心》 

授权激活: 系统维护》授权管理

 

3、API网关的获取

 

新建合作方,拿到key和secret

 

API列表可以进行在线测试,很方便。

 

4、综合管理平台添加设备和监控点

服务器上直接打开web

 

 

 

设置监控点,把监控设备添加进去

 

 

5、媒体设置》码流中转处理 (不然没法在客户端查看实时画面)

 

 

四、本地电脑 中心客户端的安装

这里选择需要的安装即可,这里只是视频开发所以只选择了视频

 

登录以后查看实时画面

 

 

五、后台JSON解析

1、获取区域列表,根据区域name 拿到某个区域的indexCode

2、获取某区域下的监控点列表,根据监控点name拿到监控点编号cameraIndexCode,后台传到前台web页面进行预览。

/**
	 * 调用POST请求类型接口,这里以分页获取区域列表为例
	 * https://ip:port/artemis/api/api/resource/v1/regions
	 *
	 * @return
	 */
	public static String callPostApiGetRegions() {
		/**
		 * https://ip:port/artemis/api/resource/v1/regions
		 * 根据API文档可以看出来,这是一个POST请求的Rest接口, 而且传入的参数为JSON字符串.
		 * ArtemisHttpUtil工具类提供了doPostFormArtemis这个函数, 一共五个参数在文档里写明其中的意思. 因为接口是https,
		 * 所以第一个参数path是个hashmap类型,请put一个key-value, querys为传入的参数. body 为JSON字符串.
		 * query不存在,所以传入null,accept和contentType不指定按照默认传null.
		 */
		String getCamsApi = ARTEMIS_PATH + "/api/resource/v1/regions";
		Map<String, String> paramMap = new HashMap<String, String>();// post请求Form表单参数
		paramMap.put("pageNo", "1");
		paramMap.put("pageSize", "2");
		String body = JSON.toJSON(paramMap).toString();
		Map<String, String> path = new HashMap<String, String>(2) {
			{
				put("https://", getCamsApi);
			}
		};
		String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, "application/json");
		return result;
	}
 
 
// -------------------监控预览------------
 
	/**
	 * 解析json 拿到indexCode
	 * @param regionList	区域里列表
	 * @param regionName	区域name
	 * @return
	 */
	public static String getindexCode(String regionList, String regionName) {
 
		String indexCode = null;
		JSONObject jsonObject = JSONObject.parseObject(regionList);
		JSONObject json = jsonObject.getJSONObject("data");
		JSONArray jsonArray = json.getJSONArray("list");
		for (int i = 0; i < jsonArray.size(); i++) {
			JSONObject jo = jsonArray.getJSONObject(i);
			if (jo.getString("name").equals(regionName)) {
				indexCode = jo.getString("indexCode");
			}
		}
		return indexCode;
	}
 
	/**
	 * 根据区域编号获取下级监控点列表
	 * @param indexCode	区域编号
	 * @return
	 */
	public static String getCameras(String indexCode) {
 
		String getCamsApi = ARTEMIS_PATH + "/api/resource/v1/regions/regionIndexCode/cameras";
		Map<String, String> paramMap = new HashMap<String, String>();// post请求Form表单参数
		paramMap.put("regionIndexCode", indexCode);
		paramMap.put("treeCode", "0");
		paramMap.put("pageNo", "1");
		paramMap.put("pageSize", "2");
		String body = JSON.toJSON(paramMap).toString();
		Map<String, String> path = new HashMap<String, String>(2) {
			{
				put("https://", getCamsApi);
			}
		};
		String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, "application/json");
		return result;
	}
 
	/**
	 * 获取监控点编号 cameraIndexCode 根据 cameraName
	 * @param camerasList	监控点列表
	 * @param cameraName	监控点name
	 * @return
	 */
	public static String getcameraIndexCode(String camerasList, String cameraName) {
 
		String cameraIndexCode = null;
		JSONObject jsonObject = JSONObject.parseObject(camerasList);
		JSONObject json = jsonObject.getJSONObject("data");
		JSONArray jsonArray = json.getJSONArray("list");
 
		for (int i = 0; i < jsonArray.size(); i++) {
			JSONObject jo = jsonArray.getJSONObject(i);
			if (jo.getString("cameraName").equals(cameraName)) {
				cameraIndexCode = jo.getString("cameraIndexCode");
			}
		}
		return cameraIndexCode;
	}
 
 
 
 
 
 

main方法:

// 1、区域列表:
		String VechicleDataResult = callPostApiGetRegions();
		System.out.println(JSONObject.toJSONString(JSONObject.parse(VechicleDataResult), true));	//显示json格式的
 
		// json解析 获取indexCode
		String indexCode = getindexCode(VechicleDataResult, "软件部办公室");
		System.out.println("indexCode:" + indexCode);
 
		// 2、区域下的监控点
		String cameras = getCameras(indexCode);
		System.out.println(JSONObject.toJSONString(JSONObject.parseObject(cameras), true));
 
		// json解析 获取cameraIndexCode
		String cameraIndexCode = getcameraIndexCode(cameras, "Camera 01");
		System.out.println("cameraIndexCode:" + cameraIndexCode);
 
		//将cameraIndexCode传递到前台web页面 进行预览(调用Demo)

六、web端预览

1、因为OpenAPI-Java接口Demo中web端预览实际上是根据最终获得的预览取流url来操作的。

所以这里需要根据视频播放应用开发流程,结合运管中心提供的API接口测试一步一步来。

最终必须成功拿到预览取流url

 

 

也可以根据Demo中进行测试

 

2、调用”获取监控点预览取流 URL”接口,获取预览 url。 

失败返回码0x02830015 一直查找原因,竟然是

摄像头的系统版本太低 需要升级 升级完成正常获取到 注册状态 和设备状态

在运管中心的设备接入框架中查看设备状态信息

 

其中监控点设备信息在综合管理平台中监控点查看

 

 

3、Demo中web预览

开放平台 http://open.hikvision.com/download 下载web插件 

 

根据文档要求先下载web插件 

注意:同一时刻只能在一个浏览器使用web插件,要是打开了两个浏览器,然后在关闭某个浏览器就会弹出下面提示框

 

 

API网关IP地址:服务器ip地址

API网关端口:综合管理平台中的地址 端口

实则就是综合管理平台中的地址

 

 

 

 

发布了5 篇原创文章 · 获赞 2 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章