vue3实现海康威视根据海康插件进行监控实时预览和回放功能

这篇具有很好参考价值的文章主要介绍了vue3实现海康威视根据海康插件进行监控实时预览和回放功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

先点赞后观看,养成好习惯。

介绍

因为我的文章已经写过基于vue实现海康web插件进行视频播放开箱即用文章,这个文章是利用vite+vue3+js进行编写的,大致内容跟vue2一样,拿过去能直接用。

至于我为什么要用js而不用ts,因为海康提供的三个脚本为js语言的,ts尝试过一次,我道行太浅,没搞明白。

这些代码是可以直接使用的,如果对你有帮助,麻烦点个赞。文章来源地址https://www.toymoban.com/news/detail-454619.html

如果需要vue2的开发,点击跳转vue2开发文章 

接下来进入正题。

一、插件的下载与安装

下载海康提供的插件和js文件,我上一个文章有讲过。

点击跳转至上一个文章。

引入方式和v2有一些不同,要在主目录下的index.html中引入js文件。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <link rel="icon" type="image/svg+xml" href="/vite.svg" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Vite + Vue + js</title>
</head>

<body>
    <div id="app"></div>
    <script src="/jquery-1.12.4.min.js"></script>
    <script src="/jsencrypt.min.js"></script>
    <script src="/jsWebControl-1.0.0.min.js"></script>
    <script type="module" src="/src/main.js"></script>
</body>

</html>

二、在所需视频组件中进行代码编写

我这里是直接把我测试的代码全放进去了,可以全部复制在组件里既可以使用。

这里我用的是setup语法糖,有不一样的可自行修改。

<!-- 视频播放组件 -->
<template>
  <div class="main" ref="playWndBox">
    <div
      id="playWnd"
      class="playWnd"
      :style="{
        height: playWndHeight + 'px',
        width: playWndWidth + 'px',
      }"
    ></div>
  </div>
</template>

<script setup>
import { ref, onMounted, onBeforeUnmount, getCurrentInstance, nextTick } from 'vue'

const playWndBox = ref(null)
let playWndHeight = ref('')
let playWndWidth = ref('')
let pubKey = ref('')
let oWebControl = ref(null)
let objData = ref({
  appkey: "",                 //海康提供的appkey
  ip: "",                     //海康提供的ip   
  secret: "",                 //海康提供的secret
  port: 443,
  playMode: 0,        // 0 预览 1回放
  layout: "1x1",      //页面展示的模块数【16】
})

onMounted(() => {

  // 获取页面的实例对象
  const pageInstance = getCurrentInstance();
  // 获取dom节点对象
  const tagDomObj = pageInstance.refs.playWndBox;
  playWndHeight.value = tagDomObj.clientHeight;
  playWndWidth.value = tagDomObj.clientWidth;

  // 监听scroll事件,使插件窗口尺寸跟随DIV窗口变化
  window.addEventListener("scroll", () => {
    console.log(5);

    // return
    if (oWebControl.value != null) {
      oWebControl.JS_Resize(
        tagDomObj.clientWidth,
        tagDomObj.clientHeight
      );
      this.setWndCover();
    }
  });

  // 监听resize事件,使插件窗口尺寸跟随DIV窗口变化
  window.addEventListener("resize", (e) => {
    console.log(0);

    if (oWebControl.value != null) {
      oWebControl.JS_Resize(
        tagDomObj.clientWidth,
        tagDomObj.clientHeight
      );
      this.setWndCover();
    }
  });

  // 初始化播放器插件
  nextTick(() => {
    initPlugin();
  })
})

onBeforeUnmount(() => {
  if (oWebControl.value != null) {
    // 先让窗口隐藏,规避可能的插件窗口滞后于浏览器消失问题
    oWebControl.JS_HideWnd();
    // 销毁当前播放的视频
    oWebControl.JS_RequestInterface({ funcName: "destroyWnd" });
    // 断开与插件服务连接
    oWebControl.JS_Disconnect();
  }
})



const initPlugin = () => {
  oWebControl = new WebControl({
    szPluginContainer: "playWnd", // 指定容器id
    iServicePortStart: 15900, // 指定起止端口号,建议使用该值
    iServicePortEnd: 15900,
    szClassId: "23BF3B0A-2C56-4D97-9C03-0CB103AA8F11", // 用于IE10使用ActiveX的clsid
    cbConnectSuccess: () => {
      // 创建WebControl实例成功
      oWebControl
        .JS_StartService("window", {
          // WebControl实例创建成功后需要启动服务
          // 值"./VideoPluginConnect.dll"写死
          dllPath: "./VideoPluginConnect.dll",
        })
        .then(
          function () {
            // 设置消息回调
            oWebControl.JS_SetWindowControlCallback({
              // cbIntegrationCallBack: cbIntegrationCallBack,
            });
            //JS_CreateWnd创建视频播放窗口,宽高可设定
            oWebControl
              .JS_CreateWnd("playWnd", 1152, 581, { bEmbed: true })//这一部分很重要,两个参数为你盒子的宽高,这样是写死是防止组件加载之前出现白屏;bEmbed: true 防止窗口闪烁
              .then(function () {
                // 创建播放实例成功后初始化
                init();
              });
          },
          function () {
            // 启动插件服务失败
          }
        );
    },
    // 创建WebControl实例失败
    cbConnectError: function () {
      // 这里写创建WebControl实例失败时的处理步骤,下面的代码仅做参看,具体实现步骤根据个人需求进行编写!!!!!!!!


      // console.log(0);
      // oWebControl.value = null;
      // // 程序未启动时执行error函数,采用wakeup来启动程序
      // window.WebControl.JS_WakeUp("VideoWebPlugin://");
      // initCount++;
      // if (initCount < 3) {
      //   setTimeout(function () {
      //     initPlugin();
      //   }, 3000);
      // } else {
      //   setTimeout(function () {
      //     setTimeout(function () {
      //       $router.push('/home/PlugDown')
      //     }, 4000)
      //   }, 4000)
      // }
    },
    cbConnectClose: () => {
      // 异常断开:bNormalClose = false
      // JS_Disconnect正常断开:bNormalClose = true
      // console.log("cbConnectClose");
      oWebControl.value = null;
    },
  });
  // oWebControl.JS_CuttingPartWindow(500, 500, 500, 500);

}




// 初始化
const init = (callback) => {
  getPubKey(() => {
    let appkey = objData.value.appkey;                   //综合安防管理平台提供的appkey,必填
    let secret = setEncrypt(objData.value.secret); //综合安防管理平台提供的secret,必填
    let ip = objData.value.ip;                           //综合安防管理平台IP地址,必填
    let playMode = objData.value.playMode;                //初始播放模式:0-预览,1-回放
    let port = objData.value.port;                        //综合安防管理平台端口,若启用HTTPS协议,默认443
    let snapDir = "D:\\SnapDir";                        //抓图存储路径
    let videoDir = "D:\\VideoDir";                      //紧急录像或录像剪辑存储路径
    let layout = objData.value.layout;                   //playMode指定模式的布局
    let enableHTTPS = 1;                                //是否启用HTTPS协议与综合安防管理平台交互,这里总是填1
    let encryptedFields = "secret";                     //加密字段,默认加密领域为secret
    let showToolbar = 1;                                //是否显示工具栏,0-不显示,非0-显示
    let showSmart = 0;                                  //是否显示移动框线框,0-不显示,非0-显示
    let buttonIDs =
      "0,16,256,257,258,259,260,512,513,514,515,516,517,768,769"; //自定义工具条按钮
    // var toolBarButtonIDs = "2049,2304" // 工具栏上自定义按钮
    oWebControl
      .JS_RequestInterface({
        funcName: "init",
        argument: JSON.stringify({
          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,              //自定义工具条按钮
        }),
      })
      .then(function (oData) {
        oWebControl.JS_Resize(playWndWidth.value, playWndHeight.value); // 初始化后resize一次,规避firefox下首次显示窗口后插件窗口未与DIV窗口重合问题
        if (callback) {
          callback();
        }
        // 隐藏
        // oWebControl.JS_HideWnd()
      });
  });
}

// RSA 加密
let setEncrypt = (value) => {
  let encrypt = new window.JSEncrypt();
  encrypt.setPublicKey(pubKey);
  return encrypt.encrypt(value);
}
// 获取公钥
const getPubKey = (callback) => {
  oWebControl
    .JS_RequestInterface({
      funcName: "getRSAPubKey",
      argument: JSON.stringify({
        keyLength: 1024,
      }),
    })
    .then(function (oData) {
      if (oData.responseMsg.data) {
        pubKey = oData.responseMsg.data;
        callback();
      }
    });
}



// 调用这个函数可进行视频播放
// 视频预览功能
const previewVideo = (data) => {
  let cameraIndexCode = data;  // 获取输入的监控点编号值,必填
  let streamMode = 0;          // 主子码流标识:0-主码流,1-子码流
  let transMode = 1;           // 传输协议:0-UDP,1-TCP
  let gpuMode = 0;             // 是否启用GPU硬解,0-不启用,1-启用
  let wndId = -1;              // 播放窗口序号(在2x2以上布局下可指定播放窗口)

  oWebControl.JS_RequestInterface({
    funcName: "startPreview",
    argument: JSON.stringify({
      cameraIndexCode: cameraIndexCode, // 监控点编号
      streamMode: streamMode,                 // 主子码流标识
      transMode: transMode,                   // 传输协议
      gpuMode: gpuMode,                       // 是否开启GPU硬解
      wndId: wndId,                           // 可指定播放窗口
    }),
  })
    .then(function () {
      oWebControl.JS_SetWindowControlCallback({

      });
    });
}

</script>

<style lang="scss" scoped>
.main {
  position: fixed;
  top: 50%;
  left: 20%;
  transform: translateY(-50%);
  width: 60vw;
  height: 60vh;
  margin: auto;
  background-color: #ccc;
}
</style>

三、补充

我这里只实现了视频播放的功能,其它功能和vue2大同小异,可以看我vue2的文章进行修改和开发。

这些代码是可以直接使用的,如果对你有帮助,麻烦点个赞。

到了这里,关于vue3实现海康威视根据海康插件进行监控实时预览和回放功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue中web端播放rtsp视频流(摄像头监控视频)(海康威视录像机)

    ffmpeg下载 https://ffmpeg.org/download.html 找ffmpeg-release-essentials.zip点击下载,下载完解压 ffmpeg.exe 程序运行 添加成功后验证是否生效任意地方打开cmd窗口输入 ffmpeg 打印如下表示成功 新建一个app.js文件,同级目录下npm安装 node-rtsp-stream 我是直接写在项目里了,你们可以单独写在外

    2024年04月25日
    浏览(55)
  • Python海康威视SDK实现实时预览:快速构建高效视频监控系统

    Python海康威视SDK实现实时预览:快速构建高效视频监控系统 在当今社会,安全问题越来越受到人们的关注,越来越多的企业和机构开始建设视频监控系统。而Python作为一种高效、易用的编程语言,已经成为了许多开发人员的首选。本文将介绍如何使用Python海康威视SDK来实现实

    2024年02月14日
    浏览(57)
  • uni-app引入海康威视h5player实现视频监控的播放

    知识储备 uni-app web-view组件相关知识:点击学习。 海康威视相关工具下载:点击跳转下载。 web-view组件不全屏显示:uni-app web-view 如果设置不全屏 不自动铺满。 工具下载 首先下载海康威视h5player的demo 在uni-app项目中static文件夹下创建文件目录,我命名为h5player 将demo中bin文件

    2024年02月02日
    浏览(60)
  • 海康威视后台监控布防

    由于公司业务的需要,前端时间一直在折腾海康摄像头的对接。在这期间踩过许多坑,做一记录分享。 大致的业务场景,主要用到的是海康的 Ai 摄像头与高清摄像头,实现监控布防与实时画面在 web 页面展示预览。 对于 Ai 摄像头内部已经上传了训练好的模型,直接调用海康

    2024年02月06日
    浏览(91)
  • 海康威视监控摄像头连接电脑教程

    官网下载SADP软件:https://www.wolai.com/wM6rWeBrRtrfmMH2BTVUXZ 双击下载的软件进行安装 打开软件,将设备连接到摄像头,便可在软件中搜索到摄像头 选择摄像头,输入管理员密码,即可完成对摄像头的控制 设置摄像机IP地址与网口地址处于同一网段 设置网络摄像机IP地址时,保持设

    2024年02月04日
    浏览(220)
  • vue3在浏览器段展示海康监控视频

    目录 一、需求 二、最后成果展示 三、思路和方法 3.1 首先安装插件,可以在上面的地址中下载安装,建立一个dom 3.2 初始化的时候可以获取一个视频展示的一个长宽 3.3 vue data中定义 3.4 初始化视频的方法在vue的methods中 3.5 开始方法 3.6 暂停方法 3.7 销毁监控方法 需要在浏览器

    2024年02月12日
    浏览(42)
  • 海康威视监控视频,萤石云免费版四路并发访问限制绕过

    公司新装了不少海康威视摄像头,通过NVR连接到了萤石云,由于萤石云免费版限制了单个摄像头的并发访问数(每个摄像头同时只允许4个用户进行查看实时视频),但是又不想付费购买企业版,于是着手思考如何解决这个问题。 需求 需求很明确,每个摄像头需要支持多用户

    2023年04月08日
    浏览(109)
  • 海康威视监控相机的SDK与opencv调用(非工业相机)

    本篇主要对海康威视的监控相机的SDK回调进行研究,并于opencv结合,保存图像,以供后续其他处理,开发语言为C++ 2.1 海康SDK介绍 海康SDK下载地址 根据自身编译环境,下载对应的SDK,需要注意的是,不要和工业相机SDK相混淆,工业相机好像是MVS是什么玩意儿,现在暂时没研究

    2024年02月04日
    浏览(64)
  • 可视化大屏中用vue实现海康威视AR鹰眼画面(物联网项目—涉及硬件设备的连接)

    具体效果可参照海康公众号的演示视频https://mp.weixin.qq.com/s/K7C8BJGgwq3E1woXK7F6SQ 项目效果图: 能够在项目中播放鹰眼视频,其实前端的代码很少。 因为海康威视的AR鹰眼视频已经做成了一个集成控件,也就是一套完整的系统,相当于AR画面里面的东西都不需要重新写,只需要在

    2024年02月05日
    浏览(48)
  • vue3+ts实现视频根据时间轴截取,并可以通过传入截取起止时间进行当前剪辑的回显

     公司提出想做一个视频编辑功能,每次只裁剪一段即可,UI同时也想实现时间轴为关键帧图片的效果,从网上也没找到合适的组件,简单思考后觉得并不难,决定自己封装一个吧。组件涉及到的只有vue3+ts+scss,没有使用其他插件。 穿插一个简化版本,时间轴是一条线,功能

    2023年04月09日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包