/** * SOS SDK uniapp包装器 * 专门为uniapp环境设计的SOS SDK包装器,解决DOM兼容性问题 */ // 首先加载DOM polyfill require('./dom-polyfill.js') // 修复tmedia_api_add_js_scripts未定义的问题 if (typeof window.tmedia_api_add_js_scripts === 'undefined') { window.tmedia_api_add_js_scripts = function(position, ...scriptPaths) { console.log('tmedia_api_add_js_scripts called:', position, scriptPaths); return true; }; } // 确保其他必要的全局变量存在 if (typeof window.__b_release_mode === 'undefined') { window.__b_release_mode = true; } // 确保URL对象存在 if (typeof window.URL === 'undefined') { window.URL = window.URL || window.webkitURL || {}; } // 确保performance对象存在 if (typeof window.performance === 'undefined') { window.performance = window.performance || {}; window.performance.now = window.performance.now || (function() { var start = Date.now(); return function() { return Date.now() - start; }; })(); } // 加载SOS库 require('./sos-v1.0.17.js'); // 等待SOS库加载完成 setTimeout(() => { if (typeof window.SOS !== 'undefined' && typeof window.SOS.SDK === 'function') { console.log('SOS.SDK loaded successfully in uniapp environment'); } else { console.error('SOS.SDK not found'); } }, 100); /** * uniapp环境下的SOS SDK包装类 * 提供uniapp兼容的接口 */ class SOSUniAppWrapper { constructor(config = {}) { if (typeof window.SOS === 'undefined' || typeof window.SOS.SDK !== 'function') { throw new Error('SOS.SDK is not available. Please ensure sos-v1.0.17.js is loaded correctly.'); } // 为uniapp环境创建必要的DOM元素 this.createRequiredElements(); // 创建SDK实例 this.sdk = new window.SOS.SDK(config); this.isInitialized = false; this.eventListeners = new Map(); } /** * 创建SOS SDK需要的DOM元素 */ createRequiredElements() { // 创建音频元素 const audioElement = document.createElement('audio'); audioElement.id = 'sos-audio-element'; audioElement.style.display = 'none'; document.body.appendChild(audioElement); // 创建视频元素 const videoElement = document.createElement('video'); videoElement.id = 'sos-video-element'; videoElement.style.display = 'none'; document.body.appendChild(videoElement); // 创建canvas元素 const canvasElement = document.createElement('canvas'); canvasElement.id = 'sos-canvas-element'; canvasElement.style.display = 'none'; document.body.appendChild(canvasElement); } /** * 初始化SDK */ init() { return new Promise((resolve, reject) => { try { this.sdk.init(); this.isInitialized = true; resolve(); } catch (error) { reject(error); } }); } /** * 销毁SDK */ destroy() { if (this.sdk && this.isInitialized) { this.sdk.destroy(); this.isInitialized = false; } // 清理事件监听器 this.eventListeners.clear(); } /** * 添加事件监听器 */ addEventListener(event, callback) { if (this.sdk) { this.sdk.addEventListener(event, callback); // 保存事件监听器以便后续清理 if (!this.eventListeners.has(event)) { this.eventListeners.set(event, []); } this.eventListeners.get(event).push(callback); } } /** * 移除事件监听器 */ removeEventListener(event) { if (this.sdk) { this.sdk.removeEventListener(event); this.eventListeners.delete(event); } } /** * 获取设备列表 */ deviceList(callback) { if (this.sdk) { return this.sdk.deviceList(callback); } } /** * 开始音频对讲 */ audioSpeakStart(deviceId, callback) { if (this.sdk) { // 在uniapp中,可能需要特殊处理音频元素 const audioElement = document.getElementById('sos-audio-element'); if (audioElement) { // 设置音频元素属性 audioElement.setAttribute('autoplay', 'true'); audioElement.setAttribute('playsinline', 'true'); } return this.sdk.audioSpeakStart(deviceId, callback); } } /** * 停止音频对讲 */ audioSpeakStop(deviceId, callback) { if (this.sdk) { return this.sdk.audioSpeakStop(deviceId, callback); } } /** * 开始音频监听 */ audioListenStart(deviceId, callback) { if (this.sdk) { const audioElement = document.getElementById('sos-audio-element'); if (audioElement) { audioElement.setAttribute('autoplay', 'true'); audioElement.setAttribute('playsinline', 'true'); } return this.sdk.audioListenStart(deviceId, callback); } } /** * 停止音频监听 */ audioListenStop(deviceId, callback) { if (this.sdk) { return this.sdk.audioListenStop(deviceId, callback); } } /** * 开始视频监控 */ videoMonitorStart(deviceId, callback) { if (this.sdk) { const videoElement = document.getElementById('sos-video-element'); if (videoElement) { videoElement.setAttribute('autoplay', 'true'); videoElement.setAttribute('playsinline', 'true'); videoElement.setAttribute('muted', 'true'); } return this.sdk.videoMonitorStart(deviceId, callback); } } /** * 停止视频监控 */ videoMonitorStop(deviceId, callback) { if (this.sdk) { return this.sdk.videoMonitorStop(deviceId, callback); } } /** * 开始录音 */ audioRecordStart(deviceId, callback) { if (this.sdk) { return this.sdk.audioRecordStart(deviceId, callback); } } /** * 停止录音 */ audioRecordStop(callback) { if (this.sdk) { return this.sdk.audioRecordStop(callback); } } /** * 开始录像 */ videoRecordStart(deviceId, callback) { if (this.sdk) { return this.sdk.videoRecordStart(deviceId, callback); } } /** * 停止录像 */ videoRecordStop(deviceId, callback) { if (this.sdk) { return this.sdk.videoRecordStop(deviceId, callback); } } /** * 获取版本信息 */ version() { if (this.sdk) { return this.sdk.version(); } } /** * 检查是否为测试模式 */ isTest() { if (this.sdk) { return this.sdk.isTest(); } return false; } /** * 获取设备基础信息 */ deviceBaseInfoGet(deviceId, callback) { if (this.sdk) { return this.sdk.deviceBaseInfoGet(deviceId, callback); } } /** * 修改设备基础信息 */ deviceBaseInfoMod(deviceId, data, callback) { if (this.sdk) { return this.sdk.deviceBaseInfoMod(deviceId, data, callback); } } /** * 获取设备告警记录 */ deviceAlarmRecordList(deviceId, callback) { if (this.sdk) { return this.sdk.deviceAlarmRecordList(deviceId, callback); } } /** * 处理设备告警 */ deviceAlarmDone(deviceId, callback) { if (this.sdk) { return this.sdk.deviceAlarmDone(deviceId, callback); } } /** * 接受设备告警 */ deviceAlarmAccept(deviceId, callback) { if (this.sdk) { return this.sdk.deviceAlarmAccept(deviceId, callback); } } /** * 获取设备音量 */ deviceVolumeGet(deviceId, callback) { if (this.sdk) { return this.sdk.deviceVolumeGet(deviceId, callback); } } /** * 设置设备音量 */ deviceVolumeSet(deviceId, volume, callback) { if (this.sdk) { return this.sdk.deviceVolumeSet(deviceId, volume, callback); } } /** * 开始多播 */ microphoneMutilBoradcastStart(deviceIds, callback) { if (this.sdk) { return this.sdk.microphoneMutilBoradcastStart(deviceIds, callback); } } /** * 停止多播 */ microphoneMutilBoradcastStop(deviceIds, callback) { if (this.sdk) { return this.sdk.microphoneMutilBoradcastStop(deviceIds, callback); } } /** * 获取功能权限 */ getFeaturePermission(callback) { if (this.sdk) { return this.sdk.getFeaturePermission(callback); } } } // 导出SOS SDK module.exports = { SDK: SOSUniAppWrapper, // 也可以直接导出原始的SOS.SDK OriginalSDK: typeof window.SOS !== 'undefined' ? window.SOS.SDK : null, // 导出SOS对象 SOS: typeof window.SOS !== 'undefined' ? window.SOS : null }; console.log('SOS uniapp wrapper loaded successfully');