vue 萤石云视频监控对接

news/2024/11/17 2:55:33/

萤石云文档(web开发)

萤石云DEMO下载

参考博客:vue中实现视频直播(萤石云) - 简书 

参考博客:海康威视&萤石摄像头直播/监控模式Vue开发 - 简书 

萤石云web开发文档短小易懂,一定要看(文档变更有点乱,我看的时候api部分已被移除,故参考了简书博客)

前提了解

 兼容性

  • Chrome 55+
  • Firefox 55+
  • 最新IE

直播与视频监控开发区别

  1. 直播可使用第三方播放器如video标签等;而视频监控不可
  2. 直播可使用https开头链接;而视频监控不可,视频监控使用萤石云协议(ezopen://)

 视频监控链接地址特征

  • 预览:ezopen:// [验证码@] open.ys7.com/[deviceSerial]/[channelNo] [.hd].live(示例:ezopen://open.ys7.com/203751922/1.hd.live)
  • 回放:ezopen:// [验证码@] open.ys7.com/[deviceSerial]/[channelNo] [.hd].rec[?begin= yyyyMMddhhmmss&end= yyyyMMddhhmmss](ezopen://验证码@open.ys7.com/203751922/1.rec?begin=20190317000000&begin=20190317235959)

tips:

回放地址不带时间参数时默认取当日0时0分0秒至23时59分59秒,缺省也同样会自动补充,比如begin=2019031709,系统会自动给补充为begin=20190317090000&end=20190317235959

回放时间点是否存在录像可以通过调用根据时间获取存储文件信息接口(链接)来查询验证

多窗口模式

  • 从文档中只看到多窗口只针对监控 
  • 多窗口监控地址通过逗号分隔
  • 窗口切割参数:splitBasis
    //在监控模式中设置窗口切割参数(1*1,2*2,3*3)
    var player = new EZUIPlayer({id: 'myPlayer',url: {url0},{url1},{url2},{url3}, // ezopen播放地址逗号分隔autoplay: true,accessToken: "at.8o2k6dbpcvtr13reaa96hbnya6*************c",decoderPath: '{{location path}}',width: 1200, // 宽度高度为容器规格,将按照窗口数均分height: 800,splitBasis: 2 //设置窗口切割参数});

包引入区别

  • js原生引入方式,示例:
    <script src="../ezuikit.js"></script>
    <script src="../js/jquery.min.js"></script>
  • node构建,示例
    npm install ezuikit-js//当前使用的文件引入
    import  EZUIKit from 'ezuikit-js';

ezuikit-js源码了解(主要是播放器模板的区别)

  • simple(极简版)
  • standard(标准版)
  • security(安防版(预览回放))
  • voice(语音版)

1.其中simple最适合用来自定义,ezuikit-js中的大部分代码都是simple的,当给simple进行header,footer等配置时,不满意,可以在源码中进行更改,该源码只有js代码,html和css皆由js来生成,与其通过配置来对simple进行改变,不如对simple自定义(由参考博客1可知萤石云大部分api非常方便使用)

2.standard/security/voice,这是三种固定模板,无法进行配置(由源码可知:本地并无此三种模板的代码,代码在萤石云服务器上),若需对此三种模板进行样式等变更,则需要对不同源iframe进行操作(麻烦)

开发(只包含视频监控)

1.npm包引入 ezuikit-js

2.根据公司需求和对上述前提的了解,我选择了对simple进行自定义

代码:

//组件:萤石云视频监控simple自定义<template><div class="hello-ezuikit-js"><div id="video-container" style="width:100%;height:500px"><div class="mask" @click="togglePlay" :style="{ 'display': play ? 'none' : 'block' }"></div><div class="controll"><div class="left"><el-tooltip effect="dark" :content="play ? '正在播放' : '停止'"><i :class="play ? 'el-icon-video-pause' : 'el-icon-video-play'" @click="togglePlay"></i></el-tooltip><el-tooltip effect="dark" content="视频截图"><i class="el-icon-camera" @click="isCapturePicture"></i></el-tooltip><el-tooltip effect="dark" :content="enableZ ? '电子放大-已开启' : '电子放大-已关闭'"><i :class="enableZ ? 'el-icon-zoom-out' : 'el-icon-zoom-in'" @click="toggleZoom"></i></el-tooltip></div><div class="right"><el-tooltip effect="dark" content="全屏"><i class="el-icon-full-screen" @click="isFullScreen"></i></el-tooltip></div></div></div></div>
</template><script>
import EZUIKit from "ezuikit-js";
export default {name: "EZUIKitJs",data(){return {player: null,enableZ:false, //默认关闭电子放大play: false //默认停止播放}},mounted(){console.group("mounted 组件挂载完毕状态===============》");this.player =  new EZUIKit.EZUIKitPlayer({autoplay: false,id: "video-container",accessToken:"xxx",url: "xxx",template: "simple", // simple - 极简版;standard-标准版;security - 安防版(预览回放);voice-语音版;audio: 0, // 是否默认开启声音 0 - 关闭 1 - 开启width: 600,height: 500});},beforeDestroy(){if(this.play)this.player.stop();},methods:{// 开启/关闭 电子放大toggleZoom(){if(!this.player || !this.play) return;switch (this.enableZ) {case true:this.player.closeZoom();this.enableZ = false;break;case false:this.player.enableZoom();this.enableZ = true;break;  default:break;}},// 播放/停止 监控togglePlay(){if(!this.player) return;switch (this.play) {case true:this.player.stop();this.play = false;break;case false:this.player.play();this.play = true;break;  default:break;}},// 视频截图isCapturePicture(){if(!this.player || !this.play) return;this.player.capturePicture();},// 全屏isFullScreen(){if(!this.player || !this.play) return;this.player.fullScreen();}}
};
</script>
<style lang="scss" scoped>
#video-container{position: relative;
}
::v-deep #video-container iframe{width: 100% !important;
}
.mask{position: absolute;top:0;left:0;width:100%;height:500px;background: rgba(255, 255, 255, .6) url('../../assets/images/play.png') no-repeat center;background-size: 100px;
}
.controll{display: flex;position: absolute;bottom: 0;left: 0;width: 100%;height: 48px;line-height: 48px;background: rgba(0, 0, 0, 0.65);padding: 0 15px;z-index: 2;opacity:0;transition: all 0.3s;.left{width: 50%;i{margin-right: 10px;}}.right{width: 50%;text-align: right;}i{vertical-align: middle;color: #fff;font-size: 30px;}
}#video-container:hover .controll{opacity: 0.65;
}
</style>

 效果:

初始化参数

参数名类型描述是否必选
idString播放器容器DOM的idY
accessTokenString授权过程获取的access_tokenY
urlString视频ezopen协议播放地址Y
audioint是否默认开启声音 1:打开(默认) 0:关闭N
widthint视频宽度,默认值为容器容器DOM宽度N
heightint视频高度,默认值为容器容器DOM高度N
templetestring播放器模板,可以通过选定模板,使用内置的播放器样式,组件 simple:极简版;standard:标准版;security:安防版(预览回放);vioce:语音版N
headerArray视频头部可选UI组件,可选值:capturePicture:截图,save:录像保存,zoom:电子放大N
footerArray视频底部部可选UI组件,可选值:talk:对讲,broadcast:语音播报,hd:高清标清切换,fullScreen:全屏N
pluginArray按需加载插件,可选值: talk:对讲N
handleSuccessfunction播放成功回调N
handleErrorfunction播放错误回调N
openSoundCallBackfunction开启声音回调N
closeSoundCallBackfunction关闭回调N
startSaveCallBackfunction开始录像回调N
stopSaveCallBackfunction结束录像回调N
capturePictureCallBackfunction截图回调N
fullScreenCallBackfunction全屏回调N
fullScreenChangeCallBackfunction全屏变化回调-全局(含ESC退出全屏等)N
getOSDTimeCallBackfunction获取OSD时间回调

API方法集合

方法名类型描述使用示例
stopfunction结束播放player.stop()
openSoundString开启声音player.openSound()
closeSoundString关闭声音player.closeSound()
startSaveint开始录像player.startSave()
stopSaveint结束录像player.stopSave()
capturePicturefunction视频截图player.capturePicture()
fullScreenfunction全屏(自动适配移动端pc端全屏)player.fullScreen()
cancelFullScreenfunction取消全屏player.cancelFullScreen()
getOSDTimefunction获取播放时间回调player.getOSDTime()
startTalkfunction开始对讲player.startTalk()
stopTalkfunction结束对讲player.stopTalk()

http://www.ppmy.cn/news/850555.html

相关文章

vue实现视频监控后台管理

这篇主要是介绍一下思路&#xff0c;如果想看详细的大家可以去看我的上一篇&#xff0c;后台的话&#xff0c;就是实现添加监控信息&#xff0c;比如说&#xff0c;我在后台添加了二楼电梯门口的视频&#xff0c;另外配上后端给的监控视频地址&#xff0c;点击确定保存&#xf…

无线视频监控系统 PHP,无线视频监控小车整体方案

无线视频监控小车整体方案&#xff0c;包括源码&#xff0c;视频讲解。从采集到h264压缩&#xff0c;到视频显示&#xff0c;到小车控制&#xff0c;全套哦. 本人将陆续发布自己所做的无线视频监控小车视频及资料&#xff0c;其中包括源码&#xff0c;对源码的视频讲解&#xf…

git基础教程(linux)

1.git简介 git 分布式版本控制 git两大特点&#xff1a; 版本控制&#xff1a;支持多人同时开发 分布式&#xff1a; 2.安装与配置 安装 sudo apt-get install git安装成功&#xff0c;运行如下命令&#xff1a; git3.创建一个版本库 (1)新建一个目录git_test&#xff0c…

Docker的使用

1. Docker的含义 1. 镜像&#xff1a;别人开发好的基础&#xff0c;类似C中的类 2. 容器&#xff1a;自己创建的实例 2.如何使用docker 可以从网上拉取相应的镜像&#xff0c;然后宿主机以下命令&#xff1a;创建Dockerfile文件docker build -t image_name:tag . 创建自己的do…

新发展理念

新发展理念的科学内涵创新、协调、绿色、开放、共享。 创新发展注重的是解决发展动力问题。我国创新能力不强&#xff0c;科技发展水平总体不高&#xff0c;科技对经济社会发展的支撑能力不足&#xff0c;科技对经济增长的贡献率远低于发达国家水平&#xff0c;这是我国这个经…

徐鑫 计算机科学与技术 2008,徐新

上海交通大学博士、学士&#xff0c;新加坡南洋理工大学CSC访问学者。作为项目负责人主持国家自然科学基金2项&#xff0c;湖北省高校省级教学改革研究项目1项&#xff0c;湖北省自然科学基金1项&#xff0c;湖北省教育厅科学技术研究项目1项&#xff1b;作为项目主要成员参与国…

新开始,新征程

走了很久&#xff0c;带着很多包裹&#xff0c;怀着很多梦想&#xff0c;却发现止步不前&#xff0c;甚至落后于从前的自己&#xff0c;尽管从前也曾犯下很多错。真是应了那句话&#xff1a;“你只有不停奔跑&#xff0c;才能留在原地”&#xff0c;否则等待你的只有别人的背影…

初衷

这是我在CSDN写的第一篇博客。 之前查阅资料&#xff0c;在CSDN发现不少大牛的技术博写的特别好&#xff0c;那时就想&#xff0c;自己是不是也该记录一下学习过程中遇到的问题呢。 今天因为一些不太开心的原因&#xff0c;即使不开心&#xff0c;也算是一个契机&#xff0c;…