首页 > 其他分享 >海康威视WebSDK_V3.3.0 集成vue2项目避坑+解决方案

海康威视WebSDK_V3.3.0 集成vue2项目避坑+解决方案

时间:2023-12-27 16:13:11浏览次数:38  
标签:V3.3 function 插件 InitPlugin 威视 jsVideoPlugin 避坑 js options

最近新需求项目集成WebSDK_V3.3.0的视频插件,开发过程中遇到了一些问题,如下:

  1. 无法正确引入插件/InitPlugin报错
  2. 使用文档中写的I_DestroyPlugin报错并且再次Init插件后 无法正常播放,报错如下:

如果你也有类似问题请往下看

首先 开发包如下:

1.无法正确引入插件/InitPlugin报错

首先 确认你已经正确引入了开发包的demo / codebase 路径下的 jsVideoPlugin-1.0.0.min.js,webVideoCtrl.js 两个文件,(放到项目的静态资源路径下) ,并且安装了插件_HCWebSDKPlugin.exe_ ,

import '../../../public/static/haikangV2/codebase/webVideoCtrl'
//若使用 import a from path 后面就要用 a.I_InitPlugin 我这里直接improt就直接使用webVideoCtrl的函数了

只需要引入这一个就行

然后在mounted时,进行插件的init,以下是我的代码。

mounted() {
    const _this = this
    //setTimeout不是必须哈
    setTimeout(() => {
      this.InitPlugin()
    }, 200)
    _this.$nextTick(() => {
      $(window).bind({
        resize: function () {
          _this.resizeView()
        }
      })
    })
  },
InitPlugin() {
      I_InitPlugin({
        bWndFull: true,
        iWndowType: _this.reviewdialogVisible === false ? 2 : 1,
        bDebugMode: true,
        // ... 其他回调函数的定
        cbInitPluginComplete: function () {
          // console.log('插件初始化')
          I_InsertOBJECTPlugin("divPlugin").then(() => {
            _this.checkInit = true
          }, () => {
            _this
                .$confirm(_this.$t('common.WhetherToDownload'), _this.$t('common.notice'), {
                  confirmButtonText: _this.$t('button.confirmBtn'),
                  cancelButtonText: _this.$t('button.cancelBtn'),
                  type: 'warning'
                })
                .then(() => {
                  window.open('../config/HCWebSDKPlugin.exe')
                })
                .catch(() => {
                  _this.$message.info(_this.$t('common.cancel'))
                })
          });
        },
      })
    },

如果此时你的插件不能正常工作,并且在demo里面能正常工作,那么现在要去他的源代码中改动一些东西:
首先格式化一下引入的两个文件,在webVideoCtrl.js中 能找到下面的代码:

原先有个获取dirName方法,就是获取webVideoCtrl.js自己的文件路径前缀,通过这个路径拼接再去找到jsVideoPlugin.js,但是vue结构下打包后这个文件路径获取肯定不对,因此修改为如下代码:

this.I_InitPlugin = function (options) {
            m_utilsInc.extend(m_options, options);
            //改动部分
            
            if ('object' === typeof exports && typeof module !== 'undefined') {
                require(['./jsVideoPlugin-1.0.0.min.js'], function (o) {
                    window.JSVideoPlugin = o.JSVideoPlugin
                    if (options.cbInitPluginComplete) {
                        options.cbInitPluginComplete()
                    }
                })
            } else if ('function' === typeof define && define.amd) {
                require(['./jsVideoPlugin-1.0.0.min.js'], function (o) {
                    window.JSVideoPlugin = o.JSVideoPlugin
                    if (options.cbInitPluginComplete) {
                        options.cbInitPluginComplete()
                    }
                })
            } else {
                m_utilsInc.loadScript('./jsVideoPlugin-1.0.0.min.js', function () {
                    if (options.cbInitPluginComplete) {
                        options.cbInitPluginComplete()
                    }
                })
            }
            window.addEventListener("resize", function () {
                if (m_pluginOBJECT !== null) {
                    var oElem = $("#" + m_options.szContainerID);
                    m_pluginOBJECT.JS_Resize(oElem.width(), oElem.height())
                }
            });
            window.addEventListener("unload", function () {
            })
        };

2.使用文档中写的I_DestroyPlugin报错并且再次Init插件后 无法正常播放

这个问题我和海康开发人员沟通,但是并未获得有效恢复,我的解决办法是,使用_jsVideoPlugin-1.0.0.min.js_中的另外两个函数JS_HideWnd和JS_ShowWnd代替Destory和重新init,格式化_jsVideoPlugin-1.0.0.min.js_就能找到这两个函数。

此时,在webVideoCtrl.js中新建两个函数

this.I_HideWnd = function () {
     m_pluginOBJECT.JS_HideWnd()
this.I_ShowWnd = function () {
        m_pluginOBJECT.JS_ShowWnd()
    };

然后在自己的页面调用这两个函数就可以实现hide,show
以下是我的代码

注意请先stop当前流再销毁/hide插件,为了最大限度保证插件下次show/Init正常

 let stopAll = () => {
      return new Promise(resolve => {
        I_StopAllPlay().then(() => {		//先stop当前播放的视频,全部stop再hide
          resolve('success');
        });
      });
    };

    stopAll().then(res => {
      if (res === 'success') {
        try {
          // 在I_StopAllPlay()异步操作完成后再执行
          I_HideWnd()
        } catch (e) {
          console.error('销毁失败', e);
        }
      }
    });

//合适的地方
I_ShowWnd()

以下是运行效果:
运行效果

标签:V3.3,function,插件,InitPlugin,威视,jsVideoPlugin,避坑,js,options
From: https://www.cnblogs.com/zeyuan-li/p/17930768.html

相关文章

  • 图文详解丨iOS App上架全流程及审核避坑指南
    图文详解丨iOSApp上架全流程及审核避坑指南AppStore作为苹果官方的应用商店,审核严格周期长一直让用户头疼不已,很多app都“死”在了审核这一关,那我们就要放弃iOS用户了吗?当然不是!本期我们从iOSapp上架流程开始梳理,详细了解下iOSapp上架的那些事。iOSapp上架总体流程: ​......
  • 通杀?海康威视安全接入网关任意文件读取漏洞
    声明:本文提供的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,如用于其他用途,由使用者承担全部法律及连带责任,与工具作者和本公众号无关。    背景海康威视安全接入网关使用jquery-1.7.2JavaScript......
  • MappingJackson2HttpMessageConverter使用及jackson配置原理和避坑说明
    转载自:https://blog.csdn.net/Heron22/article/details/109512976MappingJackson2HttpMessageConverter消息转换器创建和生效原理HttpMessageConverters对象的创建使用WebMvcConfigurationSupport配置时转换器创建过程使用WebMvcAutoConfiguration配置时转换器创建过......
  • 避坑合集|芝麻免押失败排查思路超详细总结(小程序场景)
    在使用小程序对接芝麻免押时,遇到了一些报错,估计把这个接口的坑都踩了个遍,这篇汇总一下我在芝麻免押上遇到的免押失败问题合集,大家注意避坑~对接流程......
  • 避坑合集|芝麻免押失败排查思路超详细总结(小程序场景)
    在使用小程序对接芝麻免押时,遇到了一些报错,估计把这个接口的坑都踩了个遍,这篇汇总一下我在芝麻免押上遇到的免押失败问题合集,大家注意避坑~对接流程......
  • mongodb避坑
    1.首先MongoDB6.0及以上的版本是不带mongoshell的,所以要向用需要自己去下载,然后将压缩包解压到桌面然后复制过去一定是复制过去,要不然mongo的管理员权限不让你复制,  完成之后在这个文件加下的bin中双击后回车就可进入shell界面。2.然后是API操作,这里用的是maven,我们将代......
  • 百度工程师移动开发避坑指南——Swift语言篇
    百度工程师移动开发避坑指南——Swift语言篇百度Geek说 ​关注 1人赞同了该文章作者|启明星小组上一篇我们介绍了移动开发常见的内存泄漏问题,见《百度工程师移动开发避坑指南——内存泄漏篇》。本篇我们将介绍Swift语言部分常见问题。对于......
  • 汽车托运如何完美避坑
    在现代社会中,汽车托运已经成为了一种常见的服务。无论是因为搬家、旅游还是其他原因,许多人都会选择将汽车托运到目的地。然而,由于市场上的服务质量参差不齐,很多人在托运过程中遇到了各种问题,甚至有些人因此遭受了损失。那么,如何在汽车托运过程中避免掉入这些“坑”呢?以下是一些实......
  • mongoDB操作避坑
    1.首先MongoDB6.0及以上的版本是不带mongoshell的,所以要向用需要自己去下载,然后将压缩包解压到桌面然后复制过去一定是复制过去,要不然mongo的管理员权限不让你复制,  完成之后在这个文件加下的bin中双击后回车就可进入shell界面。2.然后是API操作,这里用的是maven,我们将代......
  • ubuntu20.04下搭建syzkaller环境 (避坑指南)
    1、安装golang环境,最开始使用aptinstallgolang,结果在编译syzkaller时,编译没法通过。在Makefile中最开始检测NCORES失败,直接退出。根据Makefile的逻辑,其中的NCORES,应该是前面的goruntools/syz-make/make.go语句拿到了环境信息,但是aptinstallgolang安装的golang环境,这个go文......