web,h5海康视频接入监控视频流记录三(后台node取流)

news2024/10/2 10:32:29

前端vue,接入ws视频播放

云台控制 ,回放预览,都是需要调对应的海康接口。相当于,点击时,请求后台写好的接口,接口再去请求海康的接口

 调用云台控制是,操作一次,不会自己停止,需要手动停止才会停止操作。

引入对应的插件

 

以下是vue播放组件代码

<template>
  <div class="WsStreamVideoPlayer">
    <div id="player" style="width: 100%;height: 100%;" />
  </div>
</template>

<script>
import { getStream, videoControlling, getBackStream } from '@/api/hk/video'
export default {
  name: 'WsStreamVideoPlayer',
  // 注册
  components: {},
  props: {
    videoCode: {
      type: String,
      default: () => {
        return ''
      }
    }
  },
  // 定义变量
  data() {
    return {
      // 播放器对象
      player: null
    }
  },
  computed: {},
  watch: {},
  created() {
  },
  mounted() {
  },
  methods: {
    videoInit() {
      this.player = new window.JSPlugin({
        szId: 'player',
        szBasePath: '/static/hk',
        iMaxSplit: 4,
        iCurrentSplit: 1,
        openDebug: true,
        oStyle: {
          borderSelect: '#fff'
        }
      })
    },
    async operateClick(type) {
      const param = {
        videoCode: this.videoCode,
        action: 0,
        operateType: type
      }
      if (type === 'stop') {
        param.action = 1
        param.operateType = 'UP'
      }
      const operateRes = await videoControlling(param)
      console.log(operateRes)
    },
    async startView() {
      const streamResp = await getStream({ videoCode: this.videoCode })
      const preUrl = streamResp.data.url
      const param = {
        playURL: preUrl,
        // 1:高级模式  0:普通模式,高级模式支持所有
        mode: 1
      }
      this.player.JS_Play(preUrl, param, 0).then(
        () => { console.log('realplay success') },
        e => { console.error(e) }
      )

      // 事件回调绑定
      this.player.JS_SetWindowControlCallback({
        windowEventSelect: function(iWndIndex) { // 插件选中窗口回调
          console.log('windowSelect callback: ', iWndIndex)
        },
        pluginErrorHandler: function(iWndIndex, iErrorCode, oError) { // 插件错误回调
          console.log('视频断了,再次重连', iWndIndex, iErrorCode, oError)
          this.player.JS_Stop().then(
            () => {
              this.player.rate = 0
              console.log('stop realplay success')
              this.startView()
            },
            e => { console.error(e) }
          )
        },
        windowEventOver: function(iWndIndex) { // 鼠标移过回调
          // console.log(iWndIndex);
        },
        windowEventOut: function(iWndIndex) { // 鼠标移出回调
          // console.log(iWndIndex);
        },
        windowEventUp: function(iWndIndex) { // 鼠标mouseup事件回调
          // console.log(iWndIndex);
        },
        windowFullCcreenChange: function(bFull) { // 全屏切换回调
          console.log('fullScreen callback: ', bFull)
        },
        firstFrameDisplay: function(iWndIndex, iWidth, iHeight) { // 首帧显示回调
          console.log('firstFrame loaded callback: ', iWndIndex, iWidth, iHeight)
        },
        performanceLack: function() { // 性能不足回调
          console.log('performanceLack callback: ')
        }
      })
    },
    async startBackPlay() {
      const { beginTime, endTime } = this
      const params = {
        videoCode: this.videoCode,
        beginTime,
        endTime
      }
      const streamResp = await getBackStream(params)
      const preUrl = streamResp.data.url
      const param = {
        playURL: preUrl,
        // 1:高级模式  0:普通模式,高级模式支持所有
        mode: 1
      }
      const playBeginTime = beginTime.split(' ')[0] + 'T' + beginTime.split(' ')[1] + 'Z'
      const playEndTime = endTime.split(' ')[0] + 'T' + endTime.split(' ')[1] + 'Z'
      this.player.JS_Play(preUrl, param, 0, playBeginTime, playEndTime).then(
        () => {
          console.log('playbackStart success')
        },
        e => { console.error(e) }
      )
    }
  }
}
</script>

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

需要注意的是,回放预览时,时间要在请求的时长之内,且格式需严格按照demo中的格式,否则会播放失败

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

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

相关文章

元宇宙如何在未来5年影响你的业务

自新冠疫情暴发以来&#xff0c;虽然数字经济的和实体经济受到了严重的冲击和影响&#xff0c;但这也加速了元宇宙在全球的发展。区块链、数字资产和非同质化代币&#xff08;NFTs&#xff09;的兴起进一步推动了世界对元宇宙的需求。元宇宙被定义为用户可以在其中进行互动的虚…

HiveSQL一天一个小技巧:如何将分组内数据填充完整?

0 需求1 需求分析需求分析&#xff1a;需求中需要求出分组中按成绩排名取倒数第二的值作为新字段&#xff0c;且分组内没有倒数第二条的时候取当前值。如果本题只是求分组内排序后倒数第二&#xff0c;则很简单&#xff0c;使用row_number()函数即可求出&#xff0c;但是本题问…

Netty之io.netty.util.concurrent.Promise与io.netty.util.concurrent.Future初解

目录 目标 Netty版本 Netty官方API 三者之间的关系 基本使用方法 java.util.concurrent.Future io.netty.util.concurrent.Future io.netty.util.concurrent.Promise 目标 了解io.netty.util.concurrent.Promise与io.netty.util.concurrent.Future的基本使用方法。了解…

操作系统权限提升(二十四)之Linux提权-明文ROOT密码提权

系列文章 操作系统权限提升(十八)之Linux提权-内核提权 操作系统权限提升(十九)之Linux提权-SUID提权 操作系统权限提升(二十)之Linux提权-计划任务提权 操作系统权限提升(二十一)之Linux提权-环境变量劫持提权 操作系统权限提升(二十二)之Linux提权-SUDO滥用提权 操作系统权限…

Netty学习(二):线程模型

目录 一、线程模型基本介绍 二、传统阻塞IO服务模型 2.1 工作原理图 2.2 模型特点 2.3 问题分析 三、Reactor模式 3.1 完善传统阻塞I/O服务模型 3.2 Reactor模型原理图 3.3 Reactor模式中核心组成 3.4 Reactor模式分类 四、单 Reactor 单线程 4.1 原理图 4.2 方案说…

(二十一)操作系统-信号量机制2

文章目录一、知识总览二、知识点回顾三、信号量机制实现进程互斥四、信号量机制实现进程同步五、信号量机制实现前驱关系六、总结一、知识总览 二、知识点回顾 整型信号量&#xff1a;用一个整数型的变量作为信号量&#xff0c;用来表示系统中某种资源的数量。   记录型信号量…

4.5 正则表达式过滤查询数据

文章目录1. 概述2. 基本字符匹配3.LIKE关键字与正则表达式的区别4.进行OR匹配5.匹配几个字符之一6.匹配范围7.匹配特殊字符8.匹配多个实例9.定位符1. 概述 正则表达式用来匹配更加复杂的查询条件&#xff0c;例如你想从文件中提取电话号码&#xff0c;想从查找名字中间有数字的…

带你掌握webSocket 和 socket.io的基本用法

两者的作用和区别 作用&#xff1a;使得前后端可以随时地相互沟通。什么是互相沟通呢&#xff1f;像网络请求这种就是客户端向服务端的单向的沟通&#xff0c;当然&#xff0c;网络请求也可以实现双向的沟通&#xff0c;比如ajax 轮询&#xff0c;就是浏览器开个定时器不断的发…

Python虚拟环境(pipenv、venv、conda一网打尽)[通俗易懂]

一、什么是虚拟环境 1. 什么是Python环境 要搞清楚什么是虚拟环境&#xff0c;首先要清楚Python的环境指的是什么。当我们在执行python test.py时&#xff0c;思考如下问题&#xff1a; python哪里来&#xff1f;这个主要归功于配置的系统环境变量PATH&#xff0c;当我们在命…

山地车和公路车怎么选

公路车&#xff1a; 只能适应平坦的路面&#xff0c;骑行阻力小&#xff0c;速度快比较适合新手 山地车&#xff1a; 能适应所有路面&#xff0c;更注重操控性和舒适性 怎么选&#xff1f; 1、先决定用途 旅游&#xff1a;旅行车、山地车、 通勤&#xff1a;公路车 2、预…

如何使用BeaconEye监控CobaltStrike的Beacon

关于BeaconEye BeaconEye是一款针对CobaltStrike的安全工具&#xff0c;该工具可以扫描正在运行的主动CobaltStrike Beacon。当BeaconEye扫描到了正在运行Beacon的进程之后&#xff0c;BeaconEye将会监控每一个进程以查看C2活动。 工作机制 BeaconEye将会扫描活动进程或Mini…

G公司对接伍尔特wurth EDI项目案例

项目背景 对伍尔特wurth 而言&#xff0c;与其供应商开展成功的数字化项目通常是以自动连接开始的。通过这种方式&#xff0c;标准化的信息可以在彼此之间进行简单而自动的交换。这个流程被称为电子数据交换&#xff08;EDI&#xff09;。 EDI使得诸如订单、送货单、发票、订单…

Jmeter常用断言之JSON断言简介

JSON断言可以对服务器返回的JSON文档进行验证。 JSON断言有两种使用模式&#xff1a; 1.根据JSONPath能否在JSON文档中找到路径&#xff1b; 2.根据JSONPath提取值并对值进行验证。 结果判定&#xff1a;若文档格式为非JSON则断言失败&#xff1b;找不到路径断言失败&#xff1…

深度学习 | BN层原理浅谈

深度学习 | BN层原理浅谈 文章目录深度学习 | BN层原理浅谈一. 背景二. BN层作用三. 计算原理四. 注意事项为什么BN层一般用在线性层和卷积层的后面&#xff0c;而不是放在激活函数后为什么BN能抑制过拟合(有争议)一. 背景 神经网络在训练时&#xff0c;由于内存限制&#xff0…

Swagger2实现配置Header请求头

效果 实现 大家使用swagger肯定知道在代码中会写一个 SwaggerConfig 配置类&#xff0c;如果没有这个类swagger指定也用不起来&#xff0c;所以在swagger中配置请求头也是在这个 SwaggerConfig 中操作。 1、要实现配置请求头在配置swagger的Docket的bean实例中添加一个 globa…

用Python做了一个法律查询小工具,非常好用

用Python做了一个法律查询小工具&#xff0c;非常好用效果展示准备工作不会的话可以点我直达代码和视频讲解&#xff0c;我都准备好了主要代码哈喽兄弟&#xff0c;今天给大家分享一个Python tkinter制作法律查询小工具。 光爬虫大家也只能自己用用&#xff0c;就算打包了exe&…

安全狗受聘成为福州网信办网络安全技术支撑单位

近日&#xff0c;福州市委网信办召开了2022年度网络安全技术支撑单位总结表彰大会。 作为国内云原生安全领导厂商&#xff0c;安全狗也出席了此次活动。 据悉&#xff0c;会议主要对2022年度优秀支撑单位进行表彰&#xff0c;并为2023年度支撑单位举行授牌仪式。 本次遴选工…

2.1 黑群晖驱动:10代u核显硬解驱动(解决掉IP、重启无法连接问题)

本文提供了两种10代核显驱动方式&#xff1a;1&#xff09;第一种(本文&#xff1a;二、仅修改i915.ko驱动10代u核显方法)为网上流传最多但是对主板兼容性要求很高&#xff0c;网上评论常会出现操作后无法识别IP&#xff08;掉IP&#xff09;的问题。因此&#xff0c;采用第一种…

vue-cli升级vue-cli5(webpack5引入)

一. 升级目标 vue-cli从v4版本升级到v5版本&#xff08;同时升级到webpack5&#xff09; node-sass不再支持&#xff0c;需要删除依赖&#xff0c;并将/deep/ 替换为v::deep方式 二. vue-cli4升级为vue-cli5 1.全局安装vue-cli npm install -g vue/cli// 检查是否更新成功 …

教你安装 Altium Designer23详细图文教程

Altium Designer (AD) 最新安装教程 ,ltium designer 显著地提高了用户体验和效率,利用时尚界面使设计流程流线化,同时实现了前所未有的性能优化。使用64位体系结构和多线程的结合实现了在PCB设计中更大的稳定性、更快的速度和更强的功能。Altium Designer 使您能够创建互联…