uniapp微信小程序通过萤石云接入海康摄像机

需求:在uniapp微信小程序上查看海康威视的摄像机监控视频和和操作摄像机拍摄方向

在萤石云接入海康摄像机设备,由于不同品牌设备在不同时间段接入方式可能不一致,具体接入方式查看官方文档或咨询官方客服。

海康摄像机官方客服热线:4008005998

接入方式:官方提供多种接入方式,在此选择通过“半屏”(https://open.ys7.com/help/502)接入

操作流程:

  • 先确保该设备未在海康互联、海康云耀、海康威视等平台接入。如有接入,请先退出。确保该设备已购买流量套餐。
  • 萤石云开放平台:注册平台账号并创建好应用,https://open.ys7.com/console/application.html
  • “萤石云视频”APP:在通过“萤石云视频”APP,添加设备,扫描摄像机底部专属二维码或输入设备序列号,根据提示的步骤操作…(选择SIM设备添加,无需验证码)
  • 海康威视摄像机:在摄像机摄像头的安置SIM卡的地方(该款摄像机提供内置和外置SIM卡),扭开螺丝钉,找到“reset”键,接通电源,按下重置键,等待摄像机提示“等待注册平台”等提示音…
  • 接入完毕

在这里插入图片描述
在这里插入图片描述

代码实现:

单独js文件存放萤石云appKey和appSecret,也可直接写在vue文件中,在此选择第一种js导入方式

@/common/config.js

// 萤石云(https://open.ys7.com/console/application.html)
export const appKey = 'xxx'export const appSecret = 'xxx'

摄像机设备列表页

萤石云接口:

  • accessToken过期获取:https://open.ys7.com/api/lapp/token/get
  • 获取所有设备:https://open.ys7.com/api/lapp/camera/list,获取设备序列号和名字
  • 获取抓拍图:https://open.ys7.com/api/lapp/device/capture,获取当前抓拍图

微信小程序半屏跳转:wx.openEmbeddedMiniProgram( )

@/pages/videoSurveillanceList/videoSurveillanceList

<template>
<view class="videoSurveillanceList"><!-- 设备列表 --><view class="container" v-if="equipmentList"><view class="item" v-for="item in equipmentList" :key="item.deviceSerial"><view class="item-t" @click="toYXYApplet(item.deviceSerial)"><image v-if="item.imgUrl" :src="item.imgUrl" mode=""></image><image v-else src="@/static/defaule/jk.png" mode=""></image></view> <view class="item-b"><view class="text"><view class="">{{ item.channelName }}</view><view class="">{{ item.deviceSerial }}</view></view><view class="icon" @click="open(item.deviceSerial)"><uni-icons type="more-filled" size="30"></uni-icons></view></view></view></view><!-- 编辑按钮弹出 --><uni-popup ref="popup" type="center"><view class="popup_content"><view class="title">{{currentId}}</view><view class="popup_item" @click="editName"> <uni-icons type="gear" size="26"></uni-icons><text> 修改名称 </text></view><view class="popup_item" @click="remove"> <uni-icons type="trash" size="26"></uni-icons><text> 移除设备 </text></view></view></uni-popup><!-- 右下角添加设备按钮 --><uni-fab ref="fab"  horizontal="right" @fabClick="addEquipment" />
</view>
</template><script>
import {appKey, appSecret} from '@/common/config.js'
export default{data(){return {accessTokenObj: uni.getStorageSync("accessTokenObj"),accessToken: uni.getStorageSync("accessTokenObj").accessToken,// 需要跳转的半屏小程序的id:萤石云微信小程序idXYYAppId: 'wxf2b3a0262975d8c2',equipmentList:[// {// 	// 序列号// 	deviceSerial: '',// 	// 添加时间// 	bindingTime: '',// 	// 监控图片(用于展示监控)// 	imgUrl: '',// 	// 设备名称// 	channelName: ''// },],currentId: '',}},mounted(){uni.removeStorageSync('accessTokenObj');this.getEquipmentList();uni.showLoading({title: '加载中'});},methods:{open(e) {this.$refs.popup.open()this.currentId = e},close() {this.$refs.popup.close()},// 修改名称editName(){// ...this.$refs.popup.close()},// 删除设备remove(){// ...this.$refs.popup.close()},// 添加设备addEquipment(validateCode='', deviceSerial=''){...},// 更新accessTokenasync upToken(){return new Promise((resolve, reject)=>{uni.request({url:'https://open.ys7.com/api/lapp/token/get',data:{appKey,appSecret,},method :"POST",header:{"Content-Type": "application/x-www-form-urlencoded"},success:res=>{if(res.data?.code==200){uni.setStorageSync('accessTokenObj', res.data.data)this.accessTokenObj = res.data.datathis.accessToken = res.data.data.accessTokenresolve('ok');}else{uni.showToast({ title: "获取萤石云token失败", icon: "error"})reject(new Error("获取token失败"));}},fail:err=>{uni.showToast({ title: "获取萤石云token发生错误", icon: "error"})reject(new Error("获取token失败"));}})})},// 获取设备列表async getEquipmentList(){if(!this.accessTokenObj || this.accessTokenObj.expireTime <= Date.now()){await this.upToken()}uni.request({url:'https://open.ys7.com/api/lapp/camera/list',data:{accessToken: this.accessToken,},method:'POST',header:{"Content-Type": "application/x-www-form-urlencoded"},success: (res) => {if(res.data?.code == 200){this.getEquipmentsImgs(res.data.data)}else{uni.showToast({ title: "请求失败", icon: "none" })}},fail: (err) => {uni.showToast({ title: "请求错误", icon: "none" })}})},// 遍历调用reqEquipmentsImg,获取所有设备图片async getEquipmentsImgs(list){let newsArr = list.map(async item=>{return await this.reqEquipmentsImg(item.deviceSerial)})await Promise.all(newsArr).then( r =>{r.forEach((item,i)=>{if(item.data?.code == 200){list[i].imgUrl = item.data.data.picUrl}else{uni.showToast({ title: "抓拍图请求失败", icon: "none" })}})}).catch( e =>{uni.showToast({ title: "图片获取失败,请重试", icon: "none" })})uni.hideLoading()this.equipmentList = list},// 获取单个设备图片async reqEquipmentsImg(deviceSerial){if(!this.accessTokenObj || this.accessTokenObj.expireTime <= Date.now()){await this.upToken()}return await uni.request({// 图片抓拍url:'https://open.ys7.com/api/lapp/device/capture',data:{deviceSerial,channelNo: 1,accessToken: this.accessToken,},method:'POST',header:{"Content-Type": "application/x-www-form-urlencoded"}})},// 跳转萤石云小程序async toYXYApplet(deviceSerial) {if(!this.accessTokenObj || this.accessTokenObj.expireTime <= Date.now()){await this.upToken()}// #ifdef MP-WEIXINwx.openEmbeddedMiniProgram({appId: this.XYYAppId,path: '/pages/live/live?accessToken='+ this.accessToken +  '&deviceSerial='+ deviceSerial + '&channelNo=1'})// #endif// #ifndef MP-WEIXINuni.showToast({title: "请在微信小程序查看监控",icon: "none"})// #endif},}	
}
</script><style lang="scss" scoped>
.videoSurveillanceList{width: 100vw;height: 100vh;background-color: #f9f9f9;
}
.container{width: 100vw;padding: 20rpx;box-sizing: border-box;display: grid;grid-template-columns: 1fr 1fr;grid-template-rows: 1fr 1fr;grid-gap: 30rpx;.item{height: 392rpx;border-radius: 20rpx;overflow: hidden;background-color: white;box-shadow: 0 0 10px #d1d1d1;.item-t{width: 100%;height: 300rpx;image{width: 100%;height: 100%;}}.item-b{padding: 6rpx 10rpx;display: flex;align-items: center;justify-content: space-between;font-weight: 500;.text{overflow: hidden;white-space: nowrap;text-overflow: ellipsis;}.icon{margin-left: 10rpx;display: flex;align-items: center;padding: 10rpx 4rpx;}}}
}.popup_content{padding: 10rpx 0;font-size: 28rpx;font-weight: 500;width: 300rpx;height: 200rpx;background-color: #f9f9f9;border-radius: 20rpx;display: flex;flex-direction: column;justify-content: center;align-items: center;.title{border-bottom: #d1d1d1 1px solid;width: 100%;font-weight: 600;text-align: center;margin-bottom: 10rpx;}.popup_item{display: flex;justify-content: center;align-items: center;margin:10rpx 0;text{padding-left: 10rpx;}}.popup_item:last-child{margin-bottom: 0;}
}
</style>

注:通过萤石云视频APP、萤石云开放平台、海康摄像机、uniapp,简略实现了uniapp微信小程序查看海康摄像机监控视频和操作摄像机拍摄方向
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

stack、queue、priority_queue以及仿函数

我们上次对std中的list进行实现&#xff0c;今天我们要实现stack、queue、priority_queue以及仿函数。 目录 stack堆堆的框架构造函数push插入pop删除size()大小empty()判断空top()取栈顶的元素 queue队列队列框架问题&#xff1a; 这里我们为什么用deque? 插入删除取头数据取…

AI交互数字人赋能农业数字化、智能化推广营销

2024陵水荔枝文化节上“数字新农人”陵小荔身着黎族服饰、佩戴银器亮相开幕式现场&#xff0c;AI交互数字人生动地以互动式推介和歌舞等形式&#xff0c;带领宾客们了解陵水荔枝的发展历程、产业布局、未来愿景等。如今&#xff0c;越来越多农产品品牌通过3D虚拟数字人定制&…

最详细的提单知识总结 | 数字贸易综合服务平台 | 箱讯科技

在外贸交易中&#xff0c;国际物流是必不可少的一个步骤。国际物流掌控好&#xff0c;就等于把货物牢牢握在手心&#xff0c;不怕货财两空。 本期将向大家介绍正本提单、电放提单、海运单三种国际海运放货方式以及区分它们的方法。 超实用&#xff01;外贸人赶紧收藏~ 正本提…

CTF例题:[SWPU2019]Web1(无列名注入)

网址&#xff1a;BUUCTF在线评测 搜索web1 启动靶机 点击链接进入题目 进入题目后发现有登录和注册接口&#xff0c;直接注册登录。 首先通过1进行测试&#xff0c;查看是否有注入点 出现报错&#xff0c;说明可能存在注入点 然后继续测试发现该服务器过滤了&#xff1a; or、…

vue(九) 生命周期 v3.0和v2.0对比,父子组件生命周期的执行顺序

文章目录 生命周期vue2.0生命周期1.图示2.生命周期解释说明3.代码示例 vue3.0生命周期1.图示2.生命周期解释说明3.代码示例 父子组件中生命周期执行顺序v.3和v2.0生命周期对比 生命周期 每个 Vue 组件实例在创建时都需要经历一系列的初始化步骤&#xff0c;比如设置好数据侦听…

怎么做私域?先来了解私域运营模式!

现在&#xff0c;很多企业都在做私域&#xff0c;但仍旧有很多人会问&#xff1a;我的私域到底要怎么做&#xff1f; 关于这个问题&#xff0c;不同产品无论在消费频次与客单价上&#xff0c;还是在决策链路的长度和复杂度上&#xff0c;都有巨大的差异&#xff0c;消费者需要…

如何使用AspectJ做切面,打印jar包中方法的执行日记

最近在工作中遇到一个redis缓存中的hash key莫名其妙被删除的问题&#xff0c;我们用了J2Cache&#xff0c;二级缓存用的是redis。hash key莫名其妙被删除又没有日志&#xff0c;就想到做一个切面在调用redis删除hash key的方法的时候&#xff0c;打印日志&#xff0c;并且把调…

高德、百度开车导航APP是怎么知道红绿灯倒计时的?

高德、百度开车导航APP之所以能够知道红绿灯的倒计时&#xff0c;这背后是一系列复杂的科技手段和数据分析的综合运用。从交管部门提供的数据&#xff0c;到导航软件自身通过大数据和算法进行的计算&#xff0c;每一个环节都为红绿灯倒计时的准确呈现提供了支撑。 首先&#xf…

白酒:低酒精度白酒的消费特点与市场前景

低酒精度白酒的消费特点与市场前景是酒类市场的一个重要话题。随着品质意识的提高和消费者口味的多样化&#xff0c;低酒精度白酒逐渐受到越来越多的关注。云仓酒庄豪迈白酒作为白酒的品牌之一&#xff0c;其消费特点和市场前景值得深入探讨。 首先&#xff0c;从消费特点来看…

基于YOLOv5的道路裂缝检测,加入一种基于内容引导注意力(CGA)的混合融合提升2个多点

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文主要内容:详细介绍道路裂缝检测整个过程&#xff0c;从数据集到训练模型到结果可视化分析。 &#x1f4a1;&#x1f4a1;&#x1f4a1;通过加入一种基于内容引导注意力(CGA)的混合融合提升检测性能&#xff0c; 特征融合创新 | 一…

WS2812C是一款将控制电路和RGB芯片集成在一个5050元器件封装中的智能控制LED光源

一般说明 WS2812C是一款将控制电路和RGB芯片集成在一个5050元器件封装中的智能控制LED光源。内部包括智能数字端口数据锁存器和信号整形放大驱动电路。还包括一个精密的内部振荡器和一个 12V电压可编程恒流控制部分&#xff0c;有效保证像素点光源颜色高度一致。 …

决策规划仿真平台的搭建

以下内容笔记据来自于b站up主忠厚老实的老王&#xff0c;视频&#xff1b;链接如下&#xff1a; 自动驾驶决策规划算法第二章第一节 决策规划仿真平台搭建_哔哩哔哩_bilibili 使用到的软件有matlab、prescan、carsim以及visual stadio。 我电脑上软件的版本是matlab2022a&am…

2024.1IDEA 到2026年

链接&#xff1a;https://pan.baidu.com/s/1hjJEV5A5k1Z9JbPyBXywSw?pwd9g4i 提取码&#xff1a;9g4i解压之后,按照 操作说明.txt 操作; IntelliJ IDEA 2024.1 (Ultimate Edition) Build #IU-241.14494.240, built on March 28, 2024 Licensed to gurgles tumbles You have…

Python代码:二、多行输出

1、题目 将字符串 Hello World! 存储到变量str1中&#xff0c;再将字符串 Hello Nowcoder! 存储到变量str2中&#xff0c;再使用print语句将其打印出来&#xff08;一行一个变量&#xff09;。 2、代码 import sys str1 Hello World! str2 Hello Nowcoder! print (str1,st…

详细分清Session,Cookie和Token之间的区别,以及JWT是什么东西

Cookie Cookie是一种小型的文本文件&#xff0c;由网站在用户访问时存储在其计算机或移动设备上&#xff0c;Cookie主要用于跟踪、识别和存储有关用户的信息。 简单来说Cookie就是用来存储某些后端发送给前端的数据&#xff0c;例如我们登陆后&#xff0c;后端会返回一个登录…

C++ requires关键字简介

requires 是 C20 中引入的一个新关键字&#xff0c;用于在函数模板或类模板中声明所需的一组语义要求&#xff0c;它可以用来限制模板参数&#xff0c;类似于 typename 和 class 关键字。 requires关键字常与type_traits头文件下类型检查函数匹配使用&#xff0c;当requires后…

激光雷达技术:科技之眼,照亮前行

在科技与人文关怀的交响乐章中&#xff0c;一项名为“蝙蝠避障”使用了激光雷达技术原理及应用的创新成果&#xff0c;正悄然改变着视障朋友们的生活方式&#xff0c;为他们的日常出行铺设了一条充满希望的光明之路。今天&#xff0c;让我们一起深入探讨这项技术如何成为盲人出…

深化市场布局与产业链整合,三清互联以创新为公司发展赋能

近年来&#xff0c;我国大力发展现代化电力体系&#xff0c;并不断推进智能电网的发展&#xff0c;电力物联网作为支撑电力行业数字化发展的关键基础设施&#xff0c;迎来了快速发展黄金时期。作为电力物联网领域领先企业之一&#xff0c;三清互联凭借敏锐的市场洞察力和技术创…

探索软件测试中的创新测试方法:测试左移

软件测试中的测试左移方法 在当今竞争激烈的市场中&#xff0c;满足客户的期望和需求是所有公司在竞争中成为市场领导者的关键。这就是为什么越来越多的公司现在转向测试左移&#xff0c;并将其应用于产品开发过程。 在本文中&#xff0c;我们将从初学者的角度来介绍测试左移…

cmd如何以管理员身份运行

打开开始菜单。 在搜索框中输入cmd。 在搜索结果中&#xff0c;找到cmd&#xff0c;右键单击&#xff0c;选择“以管理员身份运行”。 参考&#xff1a; cmd如何以管理员身份运行