test-cloudhub-electron-sdk
Version:
cloudhub-electron-sdk
198 lines (197 loc) • 7.85 kB
JavaScript
;
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;