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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章