行业知识
vue 对接海康威视web视频监控,配合iframe使用
2026-11-06 14:59:26
来源:互联网转载
一、下载视频web插件v1.5.2版本
下载地址:海康开放平台
bin目录下,打开bin文件安装
二、在vue项目的public目录新建文件夹,放入插件js文件
三、引入海康插件,创建p
四、创建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 五、初始化
// 获取公钥 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, //布局 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目录下
Document html, body { padding: 0; margin: 0; } // 插件对象实例,初始化为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 vue文件
上一篇:C/C++ 笔试(一)
下一篇:服务器上怎么插拔硬盘的?