首先将自己的appkey,secret以及对应参数填上,看看是否能够取流成功。
ws取流是需要开通559端口的,可以联系海康技术开放,以及mgc需要升级版本。
普通模式的话 需要升级mgc到5.13.102版本,可以找下现场技术帮你升级,先卸载老的再上传安装新的
取流能成功,再开始接口取流
对了,海康的接口是不能够直接用前端去请求对接的,所以一定是需要后端先接。java,c,node,都可以。
接接口,需要进行加签,加签成功后,将获得的x-ca-signature放置于请求header中,官方提供加签认证文档
海康开放平台
以下是我用node请求的例子
1 需注意的是,node axios请求https接口,会报一个self-access的错误,无法请求。需要在请求前加入
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; // 解决https请求(self-...-chain)问题
2.请求取流接口代码
//生成加密串
const toSignUrl = '/artemis/api/video/v2/cameras/previewURLs'
const singStr = signature.getSignStr(toSignUrl)
console.log(singStr);
const url = 'https://27.154.53.2:10443/artemis/api/video/v2/cameras/previewURLs'
// 发起一个post请求
axios({
method: 'post',
url,
data: {
"cameraIndexCode": videoCode,
"streamType": 1,
"protocol": "ws",
"transmode": 1,
"expand": "streamform=rtp"
},
headers: {
'Content-Type': 'application/json',
'x-ca-key': appKey,
'x-ca-signature-headers': 'x-ca-key',
'x-ca-signature': singStr,
'Accept': '*/*'
}
}).then(function (response) {
console.log(response.data);
res.sendResult({data: response.data, code: 200, message: "取流成功"});
}).catch(function (error) {
console.log(error);
return res.sendResult({data: null, code: 500, message: '获取失败'})
})
其中加签代码
const singStr = signature.getSignStr(toSignUrl)
toSignUrl = '/artemis/api/video/v2/cameras/previewURLs' 每个接口,都需要传入对应的接口url再与appsecret进行加签
function getSignStr(accessSignStr){
const to_sign_str = "POST\n" +
"*/*\n" +
"application/json\n" +
`x-ca-key:${appKey}\n` +
accessSignStr;//签名拼接字符串
return (CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(appSecret, to_sign_str)))
}
这样一来,就能够成功取回对应的直播ws流了
依赖安装 "crypto-js": "^4.1.1"