当前位置: 首页 > article >正文

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

萤石云视频接入

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

实际优化内容

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.lryc.cn/news/2387126.html

相关文章:

  • QT中常用的类
  • Docker系列(四):容器操作全栈技术指南 --- 从入门到生产级管控
  • poppler_path 是用于 Python 库如 pdf2image 进行 PDF 转换时
  • 鸿蒙OSUniApp 开发的多图浏览器组件#三方框架 #Uniapp
  • MongoDB 错误处理与调试完全指南:从入门到精通
  • React从基础入门到高级实战:React 核心技术 - 表单处理与验证深度指南
  • 【C++】stack,queue和priority_queue(优先级队列)
  • ubuntu中上传项目至GitHub仓库教程
  • [Java实战]Spring Boot整合达梦数据库连接池配置(三十四)
  • windows 下用yolov5 训练模型 给到opencv 使用
  • Spark集群架构解析:核心组件与Standalone、YARN模式深度对比(AM,Container,Driver,Executor)
  • Linux Kernel调试:强大的printk(二)
  • Kafka Kraft模式集群 + ssl
  • [crxjs]自己创建一个浏览器插件
  • 类的设计模式——单例、工厂以及建造者模式
  • STM32之看门狗(IWDG)
  • PyTorch实现MLP信用评分模型全流程
  • 语音识别——文本转语音
  • 跟着华为去变革 ——读《常变与长青》有感
  • 图像分割技术的实现与比较分析
  • node.js配置变量
  • Ubuntu+Docker+内网穿透:保姆级教程实现安卓开发环境远程部署
  • 为什么需要清除浮动?清除浮动的方式有哪些?
  • 计算机网络学习20250526
  • ArkUI:鸿蒙应用响应式与组件化开发指南(一)
  • YOLOv11改进 | Neck篇 | 双向特征金字塔网络BiFPN助力YOLOv11有效涨点
  • C/C++的OpenCV 进行轮廓提取
  • 计算机网络总结(物理层,链路层)
  • TIGER - 一个轻量高效的语音分离模型,支持人声伴奏分离、音频说话人分离等 支持50系显卡 本地一键整合包下载
  • yolov8,c++案例汇总