一、下载视频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 = "<div style='color: red;'>" + dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss") + " " + szInfo + "</div>"; } else { szInfo = "<div>" + dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss") + " " + szInfo + "</div>"; } $("#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, //布局 enableHTTPS: 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目录下
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title></head><style> html, body { padding: 0; margin: 0; }</style><body> <div id="playWnd" class="playWnd"></div> <!-- 引入海康插件 --> <script src="./static/jquery-2.1.4.js"></script> <script src="./static/jsencrypt.min.js"></script> <script src="./static/web-control_1.2.5.min.js"></script> <script> // 插件对象实例,初始化为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 requestInterface(value) { oWebControl.JS_RequestInterface(JSON.parse(value)).then(function (oData) { // console.log(oData) showCBInfo(JSON.stringify(oData ? oData.responseMsg : "")); }); } // 获取公钥 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 = "<div style='color: red;'>" + dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss") + " " + szInfo + "</div>"; } else { szInfo = "<div>" + dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss") + " " + szInfo + "</div>"; } $("#cbInfo").html(szInfo + $("#cbInfo").html()); } function initBtnClicked() { var appkey = "XXXXX"; //综合安防管理平台提供的appkey,必填 var secret = setEncrypt("XXXXXXXXXX"); //综合安防管理平台提供的secret,必填 var ip = "XXXXXXXX"; //综合安防管理平台IP地址,必填 var playMode = 0; //初始播放模式:0-预览,1-回放 var port = 443; //综合安防管理平台端口,若启用HTTPS协议,默认443 var snapDir = ""; //抓图存储路径 var videoDir = ""; //紧急录像或录像剪辑存储路径 var layout = 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, //布局 enableHTTPS: 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 = '1234'; //获取输入的监控点编号值,必填 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); } // 格式化时间 function dateFormat(oDate, fmt) { var o = { "M+": oDate.getMonth() + 1, //月份 "d+": oDate.getDate(), //日 "h+": oDate.getHours(), //小时 "m+": oDate.getMinutes(), //分 "s+": oDate.getSeconds(), //秒 "q+": Math.floor((oDate.getMonth() + 3) / 3), //季度 S: oDate.getMilliseconds(), //毫秒 }; if (/(y+)/.test(fmt)) { fmt = fmt.replace( RegExp.$1, (oDate.getFullYear() + "").substr(4 - RegExp.$1.length) ); } for (var k in o) { if (new RegExp("(" + k + ")").test(fmt)) { fmt = fmt.replace( RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length) ); } } return fmt; }</script></body></html>
vue文件
<iframe src="play.html" scrolling="no" frameborder="0"></iframe>