1. 将需要存储的监控抓拍和录像功能存储到本地磁盘,使用输入报存到浏览器缓存里。在created拿取缓存数据,判断缓存里是否有数据。 如果没有弹出输入框。

        <div v-if="cache == true"><el-form><div>抓图存储地址</div><el-form-item><el-inputv-model="address.snapDir"placeholder="如:D:\monitor\Snapshot"style="width: 240px"></el-input></el-form-item><div>录像存储地址</div><el-form-item><el-inputv-model="address.videoDir"placeholder="如:D:\monitor\Vedio"style="width: 240px"></el-input></el-form-item></el-form><el-button @click="fun">保存存储地址</el-button></div>
created() {this.result = window.localStorage.getItem("message_2");if (this.result != null) {this.localStorage = JSON.parse(this.result);} else {this.cache = true;}},methods: {fun() {//对象解析Wie字符串if (this.address.snapDir != undefined &&this.address.videoDir != undefined) {window.localStorage.setItem("message", JSON.stringify(this.address));this.localStorage = this.address;this.cache = false;this.$modal.$msgSuccess("添加成功");} else {this.$message("请输入完整");}},}

 2. 这边逻辑是先调接口拿区域,通过区域查询区域下的监控点,点击监控点之后选择开始时间和结束时间。

注意: 这里的时间只接受时间戳,以秒为单位,如果你转义的时间戳为毫秒那么需要除1000。

     <el-tabsv-model="activeName"type="card":stretch="true"@tab-click="handleClick"v-if="status == true"><el-tab-pane label="监控区域" name="0"><RegionDept @handleNodeClick="handleNodeClick"></RegionDept></el-tab-pane><el-tab-pane :label="label" name="1"><divclass="monitor"v-for="(item, index) in previewList":key="item.cameraAreaId"><spanclass="monitor1":class="active == index ? 'monitor2' : ''"@click="showClick(item, index)">{{ item.name }}</span></div></el-tab-pane></el-tabs><el-formv-if="status == false":model="queryParams"ref="queryForm"size="small":inline="true"style="text-align: center"><el-form-item prop="beginTime"><el-date-pickerv-model="queryParams.startTime"type="datetime"value-format="yyyy-MM-dd HH:mm:ss"placeholder="选择开始时间"></el-date-picker></el-form-item><el-form-item prop="endTime"><el-date-pickerv-model="queryParams.endTime"type="datetime"value-format="yyyy-MM-dd HH:mm:ss"placeholder="选择结束时间"></el-date-picker></el-form-item><el-button type="primary" @click="submitForm">查询</el-button></el-form>
    submitForm() {// 这里是日期格式转时间戳,以秒为单位就不需要除1000,毫秒则需要除1000this.startTime = Date.parse(this.queryParams.startTime)/1000;this.endTime = Date.parse(this.queryParams.endTime)/1000;console.log(this.startTime,this.endTime);this.previewVideo(this.boxList);this.status = true;},

3. 全部内容

<template><div class="app-container"><el-row :gutter="20"><el-col :span="4" :xs="24"><div v-if="cache == true"><el-form><div>抓图存储地址</div><el-form-item><el-inputv-model="address.snapDir"placeholder="如:D:\monitor\Snapshot"style="width: 240px"></el-input></el-form-item><div>录像存储地址</div><el-form-item><el-inputv-model="address.videoDir"placeholder="如:D:\monitor\Vedio"style="width: 240px"></el-input></el-form-item></el-form><el-button @click="fun">保存存储地址</el-button></div><el-tabsv-model="activeName"type="card":stretch="true"@tab-click="handleClick"v-if="status == true"><el-tab-pane label="监控区域" name="0"><RegionDept @handleNodeClick="handleNodeClick"></RegionDept></el-tab-pane><el-tab-pane :label="label" name="1"><divclass="monitor"v-for="(item, index) in previewList":key="item.cameraAreaId"><spanclass="monitor1":class="active == index ? 'monitor2' : ''"@click="showClick(item, index)">{{ item.name }}</span></div></el-tab-pane></el-tabs><el-formv-if="status == false":model="queryParams"ref="queryForm"size="small":inline="true"style="text-align: center"><el-form-item prop="beginTime"><el-date-pickerv-model="queryParams.startTime"type="datetime"value-format="yyyy-MM-dd HH:mm:ss"placeholder="选择开始时间"></el-date-picker></el-form-item><el-form-item prop="endTime"><el-date-pickerv-model="queryParams.endTime"type="datetime"value-format="yyyy-MM-dd HH:mm:ss"placeholder="选择结束时间"></el-date-picker></el-form-item><el-button type="primary" @click="submitForm">查询</el-button></el-form></el-col><el-col :span="20" :xs="24"><el-container><el-main><div ref="playWndBox"><!-- 视频数据站位 --><divid="playWnd"class="playWnd":style="{height: playWndHeight + 'px',width: playWndWidth + 'px',}"/></div></el-main></el-container></el-col></el-row><el-dialog :title="title" :visible.sync="open" width="200px" append-to-body><div slot="footer" class="dialog-footer"><el-button type="primary"><ahref="/common/download?fileName=VideoWebPlugin.exe"target="_blank">下 载</a></el-button><el-button @click="cancel">取 消</el-button></div></el-dialog></div>
</template>
<script>
import RegionDept from "@/components/regionOptions/index.vue";
import { listPreview } from "@/api/video_preview/index";
export default {components: {RegionDept,},data() {return {active: undefined,label: "监控点(0)",activeName: "0",queryParams: {beginTime: undefined,endTime: undefined,cameraIndexCode: undefined,},status: true,boxList: {},previewList: [],startTime: "",endTime: "",// 视频盒子的高度playWndHeight: "",// 视频盒子的宽度playWndWidth: "",oWebControl: null,initCount: 0,pubKey: "",cameraIndexCode: "", // 监控点编号objData: {appkey: "",ip: "",port: ,secret: "",playMode: 1, // 0 预览 1回放layout: "2x2", //页面展示的模块数【16】},open: false,title: "",result: {},cache: false, // 判断是否有缓存地址localStorage: {}, // 缓存地址数据// 添加缓存地址address: {snapDir: undefined,videoDir: undefined,},};},created() {this.result = window.localStorage.getItem("message");if (this.result != null) {this.localStorage = JSON.parse(this.result);} else {this.cache = true;}},mounted() {// 首次加载时的到父容器的高度this.playWndHeight = this.$refs.playWndBox.clientHeight;// 首次加载时的到父容器的宽度this.playWndWidth = this.$refs.playWndBox.clientWidth - 140;// 初始化摄像头this.$nextTick(() => {this.initPlugin();});// 监听resize事件,使插件窗口尺寸跟随DIV窗口变化window.addEventListener("resize", () => {console.log(this.$refs.playWndBox.clientHeight,this.$refs.playWndBox.clientWidth);if (this.oWebControl != null) {this.oWebControl.JS_Resize(this.$refs.playWndBox.clientWidth - 140,this.$refs.playWndBox.clientHeight);}});},methods: {// 根据id查询监控点getPreview() {let params = {areaId: this.deptId,};listPreview(params).then((res) => {this.previewList = res.data;this.label = "监控点" + "(" + this.previewList.length + " )";});},// 点击改变选中样式showClick(item, index) {this.status = false;this.active = index;this.cameraIndexCode = item.indexCode;this.boxList = item;},// 取消cancel() {this.open = false;},// 确定submitForm() {this.startTime = Date.parse(this.queryParams.startTime)/1000;this.endTime = Date.parse(this.queryParams.endTime)/1000;this.previewVideo(this.boxList);this.status = true;},handleNodeClick(res) {this.deptId = res.deptId;this.getPreview();},handleClick(e) {},// 创建播放实例initPlugin() {let that = this;this.oWebControl = null;that.oWebControl = new WebControl({szPluginContainer: "playWnd", // 指定容器idiServicePortStart: 15900, // 指定起止端口号,建议使用该值iServicePortEnd: 15909,szClassId: "23BF3B0A-2C56-4D97-9C03-0CB103AA8F11", // 用于IE10使用ActiveX的clsidcbConnectSuccess: () => {// 创建WebControl实例成功that.oWebControl.JS_StartService("window", {// WebControl实例创建成功后需要启动服务// 值"./VideoPluginConnect.dll"写死dllPath: "./VideoPluginConnect.dll",}).then(function () {// 设置消息回调that.oWebControl.JS_SetWindowControlCallback({cbIntegrationCallBack: that.cbIntegrationCallBack,});//JS_CreateWnd创建视频播放窗口,宽高可设定that.oWebControl.JS_CreateWnd("playWnd", 1000, 600).then(function () {// 创建播放实例成功后初始化that.init();});},function () {// 启动插件服务失败});},// 创建WebControl实例失败cbConnectError: function () {that.oWebControl = null;that.$message.warning("插件未启动,正在尝试启动,请稍候...");// 程序未启动时执行error函数,采用wakeup来启动程序window.WebControl.JS_WakeUp("VideoWebPlugin://");that.initCount++;if (that.initCount < 3) {setTimeout(function () {that.initPlugin();}, 3000);} else {that.open = true;that.title = "是否需要下载插件";// that.$message.warning("插件启动失败,请检查插件是否安装!");}},cbConnectClose: () => {// 异常断开:bNormalClose = false// JS_Disconnect正常断开:bNormalClose = trueconsole.log("cbConnectClose");that.oWebControl = null;},});},// 初始化init(callback) {let that = this;that.getPubKey(() => {let appkey = that.objData.appkey; //综合安防管理平台提供的appkey,必填let secret = that.setEncrypt(that.objData.secret); //综合安防管理平台提供的secret,必填let ip = that.objData.ip; //综合安防管理平台IP地址,必填let playMode = that.objData.playMode; //初始播放模式:0-预览,1-回放let port = that.objData.port; //综合安防管理平台端口,若启用HTTPS协议,默认443let snapDir = this.localStorage.snapDir; //抓图存储路径let videoDir = this.localStorage.videoDir; //紧急录像或录像剪辑存储路径let layout = that.objData.layout; //playMode指定模式的布局let enableHTTPS = 0; //是否启用HTTPS协议与综合安防管理平台交互,这里总是填1let encryptedFields = "secret"; //加密字段,默认加密领域为secretlet showToolbar = 1; //是否显示工具栏,0-不显示,非0-显示let showSmart = 1; //是否显示智能信息(如配置移动侦测后画面上的线框),0-不显示,非0-显示let buttonIDs ="0,16,256,257,258,259,260,512,513,514,515,516,517,768,769"; //自定义工具条按钮// var toolBarButtonIDs = "2049,2304" // 工具栏上自定义按钮that.oWebControl.JS_RequestInterface({funcName: "init",argument: JSON.stringify({appkey: appkey, //API网关提供的appkeysecret: secret, //API网关提供的secretip: 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) {that.oWebControl.JS_Resize(that.playWndWidth, that.playWndHeight); // 初始化后resize一次,规避firefox下首次显示窗口后插件窗口未与DIV窗口重合问题if (callback) {callback();}// 隐藏// that.oWebControl.JS_HideWnd()});});},// 获取公钥getPubKey(callback) {let that = this;this.oWebControl.JS_RequestInterface({funcName: "getRSAPubKey",argument: JSON.stringify({keyLength: 1024,}),}).then(function (oData) {if (oData.responseMsg.data) {that.pubKey = oData.responseMsg.data;callback();}});},// RSA 加密setEncrypt(value) {let that = this;let encrypt = new window.JSEncrypt();encrypt.setPublicKey(that.pubKey);return encrypt.encrypt(value);},// 回调的消息cbIntegrationCallBack(oData) {let { responseMsg: type } = oData;if (type === "error") {console.log(type,type// this.dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss"));} else {console.log(type,type// this.dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss"));}},// 视频回放功能previewVideo(data) {let that = this;let cameraIndexCode = data.indexCode; // 获取输入的监控点编号值,必填let streamMode = 0; // 主子码流标识:0-主码流,1-子码流let transMode = 0; // 传输协议:0-UDP,1-TCPlet gpuMode = 0; // 是否启用GPU硬解,0-不启用,1-启用let wndId = -1; // 播放窗口序号(在2x2以上布局下可指定播放窗口)that.oWebControl.JS_RequestInterface({funcName: "startPlayback",argument: JSON.stringify({cameraIndexCode: cameraIndexCode.trim(), // 监控点编号startTimeStamp: that.startTime,endTimeStamp: that.endTime,streamMode: streamMode, // 主子码流标识transMode: transMode, // 传输协议gpuMode: gpuMode, // 是否开启GPU硬解wndId: wndId, // 可指定播放窗口}),});},// 停止全部预览stopAllPreview() {this.oWebControl.JS_RequestInterface({funcName: "stopAllPreview",});},// 格式化时间dateFormat(val) {// this.// return c;},fun() {//对象解析Wie字符串if (this.address.snapDir != undefined &&this.address.videoDir != undefined) {window.localStorage.setItem("message", JSON.stringify(this.address));this.localStorage = this.address;this.cache = false;this.$modal.$msgSuccess("添加成功");} else {this.$message("请输入完整");}}},// 组件销毁后destroyed() {if (this.oWebControl != null) {// 先让窗口隐藏,规避可能的插件窗口滞后于浏览器消失问题this.oWebControl.JS_HideWnd();// 销毁当前播放的视频this.oWebControl.JS_RequestInterface({ funcName: "destroyWnd" });// 断开与插件服务连接this.oWebControl.JS_Disconnect();}},
};
</script><style lang="scss" scoped>
.monitor {margin: 10px;font-size: 14px;color: #606266;.monitor1 {padding: 6px;display: flex;font-size: 16px;}.monitor2 {display: flex;padding: 10px;font-size: 16px;background-color: rgba(242, 242, 242, 1);}
}.playWnd {margin: 30px 0 0 50px;width: 900px;height: 500px;border: 1px solid red;
}
.cbInfoDiv {float: left;width: 360px;margin-left: 16px;border: 1px solid #7f9db9;
}
.cbInfo {height: 200px;padding: 5px;border: 1px solid #7f9db9;word-break: break-all;overflow: scroll/auto;
}
.operate {margin-top: 24px;
}
.operate::after {content: "";display: block;clear: both;
}
.operate .btns {height: 32px;
}
.module {float: left;width: 120px;min-height: 290px;margin-left: 10px;padding: 16px 8px;box-sizing: border-box;border: 1px solid #e5e5e5;
}
.module .item {margin-bottom: 4px;
}
.module .label {width: 150px;display: inline-block;vertical-align: middle;margin-right: 8px;text-align: right;
}
.module input[type="text"],
.module select {box-sizing: border-box;display: inline-block;vertical-align: middle;margin-left: 0;width: 150px;min-height: 20px;
}
.module .btn {min-width: 80px;min-height: 24px;margin-top: 16px;margin-left: 158px;
}
.el-aside {margin: 0px;height: 84vh;color: #333;background-color: #d3dce6;
}
.el-main {background-color: #e9eef3;color: #333;text-align: center;
}
</style>

4. 最后的实现效果就是这样子的啦

5.监控播放需要下载插件,有需要,或者有问题可在下方评论或私信我。

实现海康监控视频播放(录像回放)(抓拍,录像等功能)相关推荐

  1. 实现海康监控视频播放(实时预览)(抓拍,录像,对讲等功能)

    1. 将需要存储的监控抓拍和录像功能存储到本地磁盘,使用输入报存到浏览器缓存里.在created拿取缓存数据,判断缓存里是否有数据. 如果没有弹出输入框. <div v-if="cac ...

  2. 使用vue二次开发海康监控H5视频播放

    使用vue二次开发海康监控H5视频播放 西瓜播放器示例demo 阿里云的示例demo 使用海康的H5视频开发包, 海康的api 页面中的使用 第一步 第二步 第三步 第四步 切记 bug 由于公司项目 ...

  3. uni-app 海康(HIKVISION)实时视频预览、录像回放、语音对讲

    uni-app 海康(HIKVISION)实时视频预览.录像回放.语音对讲:https://ext.dcloud.net.cn/plugin?id=2403

  4. 怎么查看raid0或者raid5_海康监控磁盘阵列怎么配置?一文了解清楚

    前面我们曾发布过raid1 raid2 raid5 raid6 raid10如何选择使用?各需要几块硬盘,有不少的朋友问到了关于磁盘阵列的如何配置,这个确实是个实际问题,在项目中也常遇到,之前我们没有 ...

  5. 海康监控虚拟服务器设置,海康监控如何连接网络设置教程

    海康监控如何连接网络设置教程 [2021-02-14 17:49:08]  简介: 建站服务器 这篇文章给大家分享的是有关通过ECS自带监控服务和云监控服务监控实例的方法的内容.小编觉得挺实用的,因此 ...

  6. 海康监控平台投屏电视墙方案切换失败故障

    海康监控平台投屏电视墙方案切换失败故障 平台版本: 故障提示:"设备不在线或登录失败,无法操作",提示如下图. 故障提示 故障原因:海康B20视频矩阵宕机等: 故障解决: 1.登录 ...

  7. 海康监控平台监控“视频巡逻”做投屏监控器

    海康监控平台监控"视频巡逻"做投屏监控器 平台版本: 把投屏电脑信号拖动到监控窗口上,可以随时监视电脑投屏信号工作情况,也可以提前看电脑投屏信号画面调整内容演示.注意提前把电脑信号 ...

  8. WEB端项目中接入海康监控视频播放监控画面

    需求: 以树形结构展示组织以及组织下的摄像头列表,点击单个摄像头进行预览 效果图: 该博客基于 海康开放平台API开发 准备工作 1. APPkey.APPsecret.服务器ip地址.端口号 2. ...

  9. 7系统内部系统组件禁止休眠_海康监控系统平台设计思路(二)

    设计思路 系统设计过程中充分考虑了各个子系统的信息共享要求,对各子系统进行结构化和标准化设计,通过系统间的各种联动方式将其整合成一个有机的整体,使之成为一套整体的.全方位的综合安防系统,达到人防.物防 ...

最新文章

  1. 《深度学习》课程视频(含30份资料)
  2. 仿 腾讯新闻快讯 --无缝滚动
  3. 你研究过单例么?这样写单例效率最高.
  4. 算法高级(10)-如何实现浏览器的前进、后退功能
  5. (C语言)人名排序,字符串排序
  6. VB直接播放EXE文件中的声音文件
  7. LeetCode 16. 3Sum Closest(最接近的三数之和)
  8. python set集合与列表_python set集合的添加、删除、修改和访问操作/frozenset 集合,集合内置方法完整列表-立地货...
  9. 用 Unity 编写象棋游戏
  10. 图像处理中ct图的通道是多少_CT图像后处理技术
  11. Windows API大全
  12. 用 ABAP 调用 OCR 接口实现出租车发票扫描
  13. mpvue 搭配 minui
  14. 抑郁症:从自毁到重生,可能你只差一个它
  15. 科学的研究方法——笛卡尔
  16. 程序员不可不知的版权协议
  17. 手把手教你实现解密数独的小程序并部署到web端
  18. 玩vr游戏的计算机配置要求,4款电脑横向评测: 寻找最适合玩VR的PC配置
  19. Android中修改ScrollBar默认样式
  20. html h5默认什么字体,【Web前端问题】手机页面一般采用什么字体?

热门文章

  1. 与门或门非门是计算机语言吗,什么叫与门、非门、或门
  2. 微服务器:概念,设计,优势与不足,核心,分类,联系,原则,基础,发展,选择,通信,定制
  3. 怎么利用计算机向邮箱传输文件,如何使用QQ邮箱发送整个文件夹-电脑自学网
  4. 博时基金云原生架构下的统一云管平台
  5. 华文行楷字帖欣赏_任政行书唐诗字帖欣赏:工整秀丽、雄健挺拔!初学书法的好字帖...
  6. docker--volumes,bind mounts和tmpfs mount
  7. Fitbit面临着对女性时期设定限制的愤怒
  8. 云演 CTF Web题型 lfi 文件包含
  9. 如何解锁元宇宙?应用场景决定商业化变现
  10. python项目实例-python简单项目实例