vue使用海康的H5视频播放器开发包实时预览监控画面

使用原因

之前用海康的视频WEB插件实现过监控画面在前端页面的实时预览,但是会有两个问题:
1、该插件需要先进行安装,而且每次开机后也要重新启动该插件;
2、使用该插件很难更改其样式,只能使用其自带的窗口(1x1,2x2等),如过我要一个1x2的窗口就无法实现;
所以才产生了使用其它方法实现前端页面实时预览监控画面的想法。

两者优缺点

1、视频WEB插件
缺点:需要安装插件;样式难以更改;
优点:视频响应快,流畅性好,可以同时查看多个监控画面;
2、H5视频播放器开发包
缺点:视频流畅性查,卡顿等问题,特别是有查看多个监控画面的需求时不要用这种方法;
优点:不用安装插件;样式更改简单;

使用方法

1、下载开发包
在这里插入图片描述
2、将下载的开发包放入项目中
在项目中的public文件夹下新建一个h5player的文件夹(这里的文件夹名字可以自己取,后端引入时注意一下就好了),接着将刚才下载的开发包中的bin文件夹里面所有的文件都赋值到项目中的h5player文件夹下。
在这里插入图片描述
3、在项目中引入开发包文件
在public/index.html文件里引入
在这里插入图片描述
4、封装后player的demo
新增.vue文件,复制下面的代码

<template>
    <div>
      <div :id="preId" style="width: 400px; height: 200px"></div>
    </div>
  </template>
  <script>
  export default {
    name: "h5HkVideo",
    props: {
      preUrl: {
        type: String,
      },
      preId: {
        type: String,
      }
    },
    data() {
      return {
        // 播放器对象
        player: null,
      };
    },
    mounted() {
      this.$nextTick(() => {
        this.initPlayer();
      });
    },
    methods: {
      /**
       * 初始化播放器
       */
      initPlayer() {
        this.player = new window.JSPlugin({
          // 需要英文字母开头 必填
          szId: this.preId,
          // 必填,引用H5player.min.js的js相对路径
          szBasePath: "/h5player",
   
          // // 当容器div#play_window有固定宽高时,可不传iWidth和iHeight,窗口大小将自适应容器宽高
          // iWidth: 600,
          // iHeight: 400,
   
        //   // 分屏播放,默认最大分屏4*4
        //   iMaxSplit: 16,
        //   iCurrentSplit: 1,
   
        //   // 样式
        //   oStyle: {
        //     border: '#343434',
        //     borderSelect: '#FFCC00',
        //     background: '#000'
        //   }
        });
        this.initPlugin();
      },
      /**
       * 事件初始化
       */
      initPlugin() {
        this.player.JS_SetWindowControlCallback({
          windowEventSelect(iWindIndex) {
            // 插件选中窗口回调
            console.log("windowSelect callback: ", iWindIndex);
          },
          pluginErrorHandler(iWindIndex, iErrorCode, oError) {
            // 插件错误回调
            console.error(
              `window-${iWindIndex}, errorCode: ${iErrorCode}`,
              oError
            );
          },
          windowEventOver(iWindIndex) {
            // 鼠标移过回调
            // console.log("鼠标移过回调", iWindIndex);
          },
          windowEventOut(iWindIndex) {
            // 鼠标移出回调
            // console.log("鼠标移出回调", iWindIndex);
          },
          windowFullCcreenChange(bFull) {
            // 全屏切换回调
            console.log("全屏切换回调", bFull);
          },
          firstFrameDisplay(iWndIndex, iWidth, iHeight) {
            // 首帧显示回调
            console.log("首帧显示回调", iWndIndex, iWidth, iHeight);
          },
          performanceLack(iWndIndex) {
            // 性能不足回调
            console.log("性能不足回调", iWndIndex);
          },
        });
   
        // this.play();
      },
      /**
       * 播放
       */
      play(data) {
        let preUrl;
        if (data != undefined) {
          preUrl = data; // 播放地址
        } else {
          preUrl = this.preUrl; // 播放地址
        }
        const param = {
          playURL: preUrl,
          // 1:高级模式  0:普通模式,高级模式支持所有
          mode: 1,
        };
        // 当前播放窗口下标
        let index = 0;
        // console.log(this.playerArr);
        this.player.JS_Play(preUrl, param, index).then(
          () => {
            // 播放成功回调
            console.log("播放成功");
          },
          (err) => {
            console.log("播放失败");
            console.info("JS_Play failed:", err);
          }
        );
      },
    },
  };
  </script>

5、使用封装的组件

<template>
  <div class="video" ref="videoTest">
   <test-web-h-5 :preId="preId1" ref="h5Player1"></test-web-h-5>
   <test-web-h-5 :preId="preId2" ref="h5Player2"></test-web-h-5>
   <el-button type="primary" @click="handlePlay('1')">播放视频一</el-button>
   <el-button type="primary" @click="handlePlay('2')">播放视频二</el-button>
  </div>
</template>

<script>
import TestWebH5 from './components/testWebH5.vue'
export default {
  components: {
    TestWebH5,
  },
  data() {
    return {
      preId1: 'player',
      preId2: 'player2'
    }
  },
  methods: {
    handlePlay(val) {
      if (val === '1') {
        this.$refs.h5Player1.play("ws://视频一地址")
      } else {
        this.$refs.h5Player2.play("ws://视频二地址")
      }
    },
  },
</script>

<style scoped lang="scss">
.video {
  width: 100%;
  height: 100%;
}
</style>

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/641357.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaSE——类和对象(二)~~封装

目录 一.封装 二.封装扩展之包 三.static成员 四. 代码块 五. 内部类&#xff08;重要&#xff09; 大家好呀&#xff0c;我是北纬&#xff0c;接着上节我们继续讲解Java中关于类和对象的相关知识&#xff0c;今天着重给大家介绍一下关于面向对象程序的特性之一——封装。…

【网络安全】网络安全协议的重要性

一.网络安全 1.什么是网络安全 网络安全&#xff08;Cyber Security&#xff09;是指网络系统的硬件、软件及其系统中的数据受到保护&#xff0c;不因偶然的或者恶意的原因而遭受到破坏、更改、泄露&#xff0c;系统连续可靠正常地运行&#xff0c;网络服务不中断。 2.网络安…

DQL(数据查询)

目录 1. DQL概念 2. DQL - 编写顺序 3. 基础查询 3.1 查询多个字段 3.2 字段设置别名 3.3 去除重复记录 3.4 案例 4. 条件查询 4.1 语法 4.2 条件 4.3 案例&#xff1a; 5. 聚合函数 5.1 常见的聚合函数&#xff1a; 5.2 语法 5.3 案例&#xff1a; 6. 分组查…

台灯哪个牌子好?五款性价比高的照明品牌分享

在近几年&#xff0c;儿童长时间使用电子产品已成为普遍现象&#xff0c;这无疑增加了视觉负担。其次&#xff0c;现代教育体系下的学习任务之繁重&#xff0c;与80后、90后学生时代相比&#xff0c;有了显著的加重。而且&#xff0c;学习过程对数码设备的依赖性也大大增加&…

知识分享:大数据信用花导致的评分不足多久能恢复

随着金融风控领域越来越科技化&#xff0c;基于大数据技术的金融风控成为了贷前风控不可或缺的重要环节&#xff0c;相信很多人在申贷的时候都听说过大数据信用和综合评分等词语&#xff0c;那大数据信用花导致的评分不足多久能恢复呢?本文带大家一起去了解一下。 首先&#x…

PD协议:引领电子设备充电新时代

随着科技的飞速发展&#xff0c;电子设备已成为我们日常生活中不可或缺的一部分。然而&#xff0c;这些设备的充电问题一直困扰着广大用户。传统的充电方式不仅效率低下&#xff0c;而且存在着安全隐患。为了解决这一问题&#xff0c;USB Implementers Forum&#xff08;USB-IF…

机器学习-决策树算法

前言 本篇介绍决策树与随机森林的内容&#xff0c;先完成了决策树的部分。 决策树 决策树(Decision Tree)是一种有监督学习的方法&#xff0c;可以同时解决分类和回归问题&#xff0c;它能够从一系列有特征和标签的数据中总结出决策规则&#xff0c;并用树状图的结构来呈现这…

WPF中MVVM架构学习笔记

MVVM架构是一种基于数据驱动的软件开发架构&#xff0c;它将数据模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和视图模型&#xff08;ViewModel&#xff09;三者进行分离&#xff0c;使得开发者可以更加专注于各自领域的开发。其中&#xff0c;Model负…

系统架构师考试(十)

SaaS为在线客服 PaaS为二次开发&#xff0c;比如低代码平台 IaaS 硬件开发 B 是基础设施作为服务 软件架构的概念 架构风格 数据流风格 网络报文是在计算机网络中通过网络传输的数据单元&#xff0c;它是网络通信的基本单位。网络报文包含了发送方和接收方之间传输的数据&…

蛮力法0/1背包问题实验

实验项目1 蛮力法 实验题目 使用蛮力法解决0/1背包问题。 ​ 问题描述&#xff1a;给定n个重量(weight)为{w1, w2, … ,wn}、价值(key)为{v1, v2, … ,vn}的物品和一个**容量为C(contain)**的背包&#xff0c;求这些物品中的一个最有价值的子集&#xff0c;且要能够装到背包中…

第十三期Big Demo Day亮点项目:CCarbon重塑碳交易生态,助力全球绿色发展

第十三期Big Demo Day活动即将于2024年5月28日在香港数码港的CyberArena隆重举行。我们荣幸地宣布&#xff0c;利用区块链技术优化全球碳交易CCarbon项目将亮相&#xff0c;参与精彩的项目路演。本次活动由ZeeprLabs、BiKing Exchange、Gather冠名赞助&#xff0c;Central Rese…

【教学类-56-03】数感训练——数字03(寻找自己的学号数字,1号-31号,出现15-20次)

背景需求&#xff1a; 在实际操作中&#xff0c;孩子们把数字当做了自己的学好&#xff0c;这个提示老师可以给每位孩子做一份“学号数感训练 【教学类-56-02】数感训练——数字02&#xff08;控制指定数字出现的数量&#xff09;-CSDN博客文章浏览阅读341次&#xff0c;点赞…

【Linux学习】深入探索进程等待与进程退出码和退出信号

文章目录 退出码return退出 进程的等待进程等待的方法 退出码 main函数的返回值&#xff1a;进程的退出码。 一般为0表示成功&#xff0c;非0表示失败。 每一个非0退出码都表示一个失败的原因&#xff1b; echo $&#xff1f;命令 作用&#xff1a;查看进程退出码。&#xf…

学AI绘图【300集SD新课】--Stable Diffusion教程

学AI绘图需要以下步骤&#xff1a; 明确目标和需求&#xff1a;首先明确设计图的目的&#xff0c;是用于展示算法流程、模型结构还是其他目的。选择合适的工具&#xff1a;根据需求选择合适的绘图工具&#xff0c;如Visio、PowerPoint、Adobe Illustrator等。绘制草图&#xf…

jmeter之HTTP请求和查看结果树

一、HTTP请求作用&#xff1a; 可以发送post或get请求等请求可以向服务器发送参数或消息体数据可以进行文件上传 HTTP请求&#xff1a;是线程组内的取样器最常用的的一个原件 二、查看界面 添加一个HTTP请求&#xff1a;选择线程组–添加–取样器–HTTP请求 默认界面 名称和…

Steam游戏被攻击怎么办,如何针对性的做好防护措施

在现代网络环境中&#xff0c;在线游戏经常成为各种网络攻击的目标&#xff0c;尤其是DDoS攻击。这类攻击不仅会导致游戏服务器瘫痪&#xff0c;还会影响玩家的游戏体验&#xff0c;损害游戏开发商的声誉和经济利益。为了应对这些威胁&#xff0c;使用专门的防护措施是必要的。…

Scrapy框架简单介绍及Scrapy项目编写详细步骤

引言 Scrapy是一个用Python编写的开源、功能强大的网络爬虫框架&#xff0c;专为网页抓取和数据提取设计。它允许开发者高效地从网站上抓取所需的数据&#xff0c;并通过一系列可扩展和可配置的组件来处理这些数据。Scrapy框架的核心组成部分包括&#xff1a; Scrapy Engine&…

rclone迁移对象存储之间的数据

1 概述 rclone是一款文件复制工具&#xff0c;既可以用于在linux主机之间复制文件&#xff0c;也可以在对象存储之间复制文件。 rclone的官网为&#xff1a; https://rclone.orgrlcone关于对象存储的官方文档为&#xff1a; https://rclone.org/s32 安装 2.1 yum安装 yum …

centos7.9用docker运行一个nginx容器

首先你的linux 系统里面已经安装好了docker&#xff0c;docker的安装教程看这个 1&#xff0c;下载nginx镜像 有很多文章会把镜像下载说成是拉取镜像&#xff0c; 我觉得就是下载的意思啊&#xff0c;搞不懂为什么要说拉取&#xff1f; docker pull nginx 下载最新版 Nginx …

深度学习之基于Unet的新冠肺炎等级分割分类系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 近年来&#xff0c;新冠肺炎&#xff08;COVID-19&#xff09;疫情给全球公共卫生安全带来了极…