vue集成海康h5player实现播放

news2024/11/18 18:27:27

文章目录

  • 前言
  • 准备工作
    • 视频demo
    • 官方文档
    • 官方工具
    • 开源工具
  • 开始开发
    • 效果
    • 问题点

前言

本篇章只针对官方提供个h5player工具,做播放和分屏demo。

当然本篇章也是针对已经接触了海康视频对接的开发者。

准备工作

视频demo

官方文档

API https://open.hikvision.com/docs/docId?productId=5c67f20bb254d61550c2f63e&version=%2F658c4efa2595486c9ff140401628ff41&curNodeId=39e50b5c0aa84b47995614c9a102b75f

官方工具

https://open.hikvision.com/download/5c67f20bb254d61550c2f63e?type=10&id=53a1d2fe6a6f4b34b7aaccd37cd9c73d

开源工具

Dplayer:https://dplayer.diygod.dev/,这个支持的格式也很多,不过需要MSE支持

开始开发

代码比较简单,就直接上了,先看代码

<template>
  <div id="app">
    <el-container>
      <el-row>
        <el-input v-model="code" placeholder="输入监控点编码" @change="onChangeCode"></el-input>
        <el-button @click="onSubmit">默认预览</el-button>
        <el-button @click="onTwoSubmit(2)">4分屏</el-button>
        <el-button @click="onTwoSubmit(4)">16分屏</el-button>
        <el-button @click="onTwoSubmit(8)">64分屏</el-button>
      </el-row>
      <el-row>
        <div id="player" style="width: 800px;height: 800px;"></div>
      </el-row>
    </el-container>
  </div>
</template>
// 请求工具
import http from '@/http/http2.js'
// 官方提供的播放工具
import '@/static/util/h5player.min.js'

export default {
  name: 'hik',
  data () {
    return {
      // 监控点编码
      code: '',
      // 播放器对象
      player: null
    }
  },
  mounted () {
// 页面加载初始化
    this.initPlayer()
  },
  methods: {

    /**
     * 初始化播放器
     */
    initPlayer () {
      this.player = new window.JSPlugin({
        // 需要英文字母开头 必填
        szId: 'player',
        // 必填,引用H5player.min.js的js相对路径
        szBasePath: './static/util',

        // 当容器div#play_window有固定宽高时,可不传iWidth和iHeight,窗口大小将自适应容器宽高
        iWidth: 600,
        iHeight: 400,

        // 分屏播放,默认最大分屏4*4
        iMaxSplit: 16,
        iCurrentSplit: 1,

        // 样式
        oStyle: {
          border: '#343434',
          borderSelect: '#FFCC00',
          background: '#000'
        }
      })
    },

    /**
     * 获取取流连接
     * @returns {*}
     */
    getPreviewUrl () {
      let tempCode = '61077001001320000018'
      if (this.code) {
        tempCode = this.code
      }
      const param = {
        'cameraIndexCode': tempCode,
        'streamType': 0,
        'protocol': 'ws',
        'transmode': 1
      }
// 这里
      return http.post('/ay-video-manage/video/monitor/getRealTimeMonitorVideo', param)
    },

    /**
     * 播放
     */
    play (index) {
      const _this = this
      this.getPreviewUrl().then(res => {
        if (res.status !== 200) {
          _this.$message.warning('获取视频流失败!')
          return
        }
        let preUrl = res.data.data.url
        const param = {
          playURL: preUrl,
          // 1:高级模式  0:普通模式,高级模式支持所有
          mode: 1
        }
        // 索引默认0
        if (!index) {
          index = 0
        }
        _this.player.JS_Play(preUrl, param, index).then(() => {
            // 播放成功回调
          console.log('播放成功')
        },
        (err) => {
          console.log('播放失败')
        })
      })
    },

    /**
     * 监控点更新
     * @param data
     */
    onChangeCode (data) {
      this.code = data
      this.play()
    },
    /**
     * 默认预览
     */
    onSubmit () {
      this.play()
    },

    /**
     * 分屏,这里我太懒了,就循环了一个视频流
     */
    onTwoSubmit (num) {
      const _this = this
      // 这里的分屏,是以列来算的,如果这里参数2,那么就是横竖两列,就是4格
      this.player.JS_ArrangeWindow(num).then(
        () => {
          // 循环取流
          for (let i = 0; i < num * num; i++) {
            _this.play(i)
          }
        },
        e => { console.error(e) }
      )
    }
  }
}

这里用的js是海康工具里下的

image-20220831210426361

下载之后,将/bin目录下的文件复制到项目static下,这个工具的说明文档(API)在上一层的doc下面

image-20220831210612611
image-20220831210758673

效果

image-20220831205049039

问题点

  1. 官方提供的js文件不止一个,在初始化和播放时都会调用其他的js文件,那么就存在一个路径问题,我这里将所有的js都放在了src同目录下的static下了,然后在src下,也有一个static目录,不过里面只放了一个h5player.min.js,这样在使用h5player.min.js时就能调用到其他js,
  2. 在初始化播放器时,需要设置js的相对路径属性szBasePath,所有的js都会添加这个路径前缀
  3. 海康视频,大部分是h264编码,但也会存在h265的视频编码,如果使用hls是播放不了h265编码格式的视频的,所有,需要找一个方式,那就是使用官方提供的这个h5player
  4. rtsp和rtmp比较麻烦,我是不想考虑的

然后这是ws流的对视频流的支持情况

image-20220831212223316

我是个业余的前端,有什么不对还望指出

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Not allowed to load local resource: file:///,浏览器禁止访问浏览器图片,文件解决方法

Not allowed to load local resource: file… 错误出现原因&#xff1a;浏览器出于安全考虑禁止直接读取本机文件(链接以file:///开头)&#xff0c; 解决办法&#xff1a; 创建一个web服务器&#xff0c;将文件放在这个服务器里&#xff0c;让文件有一个在线地址&#xff08…

【小程序项目开发-- 京东商城】uni-app之商品列表页面 (下)

&#x1f935;‍♂️ 个人主页: 计算机魔术师 &#x1f468;‍&#x1f4bb; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f310; 推荐一款找工作神器网站: 点击跳转牛客网 |笔试题库|面试经验|实习招聘内推| 还没有账户的小伙伴 速速点击链接…

推荐几个优秀的echarts 图表网站,让你轻松搞定全部报表

1.PPChart - 让图表更简单让图表更简单。PPChart 提供 Echarts 收录、图表制作等服务http://ppchart.com/#/ 2.https://madeapie.com/#/echarts图表制作&#xff0c;Make A Pie&#xff0c;Made A Pie&#xff0c;echarts案例分享&#xff0c;echarts教程分享https://madeapie…

PHP连接数据库MySQL打造xxx管理系统,实现简单的增删改查功能

目录 前言 概述 内容 创建数据库表 实现列表 新增用户 删除用户 编辑用户 前言 最近刚学完PHP和Mysql,历时半个多月时间完成了这样一个简单的算是人员管理系统吧&#xff0c;为了加深印象总结一下&#xff0c;还有很多不足之处&#xff0c;希望大家多多指正&#xff0c;一…

vue点击变色

vue点击一个遍历后元素改变其颜色的方法&#xff0c;有两种情况&#xff0c;第一种是点击单行元素变色&#xff0c;点击另一行元素时&#xff0c;原来变色的元素变回原来的颜色&#xff0c;始终只有一行元素是变色的&#xff0c;第二种情况是点击后永久变色&#xff0c;点击其他…

手把手教你部署前端项目

手把手教你部署前端项目 1.1 用Vue-cli构建简易前端项目 1.1.1 安装 Vue CLI 包 打开命令行工具&#xff0c;执行下列命令来安装 Vue CLI 包&#xff1a; npm install -g vue/cli可以用下面的命令查看是否安装成功&#xff1a; vue --version1.1.2 创建一个项目 新建一个…

背景图片相关应用-铺满,自适应

1.首先了解一下背景相关属性 background-color&#xff1a; 颜色。 background-position&#xff1a; 位置。 数值&#xff0c;或者top,right,bottom,left等&#xff0c;center&#xff1a;距离页面左边的定位&#xff0c;0px&#xff1a;距离页面上面的定位 background-si…

Cesium3Dtilesets 使用customShader的解读以及泛光效果示例

前言&#xff1a;光带原理在旋转弹跳四棱锥这篇文章里早已经阐述过&#xff0c;但还是有不少靓仔靓女可能会感到疑惑&#xff0c;在3Dtilesets里怎么使用&#xff1f;为啥我在网上看到的为数不多的代码示例我看不懂&#xff1f;是由于没理解透彻导致的。借此机会&#xff0c;提…

SocketIO介绍+SpringBoot整合SocketIO完成实时通信

Socket.IO笔记 即时通信是基于TCP长连接&#xff0c;建立连接之后&#xff0c;客户段/服务器可以无限次随时向对端发送数据&#xff0c;实现服务器数据发送的即时性 HTTP HTTP是短链接&#xff0c;设计的目的是减少服务器的压力 HTTP伪即时通讯 轮询 emmet长轮询 long pulling…

vue打包之后出现空白页的原因以及解决方式

路由模式 history 新建项目什么都不动&#xff0c;路由模式&#xff1a;history, 直接npm run build打包 打包之后&#xff0c;直接打开dist文件里面的ndex.html可以看到页面是空白的&#xff0c;控制台是这样的。 再看看网页源码, 对比dist文件夹结构可以看到资源路径的引入…

【前端】React使用react-markdown+antd实现引入渲染markdown文件

项目中遇见一个需求&#xff0c;要求直接在浏览器打开markdown文件进行预览&#xff0c;初次使用遇见一些坎坷&#xff0c;以下记录实现过程&#xff0c;将其封装成了一个组件。 1.下载依赖 yarn add react-markdown//其余样式插件&#xff1a; yarn add remark-gfm yarn …

vue+springboot使用文件流实现文件下载

前言 本次将使用vue和springboot通过文件流的方式教大家怎么去实现文件的下载&#xff0c;那么话不多说&#xff0c;我们直接开始 相关vue导出文件 以下链接为我其他vue进行下载导出文件文章 vue实现把字符串导出为txt 步骤 文件路径 要进行下载的话&#xff0c;我们肯定…

WEB核心【案例:文件下载,案例:点击切换验证码,几种获取properties资源方式】第十二章

目录 1.文件下载 1.1超链接下载&#xff1a; 1.2自定义servlet下载 1.3小结 2.点击切换验证码 2.1前置只是-验证码生成 2.2分析及代码实现 2.3需求2&#xff1a;点击切换验证码-绕过缓存 3.几种获取preperties资源方式 &#x1f49f;作者简介&#xff1a;大家好呀&…

CTF中Web题目的各种基础的思路-----入门篇十分的详细

我期间也考察很多人的&#xff0c;但搞这个的确实有点少&#xff0c;希望这篇可以大家一点帮助&#xff0c;这篇文章也借鉴一些人的文章&#xff0c;还有很多东西&#xff0c;我没搞&#xff0c;确实有点麻烦&#xff0c;但以后还会不断更新的&#xff0c;希望大家在web这里少走…

Web系统常见安全漏洞介绍及解决方案-CSRF攻击

&#x1f433;博客主页&#xff1a;拒绝冗余 – 生命不息&#xff0c;折腾不止 &#x1f310;订阅专栏&#xff1a;『Web安全』 &#x1f4f0;如觉得博主文章写的不错或对你有所帮助的话&#xff0c;还望大家多多支持呀&#xff01; &#x1f449;关注✨、点赞&#x1f44d;、收…

CSS基本布局——grid布局

grid布局简介&#xff1a; Grid布局是将容器划分成“行”和“列”&#xff0c;产生单元格&#xff0c;然后指定“项目所在”的单元格&#xff0c;可以看作是二维布局。 基本概念&#xff1a; 容器&#xff08;container&#xff09;——有容器属性项目&#xff08;items&…

vite项目优化

首先在讲述vite优化之前&#xff0c;我们先来分析一下和传统的项目管理构建工具的区别&#xff0c;以webpack为例&#xff0c;它是利用plugin插件和loader加载器对项目的所有模块和依赖统一通过入口文件进行编译&#xff0c;从而变成我们html所需要的js格式渲染我们的页面。 随…

Vue项目目录结构介绍(三)

前言 本章我们会对一个 Vue 项目的目录结构进行讲解&#xff0c;解释各子目录以及文件的作用&#xff0c;前端的模块化&#xff0c;Vue 单文件组件规范等。 1、基础目录和文件介绍 在上一章&#xff0c;我们通过 vue-cli 创建了一个新的项目&#xff0c;生成的项目目录里已经包…

tauri+vite+vue3开发环境下创建、启动运行和打包发布

目录 1.创建项目 2.安装依赖 3.启动项目 4.打包生成windows安装包 5.安装打包生成的安装包 1.创建项目 运行下面命令创建一个tauri项目 pnpm create tauri-app 我创建该项目时的node版本为16.15.0 兼容性注意 Vite 需要 Node.js 版本 14.18&#xff0c;16。然而&#x…

【玩转CSS】这些高级技巧,你都会吗

&#x1f525;一个人走得远了&#xff0c;就会忘记自己为了什么而出发&#xff0c;希望你可以不忘初心&#xff0c;不要随波逐流&#xff0c;一直走下去&#x1f3b6; &#x1f98b; 欢迎关注&#x1f5b1;点赞&#x1f44d;收藏&#x1f31f;留言&#x1f43e; &#x1f984; …