**海康综合安防平台SDK对接记录**
获取本地海康综合安防平台的接口参数
拿到以下几个参数:
ArtemisConfig.host = "XXX.XXX.XXX.XXX:443"; // 平台的ip端口
ArtemisConfig.appKey = "XXXXXXXX"; // 密钥appkey
ArtemisConfig.appSecret = "c7zwWuE26y0STK******";// 密钥appSecret
到海康官网查看相关结构说明
下载相关demo控件,这边为了避免客户那边装插件,采用的是H5player控件模式。
海康的平台可以提供多种流媒体格式的直播或回放流。
包括:
- rstp(这个格式html5不支持,一般在cs里应用,性能良好)
- ws html5下websocket的直播流,目前视频基本都以这个格式,flash、控件等因此被搞死。
- wss 这个是https模式下的流,其他同上。
DEMO调通
海康官网提供的demo里,可以直接测试,有一个是海康自己写的小型web服务器 web.exe 运行后就可以跑demo,还有一个是。用node.js 去跑https环境,当然你也可以自己用 nginx等。第一个demo视频很容易调出来。但性能不优,特别是多宫格播放的时候,卡的不行,还有跳秒现象严重。
卡顿问题排查
期初怀疑是springboot自带的tomcat的性能问题,多次排查后,还是问了海康官网的专家支持(特别点赞在线专家,都是一下子就告知问题),原来是现在各大主流浏览器为了安全,禁止了很多非https及跨域环境下使用一些跟调用硬件相关的功能,如:SharedArrayBuffer。Chrome从92内核开始就禁止了,而海康的播放库jsdecoder2.0版本为了提升解码性能,运用了多线程解码技术,多线程之间的数据交互需要用SharedArrayBuffer来完成。在非https和跨域隔离环境下,会匹配到播放库jsdecoder1.0的解码库播放,这播放一个画面也就罢了,多画面就卡成狗了,而且切换也会卡顿。可以F12调试浏览器,查看浏览器调用的是2.0还是1.0。
解决问题
启用跨域隔离
想要启用“跨域隔离”,整个页面必须是在https环境下才能生效,并且需要在web服务器上设置全局https响应头(Response Headers),所有网页资源都需要加上跨域隔离头 Cross-Origin-Embedder-Policy:require-corp;Cross-Origin-Opener-Policy:same-origin;Cross-Origin-Resource-Policy:cross-origin;
以Nginx为例子,在nginx的conf/vhosts下的配置文件里加上:
add_header Cross-Origin-Embedder-Policy 'require-corp';
add_header Cross-Origin-Opener-Policy 'same-origin';
add_header Cross-Origin-Resource-Policy 'cross-origin';
网站设置为https访问
- 申请空间(固定ip),域名
- 申请免费的ssl(这边用的是阿里的免费ssl),*.com.key, *.com.pem,配置到nginx里。
- 海康平台登录页面下方的根证书需要安装(为了避免后续每台浏览器都安装这个自定义的证书,也可以为这个本地海康平台申请个认证的ssl)
- 以https访问,终于F12看到调用的是jsdecoder2.0版,一切正常了。