vue 对接海康威视web视频监控,配合iframe使用
一、下载视频web插件v1.5.2版本
下载地址:海康开放平台
bin目录下,打开bin文件安装
二、在vue项目的public目录新建文件夹,放入插件js文件
三、引入海康插件,创建div
四、创建WebControl实例
// 插件对象实例,初始化为null,需要创建多个插件窗口时,需要定义多个插件对象实例变量,各个变量唯一标志对应的插件实例
var oWebControl = null;
var bIE = !!window.ActiveXObject || "ActiveXObject" in window; // 是否为IE浏览器
var pubKey = ""; // demo中未使用加密,可根据需求参照开发指南自行使用加密功能
var initCount = 0; // 异常重启计数
initPlugin();
// 创建插件实例,并启动本地服务建立websocket连接,创建插件窗口
function initPlugin() {
oWebControl = new WebControl({
szPluginContainer: "playWnd",
iServicePortStart: 15900,
iServicePortEnd: 15900,
szClassId: "23BF3B0A-2C56-4D97-9C03-0CB103AA8F11", // 用于IE10使用ActiveX的clsid
cbConnectSuccess() {
console.log('创建WebControl实例成功');
oWebControl.JS_StartService('window', {
// WebControl实例创建成功后需要启动服务
dllPath: './VideoPluginConnect.dll', // 值"./VideoPluginConnect.dll"写死
})
.then(
() => {
// // 启动插件服务成功
oWebControl.JS_SetWindowControlCallback({
// 设置消息回调
cbIntegrationCallBack: cbIntegrationCallBack,
});
oWebControl.JS_CreateWnd("playWnd").then(() => {
//JS_CreateWnd创建视频播放窗口,宽高可设定
oWebControl.JS_SetDocOffset({
left: 250,
top: 125,
}); // 更新插件窗口位置
oWebControl.JS_Resize(640 * 1, 360 * 1);
initBtnClicked(); // 创建播放实例成功后初始化
});
},
() => {
// 启动插件服务失败
}
)
.catch((err) => {
console.log(err);
});
},
cbConnectError: function () {
console.log("cbConnectError");
oWebControl = null;
$("#playWnd").html("插件未启动,正在尝试启动,请稍候...");
WebControl.JS_WakeUp("VideoWebPlugin://");
initCount++;
if (initCount < 3) {
setTimeout(function () {
initPlugin();
}, 3000);
} else {
$("#playWnd").html("插件启动失败,请检查插件是否安装!");
}
},
cbConnectClose: function (bNormalClose) {
// 异常断开:bNormalClose = false
// JS_Disconnect正常断开:bNormalClose = true
if (true == bNormalClose) {
console.log("cbConnectClose normal");
} else {
console.log("cbConnectClose exception");
}
oWebControl = null;
$("#playWnd").html("插件未启动,正在尝试启动,请稍候...");
WebControl.JS_WakeUp("VideoWebPlugin://");
initCount++;
if (initCount < 3) {
setTimeout(function () {
initPlugin();
}, 3000);
} else {
$("#playWnd").html("插件启动失败,请检查插件是否安装!");
}
},
});
五、初始化
// 获取公钥
function getPubKey(callback) {
oWebControl
.JS_RequestInterface({
funcName: "getRSAPubKey",
argument: JSON.stringify({
keyLength: 1024,
}),
})
.then(function (oData) {
console.log(oData);
if (oData.responseMsg.data) {
pubKey = oData.responseMsg.data;
callback();
}
});
}
// 设置窗口控制回调
function setCallbacks() {
oWebControl.JS_SetWindowControlCallback({
cbIntegrationCallBack: cbIntegrationCallBack,
});
}
// 推送消息
function cbIntegrationCallBack(oData) {
showCBInfo(JSON.stringify(oData.responseMsg));
}
// RSA加密
function setEncrypt(value) {
var encrypt = new JSEncrypt();
encrypt.setPublicKey(pubKey);
return encrypt.encrypt(value);
}
// 显示接口返回的消息及插件回调信息
function showCBInfo(szInfo, type) {
if (type === "error") {
szInfo =
"" +
dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss") +
" " +
szInfo +
"";
} else {
szInfo =
"" +
dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss") +
" " +
szInfo +
"";
}
$("#cbInfo").html(szInfo + $("#cbInfo").html());
}
// 初始化
function requestInterface(value) {
oWebControl.JS_RequestInterface(JSON.parse(value)).then(function (oData) {
// console.log(oData)
showCBInfo(JSON.stringify(oData ? oData.responseMsg : ""));
});
}
function initBtnClicked() {
var appkey = "XXXXX"; //综合安防管理平台提供的appkey,必填
var secret = _that.setEncrypt("XXXXXXXXXX"); //综合安防管理平台提供的secret,必填
var ip = "XXXXXXXX"; //综合安防管理平台IP地址,必填
var playMode = 0; //初始播放模式:0-预览,1-回放
var port = 443; //综合安防管理平台端口,若启用HTTPS协议,默认443
var snapDir = ""; //抓图存储路径
var videoDir = ""; //紧急录像或录像剪辑存储路径
var layout = _that.layout; //playMode指定模式的布局
var enableHTTPS = 1; //是否启用HTTPS协议与综合安防管理平台交互,这里总是填1
var encryptedFields = "secret"; //加密字段,默认加密领域为secret
var showToolbar = 0; //是否显示工具栏,0-不显示,非0-显示
var showSmart = 0; //是否显示智能信息(如配置移动侦测后画面上的线框),0-不显示,非0-显示
var buttonIDs = ""; //自定义工具条按钮
var params = {
"argument":
{
appkey: appkey, //API网关提供的appkey
secret: secret, //API网关提供的secret
ip: ip, //API网关IP地址
playMode: playMode, //播放模式(决定显示预览还是回放界面)
port: port, //端口
snapDir: snapDir, //抓图存储路径
videoDir: videoDir, //紧急录像或录像剪辑存储路径
layout: layout, //布局
enablehttp: enableHTTPS, //是否启用HTTPS协议
encryptedFields: encryptedFields, //加密字段
showToolbar: showToolbar, //是否显示工具栏
showSmart: showSmart, //是否显示智能信息
buttonIDs: buttonIDs, //自定义工具条按钮
},
"funcName": "init"
}
var param = JSON.stringify(params);
//删除字符串中的回车换行
param = param.replace(/(\s*)/g, "");
// 执行初始化
requestInterface(param);
playFn()
}
六、视频预览
function playFn() {
var cameraIndexCode = Code; //获取输入的监控点编号值,必填
var streamMode = this.streamMode; //主子码流标识:0-主码流,1-子码流
var transMode = 1; //传输协议:0-UDP,1-TCP
var gpuMode = 0; //是否启用GPU硬解,0-不启用,1-启用
var wndId = -1; //播放窗口序号(在2x2以上布局下可指定播放窗口)
cameraIndexCode = cameraIndexCode.replace(/(^\s*)/g, "");
cameraIndexCode = cameraIndexCode.replace(/(\s*$)/g, "");
var params = {
"argument": {
cameraIndexCode: cameraIndexCode, //监控点编号
streamMode: streamMode, //主子码流标识
transMode: transMode, //传输协议
gpuMode: gpuMode, //是否开启GPU硬解
wndId: wndId, //可指定播放窗口
},
"funcName": "startPreview"
}
// console.log(code);
var param = JSON.stringify(params);
//删除字符串中的回车换行
param = param.replace(/(\s*)/g, "");
// 执行预览
requestInterface(param);
}
七、完整代码
play.html页面,放在public目录下
Document
html,
body {
padding: 0;
margin: 0;
}
vue文件