Unity3d C#利用本地網頁快速打開螢石云監控視頻流(ezopen)實現云臺,聲音等控制,支持WebGL平臺,替代UMP播放(含源碼)

前言

之前我介紹了替代Universal?Media?PlayerUMP播放石云監控視頻流(ezopen)的功能,效果還是很明顯的,筆者的測試是差不多3-5秒就能打開監控畫面,不過稍微遺憾的是,之前的功能是iframe打開石云提供的播放網頁的形式,功能基本只有畫質切換,聲音開關等;具體可以移步查看(https://blog.csdn.net/qq_33789001/article/details/132025298)。本文的功能還是在3D WebView for Windows and macOS (Web Browser)?插件的基礎上使用EZUIKit的插件實現了云臺控制(支持云臺的設備)功能。

效果

WebGL的支持:
在這里插入圖片描述

云臺支持:

在這里插入圖片描述

功能實現

筆者所用的插件:
LitJson 用于生成/解析網絡請求的json。
DOTweenPro 用于制作簡單的窗口彈出、關閉動畫;
3D WebView for Windows and macOS (Web Browser) 用于打開網頁(使用說明(https://blog.csdn.net/qq_33789001/article/details/126180804))的插件(看需求使用Embedded Browser也可以),需要WebGL 平臺的還需要2D WebView for WebGL (Web Browser IFrame)插件。
獲取accessToken,管理員賬號根據appKey和secret獲取accessToken;獲取監控視頻流等基礎功能 就不再次贅述了,可以參考前言中的文章。

這里打開本地網頁的方式函數:

string url = "streaming-assets://CamLocalWebPlay/WebPlayCamVideo.html?url=" + path + "&token=" + YsAccessTokenMgr.instance.AT;
canvasWebView.WebView.LoadUrl(url);

streaming-assets:// 表示文件的路徑在Unity3d的StreamingAssets文件夾下。

方式一 本地iframe

視頻嵌入式播放方式,詳細說明請看:https://open.ys7.com/bbs/article/20。所以就是本地的網頁,這里我直接先粘出代碼:

<!DOCTYPE html>
<html lang="en-us">
<head><meta charset="utf-8"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>本地網頁監控播放</title><style>html, body, iframe {height: 100%;width: 100%;overflow: hidden;margin: 0;padding: 0;}#wrap {width: 100%;height: 100%;}iframe {border: none;}</style><body onload="document.documentElement.webkitRequestFullScreen();"><div id="wrap"><iframe id="videoframe"></iframe></div><script>function getUrlParam(key) {const search = window.location.search.substring(1);const paramsArray = search.split("&");let value = null;paramsArray.forEach((param) => {const [paramKey, paramValue] = param.split("=");if (key === paramKey) {value = paramValue;}});return value;}var iframe = document.getElementById("videoframe");iframe.src = "https://open.ys7.com/ezopen/h5/iframe_se?url=" + getUrlParam("url") + "&autoplay=1&audio=0&accessToken=" + getUrlParam("token") ;</script></body>
</html>

這里根據輸入的url 和token生成iframe_se的參數,即可正常播放。

方式一 本地EZUIKit

EZUIKit插件算是官方給出的插件,降低接入難度,適配自定義UI,適配主流框架;低延時預覽,云存儲回放,SD卡回放。功能API豐富,如:播放控制,音頻控制,視頻截圖,實時獲取視頻OSDTime,視頻錄制,設備對講,電子放大,全屏等。
其使用方式也比較簡單:
創建DOM

  <div id="video-container"></div>

直播播放

var player = new EZUIKit.EZUIKitPlayer({id: 'video-container', // 視頻容器IDaccessToken: 'at.3bvmj4ycamlgdwgw1ig1jruma0wpohl6-48zifyb39c-13t5am6-yukyi86mz',url: 'ezopen://open.ys7.com/G39444019/1.live',width: 600,height: 400,
})

回放播放

    var player = new EZUIKit.EZUIKitPlayer({id: 'video-container', // 視頻容器IDwidth: 600,height: 400,accessToken: 'at.3bvmj4ycamlgdwgw1ig1jruma0wpohl6-48zifyb39c-13t5am6-yukyi86mz',url: 'ezopen://open.ys7.com/G39444019/1.rec'
})

使用它需要先把代碼倉庫git下來,并將EZUIKit-JavaScript-npm/demos/base-demo/ezuikit_static/文件夾放入功能中
引入腳本:

 <script src="./ezuikit.js"></script>

編寫一個很簡單的網頁僅包含一個元素

<div id="video-container"></div>  

并且通過EZUIKit.EZUIKitPlayer函數進行初始化:

var player = new EZUIKit.EZUIKitPlayer({id: 'video-container', // 視頻容器IDaccessToken: 'at.3bvmj4ycamlgdwgw1ig1jruma0wpohl6-48zifyb39c-13t5am6-yukyi86mz',url: 'ezopen://open.ys7.com/203751922/1.live',})

這里關鍵的就是需要傳入url和accessToken的值,這個之前通過螢石的后臺已經獲取。

可以設置模板:

Template // simple - 極簡版;standard-標準版;security - 安防版(預覽回放);voice-語音版;
theme-可配置主題;

筆者嘗試過后,發現只有standard-標準版和theme-可配置主題有效,其它為白屏效果。
standard-標準版:
在這里插入圖片描述

theme-可配置主題:
在這里插入圖片描述

點擊云臺控制按鈕可以調出云臺的控制面板:

在這里插入圖片描述

也可以自定義按鈕來控制播放:

結束播放: player.stop() 開啟聲音: player.openSound()
關閉聲音: player.closeSound()
開始錄像: player.startSave()
結束錄像: player.stopSave()
視頻截圖: player.capturePicture()
全屏(自動適配移動端pc端全屏): player.fullScreen()
取消全屏: player.cancelFullScreen()
獲取播放時間回調: player.getOSDTime()
開始對講: player.startTalk()
結束對講: player.stopTalk()

工程源碼

完整的工程源碼:https://download.csdn.net/download/qq_33789001/88135255
無法打開說明審核未通過。

現在工程后,打開項目中的Main.unity場景,選中FunNodes>YsAccessTokenMgr節點設置您自己的appKey和appSecret:
在這里插入圖片描述

選中Icon_Camera修改視頻標簽的信息deviceSerial和channelNo:
在這里插入圖片描述

確保的信息都是同一個賬號下面的,運行后點擊視頻圖標即可看到播放的效果了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/35620.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35620.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35620.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

詳解攔截器和過濾器

目錄 代碼演示過濾器Demo攔截器Demo 過濾器自定義攔截器配置攔截器過濾器執行原理多個過濾器的執行順序 攔截器自定義攔截器注冊攔截器1&#xff09;注冊攔截器2&#xff09;配置攔截的路徑3&#xff09;配置不攔截的路徑 多個攔截器的執行順序 過濾器和攔截器的區別 代碼演示 …

HarmonyOS教育類APP項目實戰系列課結課考試答案(1-10講)80分就合格

王丹輝&#xff08;第一講&#xff09;&#xff1a;HarmonyOS教育類APP項目實戰開課及低代碼初體驗 結課考試 及格分80/ 滿分100 評價 判斷題 1. DevEco Studio不能同時支持HarmonyOS和OpenHarmony應用/服務開發 正確(True)錯誤(False) 回答正確 2. DevEco Studio…

C#基礎知識(一)

一、C#程序結構 《1》命名空間的聲明&#xff08;namespace declaration&#xff09; 《2》一個class 《3》class方法 《4》class屬性 《5》一個main方法 《6》語句&#xff08;statements&#xff09;&表達式&#xff08;Expressions&#xff09; 《7》注釋 注&#xff1a…

【設計模式】橋接模式

橋接&#xff08;Bridge&#xff09;是用于把抽象化與實現化解耦&#xff0c;使得二者可以獨立變化。這種類型的設計模式屬于結構型模式&#xff0c;它通過提供抽象化和實現化之間的橋接結構&#xff0c;來實現二者的解耦。 這種模式涉及到一個作為橋接的接口&#xff0c;使得…

C++ 網絡編程項目fastDFS分布式文件系統(二)-redis部分

目錄 1. 數據庫類型 1.1 基本概念 1.2 關系/非關系型數據庫搭配使用 2. Redis 2.1 基本知識點 2.2 redis常用命令 - String類型 - List類型 - Set類型 - SortedSet 類型 - Hash類型 Key 相關的命令 2.3 redis配置文件 2.4 redis數據持久化 3 hiredis的使用 1. 數據…

手搓vue3組件_0,打包配置

打包后引入項目是發現報錯: Cannot read properties of null (reading isCE) TypeError: Cannot read properties of null (reading isCE)這個是由于vue版本沖突問題, 這里我引入了自己打包的ui組件庫,但是ui組件庫中打包進入了自己的vue,那么在此時使用時,如果你引入的自己的組…

原生js發送ajax請求---ajax請求篇(一)

在原生js中我們使用的是XMLHttpRequest對象來發送ajax請求 主要步驟就是&#xff1a; 1.創建XMLHTTPRequest對象 2.使用open方法設置和服務器的交互信息 3.設置發送的數據&#xff0c;開始和服務器端交互 4.注冊事件 5.更新界面 &#xff08;1&#xff09; get方式 //步驟一…

使用python對圖像加噪聲

加上雨點噪聲 import cv2 import numpy as npdef get_noise(img, value10):#生成噪聲圖像>>> 輸入&#xff1a; img圖像value 大小控制雨滴的多少 >>> 返回圖像大小的模糊噪聲圖像noise np.random.uniform(0, 256, img.shape[0:2])# 控制噪聲水平&#xff…

誰能講清楚Spark之與MapReduce的對比

我們已經知道Spark是如何設計和實現數據處理流程的,這里我們 再深入思考一下,為什么Spark能夠替代MapReduce成為主流的大數據處理框架呢?對比MapReduce,Spark究竟有哪些優勢? 一 優勢 1 通用性: 基于函數式編程思想,MapReduce將數據類型抽象為,k,v格式,并將數據處理…

Spring Boot單元測試使用MockBean注解向Service注入Mock對象

1. 背景介紹 我們在測試時有一個Service&#xff0c;我們需要測試Service&#xff0c;但Service內部依賴ServiceA、ServiceB&#xff0c;此時我們希望Mock ServiceA&#xff0c;ServiceB 注入真實對象。 class Service {private ServiceA A;private ServiceB B;public int me…

OPENCV C++(十二)模板匹配

正常模板匹配函數 matchTemplate(img, templatee, resultMat, 0);//模板匹配 這里0代表的是方法&#xff0c;一般默認為0就ok img是輸入圖像 templatee是模板 resultmat是輸出 1、cv::TM_SQDIFF&#xff1a;該方法使用平方差進行匹配&#xff0c;因此最佳的匹配結果在結果為…

Excel(1):表頭或列頭凍結

1.需求 對于較大的excel&#xff0c;通常需要固定一部分內容&#xff0c;另一份內容為可翻動。 2.解決方式 在視圖中選擇凍結窗格&#xff0c;需要注意的是&#xff0c;選擇凍結窗格時&#xff0c;窗格的左上方的表格區域是固定不動的&#xff0c;只可以向下或者向右活動。

8.10論文閱讀

文章目錄 The multimodal MRI brain tumor segmentation based on AD-Net摘要本文方法損失函數 實驗結果 max-vit - unet:多軸注意力醫學圖像分割摘要本文方法實驗結果 The multimodal MRI brain tumor segmentation based on AD-Net 摘要 基于磁共振成像(MRI)的多模態膠質瘤…

Redis分布式鎖問題

1、業務單機情況下 問題&#xff1a;并發沒有加鎖導致線程安全問題。 解決方法&#xff1a;加鎖處理&#xff0c;如lock、synchronized 仍有問題&#xff1a;業務分布式情況下&#xff0c;代碼級別加鎖已經無效。需要借助第三方組件&#xff0c;如redis、zookeeper。 2、業務分…

云計算|OpenStack|使用VMware安裝華為云的R006版CNA和VRM---初步使用(二)

前言&#xff1a; 在前面一篇文章云計算|OpenStack|使用VMware安裝華為云的R006版CNA和VRM---初始安裝&#xff08;一&#xff09;_華為cna_晚風_END的博客-CSDN博客 介紹了基于VMware虛擬機里嵌套部署華為云的云計算&#xff0c;不過僅僅是做到了在VRM的web界面添加計算節點…

Kubernetes的默認調度和自定義調度詳解

默認調度和自定義調度詳解 默認調度 默認調度是 Kubernetes 中的內置機制&#xff0c;它使用調度器組件來管理分配容器的節點。調度器依據以下原則選擇合適的節點&#xff1a; 資源需求 &#xff1a;調度器會為每個 Pod 根據其 CPU 和內存需求選擇一個具有足夠資源的節點。親…

Android使用kotlin+協程+room數據庫的簡單應用

前言&#xff1a;一般主線程&#xff08;UI線程&#xff09;中是不能執行創建數據這些操作的&#xff0c;因為等待時間長。所以協程就是為了解決這個問題出現。 第一步&#xff1a;在模塊級的build.gradle中引入 id com.android.application// roomid kotlin-androidid kotlin…

Mysql主從分離

一、前言 某個應用場景中&#xff0c;在操作數據庫這部分&#xff0c;往往是數據庫的讀取往往大于數據庫的寫入&#xff0c;當讀取數據達到數據庫的瓶頸時&#xff0c;性能下滑&#xff0c;影響數據的寫入&#xff0c;導致整個應用的不可用。為了解決這個問題&#xff0c;這時&…

單片機直驅兩相四線步進電機研究

【本文發布于https://blog.csdn.net/Stack_/article/details/132236329&#xff0c;未經允許不得轉載&#xff0c;轉載須注明出處】 雙極性步進電機&#xff08;兩相四線步進電機&#xff09;&#xff0c;原理的東西就先不講太多了&#xff0c;還沒搞清楚&#xff0c;邊查資料邊…

jsoup解析html之table表格

jsoup解析html之table表格 jsoup說明 一款Java 的HTML解析器 jsoup 是一款Java 的HTML解析器&#xff0c;可直接解析某個URL地址、HTML文本內容。它提供了一套非常省力的API&#xff0c;可通過DOM&#xff0c;CSS以及類似于jQuery的操作方法來取出和操作數據。 主要功能 從一…