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閘道器埠:綜合管理平臺中的地址 埠
實則就是綜合管理平臺中的地址