海康 综合安防管理平台 对接

news/2024/11/16 12:05:29/

海康摄像头对接,通过海康综合安防管理平台对接

1. 海康综合安防管理平台介绍

1.1 官网介绍

在这里插入图片描述

1.2 个人理解

综合安防管理平台部署之后,有2个系统,一个是综合安防管理平台:是用户端系统,一个是运营中心:是综合安防平台的后台管理系统,可提供api与业务平台对接,实现实时预览、录播回放、语音对讲、报警订阅等功能。

1.3 综合安防管理平台

在这里插入图片描述

1.4 运行管理中心系统

在这里插入图片描述

2. 需求

通过对接综合安防平台API实现摄像头的实时预览,录播回放,语音对讲,安全帽监测

3. 对接步骤

3.1 运行管理中心创建合作方并授权对应的api权限

在这里插入图片描述

3.2 获取合作方的秘钥

在这里插入图片描述
说明: 该秘钥是获取api权限的秘钥

3.3 拿到该秘钥,想要调用对应API接口还需要获取某一个摄像头的主键,cameraIndexCode

3.3.1 官网api地址

在这里插入图片描述

3.3.2 代码编写

controller

 /*** 调用POST请求类型接口,分页获取监控点资源** @return*/@ApiOperation(value = "分页获取监控点资源")@GetMapping(value = "/GetResource")public String postGetResource() {return cameraService.callPostApiGetResources();}

sereviceImpl

 /*** 调用POST请求类型接口,分页获取监控点资源* 接口实际url:https://ip:port/artemis/api/resource/v1/cameras** @return*/@Overridepublic String callPostApiGetResources() {/*** https://ip:port/artemis/api/resource/v1/cameras* 过查阅AI Cloud开放平台文档或网关门户的文档可以看到分页获取监控点资源的定义,这是一个POST请求的Rest接口, 入参为JSON字符串,接口协议为https。* ArtemisHttpUtil工具类提供了doPostStringArtemis调用POST请求的方法,入参可传JSON字符串, 请阅读开发指南了解方法入参,没有的参数可传null*/ArtemisConfig config = new ArtemisConfig();config.setHost(artemisHost); // 代理API网关nginx服务器ip端口config.setAppKey(artemisAppKey);  // 秘钥appkeyconfig.setAppSecret(artemisAppSecret);// 秘钥appSecretString getCamsApi = ARTEMIS_PATH + "/api/resource/v1/cameras";Map<String, String> paramMap = new HashMap<String, String>();// post请求Form表单参数paramMap.put("pageNo", "1");paramMap.put("pageSize", "20");String body = JSON.toJSON(paramMap).toString();Map<String, String> path = new HashMap<String, String>(2) {{put("https://", getCamsApi);}};String result = null;try {result = ArtemisHttpUtil.doPostStringArtemis(config, path, body, null, null, "application/json");log.info(MessageFormat.format("分页获取监控点资源{0}", result));} catch (Exception e) {e.printStackTrace();}return result;}

返回值

{"code": "0","msg": "success","data": {"total": 1,"pageNo": 1,"pageSize": 100,"list": [{"cameraIndexCode": "a8f74dcf14f846bb95c8dff6684f897e","cameraName": "193GB_IPCamera 01","cameraType": 0,"cameraTypeName": "1","capabilitySet": "645f0a62-05ff-4396-a687-944c3f0406d6","capabilitySetName": "0","intelligentSet": "0","intelligentSetName": "null","channelNo": "1","channelType": "analog","channelTypeName": "null","createTime": "null","encodeDevIndexCode": "73c2e4903a4547f8812a26d329802cd0","encodeDevResourceType": "null","encodeDevResourceTypeName": "null","gbIndexCode": "null","installLocation": "29","keyBoardCode": "ga_h264","latitude": "null","longitude": "null","pixel": 1,"ptz": 1,"ptzController": 1,"ptzControllerName": "123","ptzName": "1234","recordLocation": "0","recordLocationName": "0","regionIndexCode": "123","status": 1,"statusName": "123","transType": 0,"transTypeName": "1","treatyType": "1","treatyTypeName": "1","viewshed": "123","updateTime": "1234567489"}]}
}

拿到对应的摄像头的主键cameraIndexCode,保存到数据库,后面调用实时预览接口,对应哪一个摄像头设备,用到这个cameraIndexCode

3.4 拿到该秘钥,就可以调用对应的实时预览接口,获取实时预览的串流url

3.4.1 官网api接口地址

https://open.hikvision.com/docs/docId?productId=5c67f1e2f05948198c909700&version=%2Ff8356830af1d40f3b1da7db12baa47af&tagPath=API%E5%88%97%E8%A1%A8-%E8%A7%86%E9%A2%91%E4%B8%9A%E5%8A%A1-%E8%A7%86%E9%A2%91%E5%8A%9F%E8%83%BD#c93b92ea
在这里插入图片描述

3.4.2 代码编写

controller

 /*** 调用POST请求类型接口,获取当前监控点的预览url** @return*/@ApiOperation(value = "获取当前监控点的预览url")@GetMapping(value = "/getOnePreviewUrl")public AjaxResult getOnePreviewUrl(@RequestParam(value = "cameraIndexCode") String cameraIndexCode) {String url = cameraService.callPostApiPreviewUrl(cameraIndexCode, "rtmp");return AjaxResult.successData(url);}

serviceImpl

/*** 调用POST请求类型接口,获取监控点预览取流URL* 接口实际url:https://ip:port/artemis/api/resource/v1/cameras** @return*/@Overridepublic String callPostApiPreviewUrl(String cameraIndexCode, String protocol) {ArtemisConfig config = new ArtemisConfig();config.setHost(artemisHost); // 代理API网关nginx服务器ip端口config.setAppKey(artemisAppKey);  // 秘钥appkeyconfig.setAppSecret(artemisAppSecret);// 秘钥appSecretString getCamsApi = ARTEMIS_PATH + "/api/video/v1/cameras/previewURLs";Map<String, Object> paramMap = new HashMap<String, Object>();// post请求Form表单参数paramMap.put("cameraIndexCode", cameraIndexCode);paramMap.put("streamType", 0);paramMap.put("protocol", protocol);String body = JSON.toJSON(paramMap).toString();Map<String, String> path = new HashMap<String, String>(2) {{put("https://", getCamsApi);}};String result = null;try {result = ArtemisHttpUtil.doPostStringArtemis(config, path, body, null, null, "application/json");log.info(MessageFormat.format("获取监控点预览取流URL{0}", result));JSONObject jsonObject = JSON.parseObject(result);String code = jsonObject.getString("code");if("0".equals(code)){String data = jsonObject.getString("data");return data;}} catch (Exception e) {e.printStackTrace();}return result;}

返回值

{"code": "0","msg": "success","data": {"url": "rtsp://10.2.145.66:655/EUrl/CLJ52BW"}
}

根据返回值中的url,放到vlc播放器中可测试是否正确(点击媒体-打开网络串流)
在这里插入图片描述
测试正确,播放正常,把该yrl返回给前端,让前端调用h5播放器,播放该url即可。


http://www.ppmy.cn/news/98821.html

相关文章

黑客为什么不攻击赌博网站?

攻击了&#xff0c;只是你不知道而已&#xff01; 同样&#xff0c;对方也不会通知你&#xff0c;告诉你他黑了赌博网站。 攻击赌博网站的不一定是正义的黑客&#xff0c;也可能是因赌博输钱而误入歧途的法外狂徒。之前看过一个警方破获的真实案件&#xff1a;28岁小伙因赌博…

java boot项目读取yml配置信息

之前 我们讲过 boot的配置文件格式主要有三种 application.properties application.yml application.yaml 我们说推荐用 application.yml 其实从 xml 到 yml 都是要系统去读取他的配置信息 今天 我们就来写一下 在java中读取 yml的配置 这里 我在 yml中多加两个配置 代码如下…

动态链接库

定义 动态链接库&#xff08;DLL&#xff09;&#xff1a;在程序运行的时候&#xff0c;连接库&#xff0c;程序发布的时候&#xff0c;还需要将库一并打包&#xff0c;不然别人用不了。 静态链接库&#xff1a;在程序编译的时候&#xff0c;链接库&#xff0c;就是把库的代码…

大数据周会-本周学习内容总结015

开会时间&#xff1a;2023.05.28 15:30 线下会议 目录 01【fhzny项目】 02【Spark】 03【调研-数仓构建】 3.1【数仓构建&#xff0c;流程图、架构图、使用场景】 场景选择 组件设计 构建流程 04【专利】 05【导师点评】 01【fhzny项目】 GitLabMyBatis-PlusSpringbo…

秒懂数据湖、数仓关系

数据湖&#xff0c;可以保存任何格式的原始数据&#xff0c;包括类似sql的结构化数据、json/csv/xml/html等半结构化数据、pdf/xlsx/音视频二进制数据等非结构化数据 数据仓库&#xff0c;提供OLAP能力&#xff0c;需要提前定义Schema 参考&#xff1a; 《云原生数据中台&am…

shader 混合模式

在所有着色器执行完毕&#xff0c;所有纹理都被应用&#xff0c;所有像素准备被呈现到屏幕之后&#xff0c;使用Blend命令来操作这些像素进行混合。 3.2 blend的语法 BlendOff:关闭blend混合&#xff08;默认值&#xff09; BlendSrcFactor DstFactor &#xff1a;配置并启动混…

几种常用的正则表达式

1、身份证号正则表达式 身份证号是一串18位数字和字母的组合&#xff0c;其中最后一位可能为数字或者字母 X。以下是可以用于匹配身份证号的正则表达式&#xff1a; /^[1-9]\d{5}(19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[Xx\d]$/上述正则表达式中包含…

【喜闻乐见,包教包会】二分图最大匹配:匈牙利算法(洛谷P3386)

&#x1f3ad;不要管上面那玩意。。。 引入 现在&#xff0c;你&#xff0c;是一位酒店的经理。 西装笔挺&#xff0c;清瘦智慧。 金丝眼镜&#xff0c;黑色钢笔。 大理石的地板&#xff0c;黑晶石的办公桌&#xff0c;晶莹的落地玻璃。 而现在&#xff0c;有几个雍容华贵的…