vue 中使用海康威视视频插件
创建容器
<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 中使用海康威视视频插件相关推荐
- 在vue中使用海康插件实现视频监控视频直播方法二(RTMP流加Flash加swf)
在vue中使用海康威视实现视频监控,视频直播方法二(RTMP流加Flash加swf) 第一步 用npm装这个几个包 "video.js": "^6.6.0",& ...
- vue中使用海康插件实现视频监控-流不稳定导致视频断开前端解决办法
vue中使用海康插件实现视频监控-流不稳定导致视频断开前端解决办法 配置和启用海康插件详情看本人博客 链接:https://blog.csdn.net/jinglianglove/article/de ...
- 在vue中使用海康插件实现视频监控,视频直播方法一(RTMP流加Flash加videoJS)
在vue中使用海康插件实现视频监控,视频直播方法一(RTMP流加Flash加videoJS) 第一步 用npm装这个几个包 "video.js": "^6.6.0&quo ...
- 在vue中使用海康插件实现视频实时监控(海康插件)
在vue中使用海康插件实现视频实时监控(海康插件) 首先 下载并安装海康插件 webcontrol.exe 然后 直接就写代码把,所有方法都是海康他们直接封装好的demo 初始化之后,后台把密钥和一些 ...
- vue中通过monment.js插件来将时间戳转换为常用的时间格式
vue中通过monment.js插件来将时间戳转换为常用的时间格式 在项目中很多时候需要展示时间信息,我们一般都是用时间戳来传输时间信息,但是我们在页面展示的话是我们想要的常见格式,比如:2021-4 ...
- Vue中实现海康威视监控的播放及云台控制
原创不易,如果觉得对你有所帮助,拜托点赞哦~~ ^_^ 最近在做一个Vue项目,其中一个需求,就是在页面中展示出海康威视的监控图像,并进行云台控制. 研究的过程还是有点儿痛苦的,这类技术文章数量不多, ...
- vue中富文本编辑器vue-quill-editor在vue中自定义选择视频插入编辑文章中
题记: ----- 互联网不该只是技术的,不能简化成内容和工具,它应该属于生活本身 vue-quill-editor 是 Vue 项目中使用的 富文本编辑器 1 引言 在实际应用开发中,在常见的管理后 ...
- vue中使用FullCalendar日历插件
文章目录 前言 一.FullCalendar兼容 二.使用步骤 1.引入库 2.载入使用 总结 前言 因为要实现一个类似任务日历的功能,于是翻看了vue创造的日历组件发现不能符合要求的,所以又找了几个 ...
- 【原创】vue中使用CKEditor5引入插件ckeditor-duplicated-modules报错处理
在vue中使用了ckeditor5后,收到如下图的反馈: 起初以为是小问题,像其他富文本一样加几个属性参数就有了,但是我发现我错了,错的离谱.那些参数加上去没有任何效果,后来查找下才知道是要下载插件. ...
- vue中引入全年日历插件calendar.js
针对依赖amazeui的全年日历插件在vue项目中的问题 cnpm i jquery cnpm i amazeui 在当前vue中引入jquery .amazeui及相关css或这全局引入(看其他是否 ...
最新文章
- 【STM32】串口通信编程
- 探寻浏览器渲染的秘密
- 算法—振兴中华(C语言版)
- 专转本计算机第一章试题,江苏专转本 计算机第一章自测题(含答案).doc
- 71.Ext.form.ComboBox 完整属性
- 22-1图的遍历的源代码
- 启用IIS6的GZIP功能,提高网站打开速度,减少带宽占用【转】
- Linux chapter 2
- 怎样从本地删除git远程仓库里面的文件
- React中文文档 9. 表单
- 爆笑!让你捧腹大笑的标语
- 【信号与系统学习笔记】—— 【周期信号的傅里叶级数表示】之 周期信号傅里叶级数的性质解读
- 谷歌文件系统论文中文版
- 微信分享自定义图文链接
- 安卓Android手机直播推送同步录像功能设计与实现源码
- android 关机界面修改,修改Android关机界面
- 雅思屠鸭方法与技巧<写作部分>:顾家北的ABC大法
- DataRow 复制
- 液压、气动装置设计分析软件
- 如何写好一份技术简历?