1. 程式人生 > >iVMS-8700綜合安防管理平臺第三方開發

iVMS-8700綜合安防管理平臺第三方開發

專案中需要用到海康威視的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閘道器埠:綜合管理平臺中的地址 埠

實則就是綜合管理平臺中的地址