萤石云实际视频实时接入(生产环境)

萤石云视频接入

本示例可用于实际接入萤石云开放平台视频,同时支持音频输入和输出。

实际优化内容

1.动态获取token

2.切换各公司和车间时,自动重新初始化播放器

let EZUIKit = null; // 第三方库引用
let EZUIKitPlayers = []; // 播放器实例数组
let gss = ''; // 全局保存当前选择的 gss 值
let accessToken = ''; // 存储动态获取的 accessTokenconst APP_KEY = '----------------'; // 替换为实际 appKey
const APP_SECRET = '-----------'; // 替换为实际 appSecret// 页面加载时引入 ezuikit.js 并初始化播放器
Page.onLoad = function () {System.import('/gemcoderAppResource?appuuid=11ce5afa919d4289bdb6e71912c172b0&path=/files/ezuikit.js&resourcesId=1280590&version=0').then(res => {EZUIKit = res.default;return fetchAccessToken(); // 先获取 token}).then(token => {accessToken = token;initPlayers(gss); // 使用当前 gss 初始化播放器}).catch(err => {console.error('初始化失败:', err);});
};// 下拉选择变化时更新 gss 并重新初始化播放器
Page.下拉选择OnChange = function () {gss = gmcom.gs.value;console.log('选中的 gss:', gss);if (EZUIKit && accessToken) {initPlayers(gss);} else {console.warn('EZUIKit 或 accessToken 尚未准备好');}
};// 获取 accessToken
function fetchAccessToken() {const url = 'https://open.ys7.com/api/lapp/token/get';
return new Promise((resolve, reject) => {fetch(url, {method: 'POST',headers: {'Content-Type': 'application/x-www-form-urlencoded'},body: new URLSearchParams({appKey: APP_KEY,appSecret: APP_SECRET})}).then(response => response.json()).then(data => {if (data.code === '200') {resolve(data.data.accessToken);} else {reject(new Error(`获取 token 失败: ${data.msg}`));}}).catch(error => {reject(error);});
});
}
// 根据 gss 获取摄像头配置(不再包含 accessToken)
function getPlayerConfigs(gss) {const commonUrls = ['ezopen://open.ys7.com/-----1.hd.live','ezopen://open.ys7.com/---/1.hd.live','ezopen://open.ys7.com/-----/1.hd.live','ezopen://open.ys7.com/-------/1.hd.live'];
let urls = [];switch (gss) {case '0102':urls = ['ezopen://open.ys7.com/-------/1.hd.live','ezopen://open.ys7.com/------/1.hd.live','ezopen://open.ys7.com/------/1.hd.live'];break;case '0103':urls = ['ezopen://open.ys7.com/--------1.hd.live','ezopen://open.ys7.com/-----/1.hd.live','ezopen://open.ys7.com/------/1.hd.live','ezopen://open.ys7.com/--------/1.hd.live'];break;case '0110':urls = ['ezopen://open.ys7.com/-------/1.hd.live','ezopen://open.ys7.com/--------/1.hd.live','ezopen://open.ys7.com/--------/1.hd.live','ezopen://open.ys7.com/---------/1.hd.live'];break;default:urls = [...commonUrls];
}const baseIds = ['yt-dtView-10374446859161','yt-dtView-10474436971042','yt-dtView-17744698706218','yt-dtView-10744075992380'
];return urls.map((url, index) => ({id: baseIds[index],url: url
}));
}//
 清理播放器资源
function clearPlayers() {if (EZUIKitPlayers.length > 0) {EZUIKitPlayers.forEach(player => {if (player.stop) player.stop();});EZUIKitPlayers = [];}
}// 初始化播放器
function initPlayers(gss) {clearPlayers();
const playerConfigs = getPlayerConfigs(gss);playerConfigs.forEach(config => {const player = new EZUIKit.EZUIKitPlayer({id: config.id,accessToken: accessToken, // 使用动态获取的 tokenurl: config.url,autoplay: false,audio: 0,handleSuccess: () => {// 成功回调},handleError: (e) => {if (typeof doEvent === 'function') {doEvent('onError', e);} else {console.error('doEvent 未定义:', e);}}});EZUIKitPlayers.push(player);
  });
}
// 播放按钮
Page.按钮OnClick = function () {EZUIKitPlayers.forEach(player => player.play());
};// 暂停按钮
Page.按钮11OnClick = function () {EZUIKitPlayers.forEach(player => player.stop());
};// 切换地址按钮
Page.按钮111OnClick = function () {const newUrls = ['ezopen://open.ys7.com/-----/1.live','ezopen://open.ys7.com/------/1.live','ezopen://open.ys7.com/-----/1.live','ezopen://open.ys7.com/------/1.live'
];EZUIKitPlayers.forEach((player, index) => {if (index < newUrls.length) {player.stop().then(() => {player.play({ url: newUrls[index], accessToken: accessToken });});}
});

}

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

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

相关文章

【Dify平台】使用Dify API 实现网页内嵌式AI助手

使用 Dify API 实现网页内嵌式 AI 助手 一. 引言二. Dify API 概述三. 实现网页内嵌式 AI 助手的技术架构四. 前端实现五. 后端实现六. 功能扩展与优化七. 测试与部署一. 引言 随着 AI 技术的不断发展,越来越多的企业希望将智能助手集成到自己的网页中,实现用户自动接待、问…

mysql8配置文件my.ini讲解,原汁原味直接拷贝再讲解

文章目录 一、原英文版本&#xff0c;不带注释二、由原版逐字翻译成的中文版&#xff08;行行对应&#xff09;三、最常用的配置 一、原英文版本&#xff0c;不带注释 # Other default tuning values # MySQL Server Instance Configuration File # -------------------------…

Go语言中内存释放 ≠ 资源释放

// QueryUserFileMetas : 批量获取用户文件信息 func QueryUserFileMetas(username string, limit int) ([]UserFile, error) {stmt, err : mydb.DBConn().Prepare("select file_sha1,file_name,file_size,upload_at," "last_update from tbl_user_file where u…

win11+vs2022 安装opencv 4.11.0图解教程

1. 下载opencv opencv官网下载地址&#xff1a;Releases - OpenCV 2. 双击运行该exe&#xff0c;即可进行安装&#xff0c;安装文件夹可自行选择 安装后目录如下&#xff1a; 3. 配置环境变量 使用win键搜索环境变量&#xff0c;选中系统变量中的Path&#xff0c;然后点击编辑…

【Linux】进程 信号的产生

&#x1f33b;个人主页&#xff1a;路飞雪吖~ &#x1f320;专栏&#xff1a;Linux 目录 一、掌握Linux信号的基本概念 &#x1f320;前台进程 VS 后台进程 &#x1f320; 小贴士&#xff1a; &#x1fa84;⼀个系统函数 --- signal() &#x1fa84;查看信号 --- man 7 sign…

Python 网络编程入门

目录 一、前言 二、网络通信基础12&#xff1a;TCP 与 UDP 协议解析 2.1 TCP 协议&#xff1a;可靠的面向连接通信 2.2 UDP 协7议&#xff1a;无连接的快速通信 2.3 Sock12et&#xff1a;网络通信的基石 三、TCP 编程实15战&#xff1a;从单工通信到双向聊天 3.1 TCP 客…

Django压缩包形式下载文件

通过web将minio上的文件以压缩包-文件夹-文件的形式下载到本地 import os from bx_mes import settings from io import BytesIO import zipfile from django.http import StreamingHttpResponse class FileRemote(GenericAPIView):def post(self,request):# 压缩包名folder_n…

Enhancing Relation Extractionvia Supervised Rationale Verifcation and Feedback

Enhancing Relation Extraction via Supervised Rationale Verification and Feedback| Proceedings of the AAAI Conference on Artificial Intelligencehttps://ojs.aaai.org/index.php/AAAI/article/view/34631 1. 概述 关系抽取(RE)任务旨在抽取文本中实体之间的语义关

【RAG】ragflow源码亮点:文档embedding向量化加权融合

引言&#xff1a; 最近在看ragflow源码&#xff0c;其中有一个较为巧妙地设计&#xff1a;分别将 文字 、 标题 行向量化 之后&#xff0c;直接根据权重&#xff0c;进行加法运算&#xff0c;得到向量融合&#xff0c;增强了文本向量化的表示能力&#xff0c;这里开始讨论一下…

限流系列:sentinel

目录 滑动窗口算法 Sentinel 数据模型 示例 大致流程 ​​​​​​​entry ​​​​​​​entryWithPriority ​​​​​​​FlowSlot.entry ​​​​​​​checkFlow ​​​​​​​canPass ​​​​​​​avgUsedTokens ​​​​​​​passQps ​​​​​​​pa…

Java 访问者模式深度重构:从静态类型到动态行为的响应式设计实践

一、访问者模式的本质与核心价值 在软件开发的漫长演进中&#xff0c;设计模式始终是架构师手中的利刃。当我们面对复杂对象结构上的多种操作需求时&#xff0c;访问者模式&#xff08;Visitor Pattern&#xff09;犹如一把精密的手术刀&#xff0c;能够优雅地分离数据结构与作…

UE 5 C++设置物体位置和旋转,初始化虚幻引擎样条线、加载引用虚幻编辑器中的蓝图、设置虚幻编辑器中Actor大小

一、设置物体位置和旋转 UE.cpp文件中代码&#xff1a; Mesh->SetWorldLocationAndRotation(FVector(50.0f, 50.0f, 50.0f),FRotator(0,-90,0)); vs代码编辑器中旋转信息顺序&#xff08;yzx&#xff09;&#xff1a; Pitch、 Yaw、 Roll UE编辑器中旋转信息顺序&#xf…

【文本分类】KG-HTC 知识图谱提升分类准确率

最近看到一篇论文“KG-HTC: Integrating Knowledge Graphs into LLMs for Effective Zero-shot Hierarchical Text Classification”&#xff0c;介绍了文本分类的技巧&#xff0c;这篇文航主要利用了知识图谱大模型的思路&#xff0c;实验效果不错&#xff0c;里面的一些论述也…

三大微调技术对比:Prompt/Prefix/P-Tuning

Prompt Tuning、Prefix Tuning和P - Tuning的区别 概念方面: Prompt Tuning:在输入序列前添加可训练的额外Token以适配下游任务,预训练语言模型参数不变。比如在文本分类中,在句子前加特定Token如“(OPINION)”,让模型理解是对观点进行分类的任务。Prefix Tuning:在每层T…

14.「实用」扣子(coze)教程 | Excel文档自动批量AI文档生成实战,中级开篇

随着AI编程工具及其能力的不断发展&#xff0c;编程将变得越来越简单。 在这个大趋势下&#xff0c;大师兄判断未来的编程将真正成为像office工具一样的办公必备技能。每个人通过 &#xff08;专业知识/资源编程&#xff09;将自己变成一个复合型的人才&#xff0c;大大提高生…

量子-经典协同计算新路径:NISQ 时代混合算法对后量子密码学的适应性探索

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 文丨浪味仙 排版丨浪味仙 行业动向&#xff1a;3700字丨10分钟阅读 5 月 20 日&#xff0c;由北京量子院、清华大学、数学工程与先进计算国家重点实验室、南洋理工大学、量子信息前沿科学中心…

CentOS中安装Docker Compose

在CentOS中安装Docker Compose的步骤如下&#xff1a; 步骤 1&#xff1a;确保Docker已安装 Docker Compose依赖Docker环境&#xff0c;请先安装Docker&#xff1a; # 添加Docker官方仓库 sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://downlo…

电商小程序店铺详情页:头部无限分类与筛选功能实现

电商小程序店铺详情页:头部无限分类与筛选功能实现 一、场景需求与技术选型二、头部无限分类导航三、筛选功能实现:Picker多列选择组件一、场景需求与技术选型 在电商小程序生态中,店铺详情页作为用户浏览商品的核心流量入口,其交互效率与功能完整性直接影响商品转化率。传…

Graph Neural Network(GNN)

我们首先要了解什么是图,图是由节点和边组成的,边的不一样也导致节点的不同(参考化学有机分子中的碳原子) gnn可以处理classification的问题,也就是分类的问题 也可以处理generation的问题 借一部日剧来说明,这个日剧是讲主角寻找杀害他父亲的凶手的,剧中的人物有姓名和特征 …

FallbackHome的启动流程(android11)

首次开机开机动画播完进入Launcher桌面时黑屏进入Launcher,有黑屏不太美观&#xff0c;在重启以后会在进入桌面后会显示android正在启动等一会进入Launcher,这就是系统FallBackHome机制 接下来我们跟着代码看下首次启动系统如何进入FallbackHome的 在SystemServer的startOthe…