海康威视web3.0+vue项目使用(踩坑之路)ps:附webVideoCtrl.js文件

2023-05-16

文章目录

  • 1.海康威视web3.0
  • 2.vue项目应用
  • 3 运行环境

最近公司开发了一版监控视频的vue项目,我作为实现需求的前端真的是难为我了,各种调查后知道海康威视有web开发包,跟海康威视的SDK联系后发给我两个web二次开发包,

  • CH_WEB3.0控件开发包V1.1.0_Win32
  • CH_WEB3.0控件开发包V1.1.0_Win64

看到开发包之后我还是很开心的,但是没想到,从此开始踏上了踩坑之路.(坑真的是太多了!!!ToT)

1.海康威视web3.0

文件列表
在这里插入图片描述
首先,codebase/transform下面有一个WebComponentsKit.exe,把它安装到电脑上.打开demo.html,登录/预览. 第一个坑来了 ,有可能会提示什么什么…我记不住了,反正就是不好用,然后呢,打开web3.0 32位的包,把这里面的WebComponentsKit.exe安装上就可以了.
准备工作Ok了! 其他的demo我就不介绍了.直接进入正题吧!

2.vue项目应用

先放代码吧.新建videoTab.vue

 <div class="video-center">
      <div id="divPlugin" class="plugin"></div>
 </div>
<script>
  import {WebVideoCtrl} from '../../public/js/webVideoCtrl'

  export default {
    components: {},
    data() {
      return {
        value: 1,
        g_iWndIndex: 0,//当前选中的窗口
        g_bPTZAuto: false,
        pumpRoomName: "",
        cameraArray: [],
        webVideo: {},
        iWidth: 800,
        iHeight: 600,
        iProtocol: 1,
        szIP: "10.0.3.187",
        szPort: "80",
        szUsername: "admin",
        szPassword: "1111",
        iStreamType: 1,
        bZeroChannel: false,
        maskData: {
          maskShow: false,
          title: '提示',
          content: '失败',
          cancel: false
        },
      }
    },
    created: function () {

    },
    mounted: function () {
      this.videoInitPlugin();
    },
    destroyed: function () {
      for (var i = 0; i < this.cameraArray.length; i++) {
        WebVideoCtrl.I_Stop({iWndIndex: i});
      }
      var iRet = WebVideoCtrl.I_Logout(this.szIP);

      if (iRet !== 0) {
        console.log("WebVideoCtrl I_Logout failed");
      } else {
        console.log("WebVideoCtrl I_Logout success");
      }
    },
    methods: {
      //全屏
      clickFullScreen: function () {
        WebVideoCtrl.I_FullScreen(true);
      },
      //切换
      changeWndNum: function (iType) {
        console.log(iType);
        var iType = parseInt(iType, 10);
        WebVideoCtrl.I_ChangeWndNum(iType);
      },

      downLoadPlugin: function () {
        if (confirm(`是否下载该插件?`)) {
          window.location.href = process.env.BASE_API + `/dashboard/downloadPlug`;
        }
      },
      videoInitPlugin: function () {
        // var _this = this;
        var iRet = WebVideoCtrl.I_CheckPluginInstall();

        if (iRet === -1) {
          alert("您还未安装过插件,双击开发包目录里的WebComponentsKit.exe安装!");
          this.downLoadPlugin();
          return;
        }
        this.initPlugin()
      },
      initPlugin: function () {
        var that = this;
        WebVideoCtrl.I_InitPlugin(this.iWidth, this.iHeight, {
          bWndFull: true,//是否支持单窗口双击全屏,默I_CheckPluginInstall
          iWndowType: 2,
          // cbSelWnd: function (xmlDoc) {
          //   var giWndIndex = parseInt($(xmlDoc).find("SelectWnd").eq(0).text(), 10);
          //   var szInfo = "当前选择的窗口编号:" + giWndIndex;
          //
          //   console.log(szInfo);
          // },
          cbInitPluginComplete: function () {
            WebVideoCtrl.I_InsertOBJECTPlugin("divPlugin");
            // 检查插件是否最新
            if (WebVideoCtrl.I_CheckPluginVersion() === -1) {
              alert("检测到新的插件版本,双击开发包目录里的WebComponentsKit.exe升级!");
              return;
            }
            console.log("cameraArray length:", that.cameraArray);
            for (var i = 0; i < that.cameraArray.length; i++) {
              var szIP = that.cameraArray[i].ipAddr;
              var cameraId = that.cameraArray[i].channelId;
              WebVideoCtrl.I_Login(szIP, that.iProtocol, that.szPort, that.szUsername, that.szPassword, {
                async: false,
                success: function (xmlDoc) {
                  console.log(xmlDoc);//不能删除
                  // 开始预览
                  var szDeviceIdentify = szIP + "_" + that.szPort;
                  setTimeout(that.startRealPlay(szDeviceIdentify, i, 1), 500);  //1为通道号,  i 为窗口
                },
                error: function () {
                  console.log("login error");
                }
              });
            }
          }
        });
      },
      startRealPlay: function (szDeviceIdentify, iWndIndex, iChannelID) {
        console.log("startRealPlay: ", szDeviceIdentify, iWndIndex, iChannelID);
        WebVideoCtrl.I_StartRealPlay(szDeviceIdentify, {
          iWndIndex: iWndIndex,
          iStreamType: 1,
          iChannelID: iChannelID,
          bZeroChannel: false,
          success: function () {
            console.log("开始预览成功 ");
          },
          error: function (status, xmlDoc2) {
            console.log(xmlDoc2)//不能删除
            if (status === 403) {
              console.log("szInfo 设备不支持Websocket取流!");
            } else {
              console.log("开始预览失败 ");
            }
          }
        });
      },
      mouseDownPTZControl: function (iPTZIndex) {
        var oWndInfo = WebVideoCtrl.I_GetWindowStatus(0);

        if (oWndInfo !== null) {
          if (iPTZIndex === 9 && this.g_bPTZAuto) {
            iPTZSpeed = 0;
          } else {
            this.g_bPTZAuto = false;
          }

          WebVideoCtrl.I_PTZControl(iPTZIndex, false, {
            iPTZSpeed: 4,
            success: function (xmlDoc) {
              console.log(xmlDoc);
              if (iPTZIndex === 9 && this.g_bPTZAuto) {
                console.log(oWndInfo.szDeviceIdentify + " 停止云台成功!");
              } else {
                console.log(oWndInfo.szDeviceIdentify + " 开启云台成功!");
              }
              if (iPTZIndex === 9) {
                this.g_bPTZAuto = !this.g_bPTZAuto;
              }
            },
            error: function (status, xmlDoc) {
              console.log(oWndInfo.szDeviceIdentify + " 开启云台失败!", status, xmlDoc);
            }
          });
        }
      },
      mouseUpPTZControl: function () {
        var oWndInfo = WebVideoCtrl.I_GetWindowStatus(this.g_iWndIndex);

        if (oWndInfo !== null) {
          WebVideoCtrl.I_PTZControl(1, true, {
            success: function (xmlDoc) {
              console.log(oWndInfo.szDeviceIdentify + " 停止云台成功!", xmlDoc)
            },
            error: function (status, xmlDoc) {
              console.log(oWndInfo.szDeviceIdentify + " 停止云台失败!", status, xmlDoc);
            }
          });
        }
      }
    }
  }
</script>

然后就发现,会报错! 因为要在index.html中引入webVideoCtrl.js文件,但是海康威视web3.0的webVideoCtrl.js直接引入会报错,里面的内容需要做更改.然后发现还会报错
在这里插入图片描述
然后发现文件要在body后面引入…

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <title>my-project</title>
</head>
<body>
<noscript>
    <strong>We're sorry but my-project doesn't work properly without JavaScript enabled. Please enable it to
        continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
<script type="text/javascript" src="./js/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="./js/webVideoCtrl.js"></script>
</html>

对了,还有个错误
在这里插入图片描述
这些报错弄得我是一脸蒙蔽啊.后来终于找到方法,在 babel.config.js文件也需要改,

module.exports = {
  "presets": [
    "@vue/app"
  ],
  "ignore": [
    "public/js/webVideoCtrl.js"
  ]
}

现在就差不多了 监控就可以显示出来了,监控截图就不晒出来,公司不允许…

因为项目已经做完有一段时间,能想起来的也就这么多了,如果有问题,可以问我.我知道的一定告诉O
还有最后的一句忠告,多看看官方文档…很有用 参数一定要弄明白…

运行环境需要了解一下

3 运行环境

操作系统:
Windows XP、Windows7、Windows8、Windows8.1
浏览器:
IE8~ IE11、Chrome31+、Firefox35+,32 位浏览器
IE8~ IE11、Chrome31~ Chrome44、Firefox35~ Firefox51,64 位浏览器

就这么些吧,以后再补充…

最近好多人都私信评论问我一些问题,因为最近在做其他项目 时间很紧张,这是你们问的最多的webVideoCtrl.js文件,我放上来了 希望会帮你到你们!

webVideoCtrl.js
webVideoCtrl.js

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

海康威视web3.0+vue项目使用(踩坑之路)ps:附webVideoCtrl.js文件 的相关文章

  • npm ERR! code ERESOLVEnpm ERR! ERESOLVE unable to resolve dependency tree

    npm下载报错 xff0c 这个是因为npm版本问题 xff0c 例如我下载element ui运行npm i element ui S 因为版本问题我就无法下载 xff0c 解决办法就是在末尾加上 legacy peer deps 即np
  • 前端面试题

    浏览器 输入一个URL到页面过程中发生了什么 xff08 高频 xff09 首先在浏览器中输入URL 查找缓存 xff1a 浏览器先查看浏览器缓存 系统缓存 路由缓存中是否有该地址页面 xff0c 如果有则显示页面内容 如果没有则进行下一步
  • MATALAB动态爱心代码

    第一步 xff1a 先下载MATLAB软件 xff08 该代码只适用于此软件 xff0c 要下载软件才可运行 xff09 第二步 xff1a 点击主页 新建脚本 xff08 可自己给脚本命名 xff0c 我命名的是aixin xff09 第

随机推荐

  • Linux相关博文中使用的头文件

    收录博文中看到的已经封装好的文件时 xff0c 方便各位查看 Log hpp 日志信息 pragma once include lt iostream gt include lt cstdio gt include lt cstdarg g
  • 构造函数和析构函数执行顺序

    析构函数运行顺序 xff1a 1 主函数结束 xff1b 2 函数调用结束 xff1b 3 用delete删除 xff08 new创建的 xff09 对象时 注释代码运行结果 输入坐标6 xff0c 3 xff0c 6 xff0c 2 xf
  • 27.【C/C++ 最全vector数组的用法 (详解)】

    vector动态数组 xff08 一 xff09 什么是vector xff1f xff08 二 xff09 vector的作用是什么 xff08 三 xff09 经典用法 1 vector函数的定义 代码展示 效果展示 2 vector的
  • 析构函数运行顺序

    全局变量 xff0c 静态局部变量 xff0c 局部变量空间的堆分配和栈分配 其中全局变量和静态局部变量时从 静态存储区中划分的空间 xff0c 二者的区别在于作用域的不同 xff0c 全局变量作用域大于静态局部变量 xff08 只用于声明
  • 03_临界段的保护

    一 临界段的概念 所谓的临界段就是在执行时不能被中断的代码段 在FreeRTOS中 xff0c 临界段最常出现的地方就是对全局变量的操作 那么什么情况下临界段会被打断 xff1f 一个是系统调度 xff0c 还有一个是外部中断 在FreeR
  • Qt自定义窗口继承基类

    设计一个窗口基类模板 xff0c 方便子类的统一风格使用 xff0c 省略重写事件函数 xff0c 代码思路
  • ROS学习笔记4:创建工作空间和功能包

    一 linux命令行使用基础 xff1a 1 cd命令 xff08 change directory xff09 xff1a xff08 1 xff09 语法 xff1a cd dirName xff08 dirName xff1a 要切换
  • 一段代码给你讲清楚【链式存储结构】

    1 基础定义 链式存储结构 xff08 linked storage structure xff09 xff0c 是逻辑存储结构的一种 xff0c 链式存储结构中每一个逻辑元素用一个内存结点存储 xff0c 每一个结点都是单独分配的 xff
  • Flask之before_request与after_request

    Flask之before request与after request 更多的用法或说明请查看文档 xff1a https dormousehole readthedocs io en latest api html flask Flask
  • C++教程之迭代器Iterator

    前言 之前的两篇文章我们主要了解了vector和string的相关知识 xff0c 从中我们知道可以通过下标来访问vector的元素或者string的字符 xff0c 但是除了这种方式还有一种更为通用的方式获取元素 xff0c 那就是迭代器
  • Qt 绘制图表 - Qt Charts版

    一 前言 自从 Qt 发布以来 xff0c 给广大跨平台界面研发人员带来了无数的福利 但是Qt自己却一直没有提供自带的图表库 xff0c 这就使得 QWT QCustomPlot 等第三方图表库有了巨大的生存空间 xff0c 为了降低开发成
  • Qt 多线程使用moveToThread

    Qt有两种多线程的方法 xff0c 其中一种是继承QThread的run函数 xff0c 另外一种是把一个继承于QObject的类用moveToThread函数转移到一个Thread里 Qt4 8之前都是使用继承QThread的run这种方
  • Qt 之http学习

    在Qt网络编程中 xff0c 需要用到协议 xff0c 即HTTP 它是超文本传输协议 xff0c 它是一种文件传输协议 新建工程名为 http xff0c 然后选中QtNetwork模块 xff0c 最后Base class选择QWidg
  • QT之QString

    字符串类 QString xff1a 在Qt官方文档中是这样描述QString的 xff1a The QString class provides a Unicode character string 我们可以将做C 43 43 中的str
  • 什么是栈?什么是任务栈?

    在裸机系统中 xff0c 它们统统放在一个叫栈的地方 栈式单片机RAM里一段连续的内存空间 栈的大小一般在启动文件或者链接脚本里里面指定 最后由C库函数 main进行初始化 每个任务都是独立的 xff0c 互不干扰的 所以要为每个任务都分配
  • OPENMV上的目标检测,目标定位模型

    目标板定位模型 代码地址 前言 在17届省赛结束后 xff0c 因为担心国赛场地光照影响较大 xff0c 写了这个目标检测算法 但因为时间以及实力不足 xff0c 算法仅有了个雏形 xff0c 没能成功部署 xff0c 非常遗憾 今年寒假终
  • select函数当对端关闭后的状态

    struct timeval timeout 61 5 0 rset 61 allset nready 61 select maxfd 43 1 amp rset NULL NULL amp timeout 当使用select等待客户端发送
  • web渗透之攻击 Authentication-1-

    可利用常见漏洞 认证http明文传输 xff0c 未加密 xff0c 攻击者可通过中间人攻击获取默认密码弱口令 xff0c 简单的credentials xff0c 可以通过暴力破解获取通过其他漏洞绕过认证不正确的重置密码功能密码在本地存储
  • UART——学习总结

    UART 一 含义 xff1a 通用异步收发传输器 xff08 Universal Asynchronous Receiver Transmitter xff0c 通常称作UART xff09 是一种串行异步收发协议 xff0c 二 工作原
  • 海康威视web3.0+vue项目使用(踩坑之路)ps:附webVideoCtrl.js文件

    文章目录 1 海康威视web3 02 vue项目应用3 运行环境 最近公司开发了一版监控视频的vue项目 我作为实现需求的前端真的是难为我了 各种调查后知道海康威视有web开发包 跟海康威视的SDK联系后发给我两个web二次开发包 CH W