UNPKG

test-cloudhub-electron-sdk

Version:

cloudhub-electron-sdk

198 lines (197 loc) 7.85 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); /** *@module BaseEngineController *@description 与C++通讯接口 以及处理接口数据 *@author 党萌 *@date 2020-05-06 * */ const LoggerController_1 = __importDefault(require("../controllers/LoggerController")); const utils_1 = __importDefault(require("../helpers/utils")); const event_1 = require("../helpers/event"); const StreamController_1 = __importDefault(require("../controllers/StreamController")); const RoomController_1 = __importDefault(require("../controllers/RoomController")); const Renderer_1 = require("../Renderer"); const logger = new LoggerController_1.default('CloudHub-baseEngine-log'); const rtcAddon = require('../../addon/Release/rtcaddon'); class BaseEngineController { constructor() { this.engine = new rtcAddon.NodeRtcEngine(); logger.info('rtc-addon', this.engine); } _initialize(appId = '', config = {}) { logger.info('rtc-version:', this._getVersion()); this.engine.initialize(appId, utils_1.default.jsonToStr(config)); //注册render渲染的数据回调 this._registerDeliverFrame((info) => event_1.EventOuter.trigger('register-deliver-frame', info)); //监听底层api回调 event_1.EventOuter.trigger('message-callback', this.engine); } _getVersion() { return this.engine.getVersion(); } _registerDeliverFrame(onCallback) { this.engine.registerDeliverFrame(onCallback); } _setupLocalVideo(view, streamId = "local", type = 'video') { logger.info('_setupLocalVideo', view, streamId, type); if (!view) return false; const myself = RoomController_1.default.getMyself(); const uid = streamId === 'local:test' ? 'myself-device-test' : myself.uid; let stream = StreamController_1.default.getStream(uid, type); if (!stream) { let renderer = new Renderer_1.GlRenderer(); stream = { renderer, streamId }; StreamController_1.default.setStream(uid, type, stream); } if (type !== 'video') { stream.renderer.setContentMode(1); } this._initRender(stream.renderer, view); this.engine.setupLocalVideo(streamId); } _setupRemoteVideo(uid, type, view) { if (!uid) return false; const stream = StreamController_1.default.getStream(uid, utils_1.default.getMediaType(type)); if (stream) { const { renderer } = stream; if (renderer) { try { renderer.unbind(); } catch (e) { console.error(e); } } this._initRender(stream.renderer, view); this.engine.setupRemoteVideo(uid, stream.streamId); } } _removeLocalVideo(streamId = "local", type = 'video') { logger.info('_removeLocalVideo', streamId, type); const myself = RoomController_1.default.getMyself(); const uid = streamId === 'local:test' ? 'myself-device-test' : myself.uid; this._destroyRender(uid, type); this.engine.removeLocalVideo(streamId); } _removeRemoteVideo(uid, type) { if (!uid) return false; type = utils_1.default.getMediaType(type); const stream = StreamController_1.default.getStream(uid, type); if (stream) { this._destroyRender(uid, type); this.engine.removeRemoteVideo(uid, stream.streamId); } } _setLocalVideoMirror(mirror) { const myself = RoomController_1.default.getMyself(); const videoTestStream = StreamController_1.default.getStream('myself-device-test', 'device'); if (videoTestStream) { videoTestStream.renderer.setMirror(mirror); } const stream = StreamController_1.default.getStream(myself.uid, 'video'); if (stream) { stream.renderer.setMirror(mirror); } } _setVideoMode(uid = '', type, mode = 0) { const myself = RoomController_1.default.getMyself(); if (!uid) { uid = myself.uid; } //如果是自己的视频更改显示模式 就查看一下设备检测的视频是否存在 如果存在也一起更改 if ((!uid || uid === myself.uid) && utils_1.default.getMediaType(type) === 'video') { const videoTest = StreamController_1.default.getStream('myself-device-test', 'device'); if (videoTest) { videoTest.renderer.setContentMode(mode); } } const stream = StreamController_1.default.getStream(uid, utils_1.default.getMediaType(type)); if (stream) { stream.renderer.setContentMode(mode); } } _initRender(renderer, view) { logger.info(renderer, view); if (!renderer) { return false; } renderer.bind(view); } _destroyRender(uid = '', type, onFailure) { if (!StreamController_1.default.getStream(uid, type)) { return false; } const { renderer } = StreamController_1.default.getStream(uid, type); try { renderer.unbind(); StreamController_1.default.delStream(uid, type); } catch (e) { onFailure && onFailure(e); } } _startVideoDeviceTest(view, onCallback) { if (!view) { return false; } let videoTest = document.getElementById("cloudhub-video-device-test"); if (!videoTest) { videoTest = document.createElement('div'); videoTest.id = "cloudhub-video-device-test"; videoTest.style.width = "100%"; videoTest.style.height = "100%"; view.appendChild(videoTest); } const streamId = 'local:test'; const type = 'device'; this._setupLocalVideo(videoTest, streamId, type); if (utils_1.default.isFunction(onCallback)) { onCallback(); } } _stopVideoDeviceTest() { const videoTest = document.getElementById("cloudhub-video-device-test"); if (videoTest) { this._removeLocalVideo('local:test', 'device'); const viewParent = videoTest.parentNode; viewParent.removeChild(videoTest); } } _startAudioPlaybackDeviceTest(filepath, options = { loop: false }) { if (!filepath) { return false; } const audioId = 'cloudhub-device-test-speaker'; let audioEle = document.getElementById(audioId); if (!audioEle) { audioEle = document.createElement('audio'); audioEle.id = audioId; audioEle.autoplay = true; audioEle.style.position = 'fixed'; audioEle.style.left = '-100vw'; audioEle.style.top = '-100vh'; document.body.appendChild(audioEle); } // audioEle.controls = true audioEle.loop = options.loop; audioEle.src = filepath; } _stopAudioPlaybackDeviceTest() { const audioId = 'cloudhub-device-test-speaker'; let audioEle = document.getElementById(audioId); if (audioEle) { document.body.removeChild(audioEle); } } _enableAudioVolumeIndication(interval) { this.engine.enableAudioVolumeIndication(interval); } } exports.default = BaseEngineController;