创建容器

<template><div class="right" ref="playWndBox"><!-- 视频数据站位 --><div id="playWnd" class="playWnd" :style="{height: playWndHeight + 'px',width: playWndWidth + 'px'}"></div></div>
</template>

插件所需参数

data() {return {// 视频盒子的高度playWndHeight: '',// 视频盒子的宽度playWndWidth: '',oWebControl:null,initCount:0,pubKey:'',playMode: 0, // 0 预览 1回放cameraIndexCode: '', // 监控点编号objData:{appkey: "25585539",ip: "39.129.177.31",port: 1443,secret: "D2E6l7ndVKGxow5X7ZYU"}}
},

初始化方法

mounted() {// 首次加载时的到父容器的高度this.playWndHeight = this.$refs.playWndBox.clientHeight// 首次加载时的到父容器的宽度this.playWndWidth = this.$refs.playWndBox.clientWidth// 初始化摄像头this.$nextTick(() => {this.initPlugin()})// 监听resize事件,使插件窗口尺寸跟随DIV窗口变化window.addEventListener('resize', () => {if (this.oWebControl != null) {this.oWebControl.JS_Resize(this.$refs.playWndBox.clientWidth,this.$refs.playWndBox.clientHeight)}})
},

只需要调用预览方法 previewVideo,更改 cameraIndexCode 值的就可以实现预览。还需注意 init 初始化时 appkey、ip、port、secret应改为自己的参数,不然视频无法预览

methods:{// 创建播放实例initPlugin() {let that = this;this.oWebControl=nullthat.oWebControl = new WebControl({szPluginContainer: "playWnd",// 指定容器idiServicePortStart: 15900,// 指定起止端口号,建议使用该值iServicePortEnd: 15909,szClassId:"23BF3B0A-2C56-4D97-9C03-0CB103AA8F11",// 用于IE10使用ActiveX的clsidcbConnectSuccess: () => {// 创建WebControl实例成功that.oWebControl.JS_StartService("window", {         // WebControl实例创建成功后需要启动服务// 值"./VideoPluginConnect.dll"写死dllPath: './VideoPluginConnect.dll'}).then( function () {// 设置消息回调that.oWebControl.JS_SetWindowControlCallback({cbIntegrationCallBack: that.cbIntegrationCallBack});//JS_CreateWnd创建视频播放窗口,宽高可设定that.oWebControl.JS_CreateWnd("playWnd", 1000, 600).then(function () {// 创建播放实例成功后初始化that.init();});},function () {// 启动插件服务失败})},// 创建WebControl实例失败cbConnectError: function () {that.oWebControl = nullthat.$message.warning('插件未启动,正在尝试启动,请稍候...')// 程序未启动时执行error函数,采用wakeup来启动程序window.WebControl.JS_WakeUp('VideoWebPlugin://')that.initCount++if (that.initCount < 3) {setTimeout(function() {that.initPlugin()}, 3000)} else {that.$message.warning('插件启动失败,请检查插件是否安装!')}},cbConnectClose: () => {// 异常断开:bNormalClose = false// JS_Disconnect正常断开:bNormalClose = trueconsole.log('cbConnectClose')that.oWebControl = null}})},// 初始化init(callback) {let that = thisconsole.log(that.objData.appkey,99999999);that.getPubKey(() => {let appkey = that.objData.appkey //综合安防管理平台提供的appkey,必填let secret = that.setEncrypt(that.objData.secret) //综合安防管理平台提供的secret,必填let ip = that.objData.ip //综合安防管理平台IP地址,必填let playMode = that.playMode //初始播放模式:0-预览,1-回放let port = that.objData.port //综合安防管理平台端口,若启用HTTPS协议,默认443let snapDir = 'D:\\SnapDir' //抓图存储路径let videoDir = 'D:\\VideoDir' //紧急录像或录像剪辑存储路径let layout = '2x2' //playMode指定模式的布局let enableHTTPS = 1 //是否启用HTTPS协议与综合安防管理平台交互,这里总是填1let encryptedFields = 'secret' //加密字段,默认加密领域为secretlet showToolbar = 1 //是否显示工具栏,0-不显示,非0-显示let showSmart = 1 //是否显示智能信息(如配置移动侦测后画面上的线框),0-不显示,非0-显示let buttonIDs = '0,16,256,257,258,259,260,512,513,514,515,516,517,768,769' //自定义工具条按钮// var toolBarButtonIDs = "2049,2304" // 工具栏上自定义按钮that.oWebControl.JS_RequestInterface({funcName: 'init',argument: JSON.stringify({appkey: appkey, //API网关提供的appkeysecret: secret, //API网关提供的secretip: ip, //API网关IP地址playMode: playMode, //播放模式(决定显示预览还是回放界面)port: port, //端口snapDir: snapDir, //抓图存储路径videoDir: videoDir, //紧急录像或录像剪辑存储路径layout: layout, //布局enableHTTPS: enableHTTPS, //是否启用HTTPS协议encryptedFields: encryptedFields, //加密字段showToolbar: showToolbar, //是否显示工具栏showSmart: showSmart, //是否显示智能信息buttonIDs //自定义工具条按钮})}).then(function(oData) {that.oWebControl.JS_Resize(that.playWndWidth, that.playWndHeight) // 初始化后resize一次,规避firefox下首次显示窗口后插件窗口未与DIV窗口重合问题if (callback) {callback();}// 隐藏// that.oWebControl.JS_HideWnd()})})},// 获取公钥getPubKey(callback) {let that = thisthis.oWebControl.JS_RequestInterface({funcName: 'getRSAPubKey',argument: JSON.stringify({keyLength: 1024})}).then(function(oData) {if (oData.responseMsg.data) {that.pubKey = oData.responseMsg.data;callback()}})},// RSA 加密setEncrypt(value) {let that = thislet encrypt = new window.JSEncrypt()encrypt.setPublicKey(that.pubKey)return encrypt.encrypt(value)},// 回调的消息cbIntegrationCallBack(oData) {let { responseMsg: type} = oDataif (type === 'error') {console.log(type, type, this.dateFormat(new Date(), 'yyyy-MM-dd hh:mm:ss'))} else {console.log(type, type, this.dateFormat(new Date(), 'yyyy-MM-dd hh:mm:ss'))}},// 视频预览功能previewVideo(data) {let that = thislet cameraIndexCode = '53fd772e5b634a8d9a8dff9aa507bb84';// 获取输入的监控点编号值,必填let streamMode = 0;// 主子码流标识:0-主码流,1-子码流let transMode = 0;// 传输协议:0-UDP,1-TCPlet gpuMode = 0;// 是否启用GPU硬解,0-不启用,1-启用let wndId = -1;// 播放窗口序号(在2x2以上布局下可指定播放窗口)that.oWebControl.JS_RequestInterface({funcName: "startPreview",argument: JSON.stringify({cameraIndexCode: cameraIndexCode.trim(),// 监控点编号streamMode: streamMode,// 主子码流标识transMode: transMode,// 传输协议gpuMode: gpuMode,// 是否开启GPU硬解wndId: wndId// 可指定播放窗口})})},// 停止全部预览stopAllPreview() {this.oWebControl.JS_RequestInterface({funcName: 'stopAllPreview'})},// 格式化时间dateFormat(oDate, fmt) {let 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 (let 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;},// 组件销毁后destroyed() {if (this.oWebControl != null) {// 先让窗口隐藏,规避可能的插件窗口滞后于浏览器消失问题this.oWebControl.JS_HideWnd()// 销毁当前播放的视频this.oWebControl.JS_RequestInterface({funcName: "destroyWnd"})// 断开与插件服务连接this.oWebControl.JS_Disconnect()}}
}

vue 中使用海康威视视频插件相关推荐

  1. 在vue中使用海康插件实现视频监控视频直播方法二(RTMP流加Flash加swf)

    在vue中使用海康威视实现视频监控,视频直播方法二(RTMP流加Flash加swf) 第一步 用npm装这个几个包 "video.js": "^6.6.0",& ...

  2. vue中使用海康插件实现视频监控-流不稳定导致视频断开前端解决办法

    vue中使用海康插件实现视频监控-流不稳定导致视频断开前端解决办法 配置和启用海康插件详情看本人博客 链接:https://blog.csdn.net/jinglianglove/article/de ...

  3. 在vue中使用海康插件实现视频监控,视频直播方法一(RTMP流加Flash加videoJS)

    在vue中使用海康插件实现视频监控,视频直播方法一(RTMP流加Flash加videoJS) 第一步 用npm装这个几个包 "video.js": "^6.6.0&quo ...

  4. 在vue中使用海康插件实现视频实时监控(海康插件)

    在vue中使用海康插件实现视频实时监控(海康插件) 首先 下载并安装海康插件 webcontrol.exe 然后 直接就写代码把,所有方法都是海康他们直接封装好的demo 初始化之后,后台把密钥和一些 ...

  5. vue中通过monment.js插件来将时间戳转换为常用的时间格式

    vue中通过monment.js插件来将时间戳转换为常用的时间格式 在项目中很多时候需要展示时间信息,我们一般都是用时间戳来传输时间信息,但是我们在页面展示的话是我们想要的常见格式,比如:2021-4 ...

  6. Vue中实现海康威视监控的播放及云台控制

    原创不易,如果觉得对你有所帮助,拜托点赞哦~~ ^_^ 最近在做一个Vue项目,其中一个需求,就是在页面中展示出海康威视的监控图像,并进行云台控制. 研究的过程还是有点儿痛苦的,这类技术文章数量不多, ...

  7. vue中富文本编辑器vue-quill-editor在vue中自定义选择视频插入编辑文章中

    题记: ----- 互联网不该只是技术的,不能简化成内容和工具,它应该属于生活本身 vue-quill-editor 是 Vue 项目中使用的 富文本编辑器 1 引言 在实际应用开发中,在常见的管理后 ...

  8. vue中使用FullCalendar日历插件

    文章目录 前言 一.FullCalendar兼容 二.使用步骤 1.引入库 2.载入使用 总结 前言 因为要实现一个类似任务日历的功能,于是翻看了vue创造的日历组件发现不能符合要求的,所以又找了几个 ...

  9. 【原创】vue中使用CKEditor5引入插件ckeditor-duplicated-modules报错处理

    在vue中使用了ckeditor5后,收到如下图的反馈: 起初以为是小问题,像其他富文本一样加几个属性参数就有了,但是我发现我错了,错的离谱.那些参数加上去没有任何效果,后来查找下才知道是要下载插件. ...

  10. vue中引入全年日历插件calendar.js

    针对依赖amazeui的全年日历插件在vue项目中的问题 cnpm i jquery cnpm i amazeui 在当前vue中引入jquery .amazeui及相关css或这全局引入(看其他是否 ...

最新文章

  1. 【STM32】串口通信编程
  2. 探寻浏览器渲染的秘密
  3. 算法—振兴中华(C语言版)
  4. 专转本计算机第一章试题,江苏专转本 计算机第一章自测题(含答案).doc
  5. 71.Ext.form.ComboBox 完整属性
  6. 22-1图的遍历的源代码
  7. 启用IIS6的GZIP功能,提高网站打开速度,减少带宽占用【转】
  8. Linux chapter 2
  9. 怎样从本地删除git远程仓库里面的文件
  10. React中文文档 9. 表单
  11. 爆笑!让你捧腹大笑的标语
  12. 【信号与系统学习笔记】—— 【周期信号的傅里叶级数表示】之 周期信号傅里叶级数的性质解读
  13. 谷歌文件系统论文中文版
  14. 微信分享自定义图文链接
  15. 安卓Android手机直播推送同步录像功能设计与实现源码
  16. android 关机界面修改,修改Android关机界面
  17. 雅思屠鸭方法与技巧<写作部分>:顾家北的ABC大法
  18. DataRow 复制
  19. 液压、气动装置设计分析软件
  20. 如何写好一份技术简历?

热门文章

  1. 稳压二极管型号大全(转载)
  2. VC2013同一个工程生成的exe文件显示不同的图标
  3. kitti2bag将KITTI原始数据转换为rosbag
  4. 尾纤SC、ST、FC、LC区分
  5. vue项目实战(移动端)
  6. 【拆机】小米路由器4
  7. Ubuntu各类版本下载地址(网易镜像)
  8. 最新视频磨皮降噪神器 轻轻松松完成视频磨皮!Beauty box
  9. 程序员必须掌握的十大经典算法
  10. 0基础入门VTD—前言