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.pswp.cn/diannao/12832.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/12832.shtml
英文地址,請注明出處:http://en.pswp.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虛擬數字人定制&…

Redis和數據庫能做到強一致嗎?

在現代軟件系統中&#xff0c;數據一致性是至關重要的&#xff0c;特別是對于需要處理大量并發請求和實時數據的系統。Redis 和數據庫都是常見的數據存儲解決方案&#xff0c;但它們在保證數據一致性方面有著不同的特點和限制。 本文將深入探討 Redis 和數據庫是否能夠做到強一…

最詳細的提單知識總結 | 數字貿易綜合服務平臺 | 箱訊科技

在外貿交易中&#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;比如設置好數據偵聽…

Android 獲取已安裝應用、包名、應用名、版本號、版本名

1、相關代碼 List<ApplicationInfo> installedApps getPackageManager().getInstalledApplications(0);for (ApplicationInfo appInfo : installedApps) {CharSequence getAppName getPackageManager().getApplicationLabel(appInfo);String appNamegetAppName.toStrin…

怎么做私域?先來了解私域運營模式!

現在&#xff0c;很多企業都在做私域&#xff0c;但仍舊有很多人會問&#xff1a;我的私域到底要怎么做&#xff1f; 關于這個問題&#xff0c;不同產品無論在消費頻次與客單價上&#xff0c;還是在決策鏈路的長度和復雜度上&#xff0c;都有巨大的差異&#xff0c;消費者需要…

前端 JS 經典:雙等號運算符的運算和轉換規則

1. 運算規則 兩端存在 NaN&#xff0c;返回 false NaN NaN; // false NaN 1; //false undefined 和 null 只有與自身比較&#xff0c;或者相互比較時&#xff0c;才返回 true&#xff0c;和其他原始類型比較都返回 false。 undefined null; // true undefined undefine…

flutter組件封裝技巧

這段代碼是一個用于創建一個&#xff08;GradeTag&#xff09;組件的類。這個組件可以根據輸入的年級和顏色創建一個具有不同顏色和百分比顯示的標簽。 實現原理&#xff1a; 使用GradeTag.origin構造函數來創建一個包含默認顏色和百分比的字符串。這個構造函數使用了assert來…

如何使用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;后端會返回一個登錄…

Vue3 + Avue中 Header slot寫法

avue示例 <template><avue-crud ref"crud":option"option":data"data"><template #name-header"{column}"><el-tag>{{(column || {}).label}}-{{(column || {}).prop}}</el-tag></template><…