trtc-electron-sdk
Version:
trtc electron sdk
147 lines (146 loc) • 5.46 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const type_1 = require("./type");
const logger_1 = __importDefault(require("../logger"));
/**
* 本地视频渲染控制器
* 负责管理本地视频的自定义渲染状态和回调控制
*/
class LocalVideoRenderController {
constructor(trtcCloud) {
this.logPrefix = '[LocalVideoRenderController]';
this.trtcCloud = trtcCloud;
this.currentState = type_1.LocalVideoRenderCallbackState.NotListening;
this.isExternalRenderEnabled = false;
this.isLocalPreviewStarted = false;
this.hasLocalPreviewView = false;
this.isLocalSharingStarted = false;
this.hasLocalSharingView = false;
this.hasCustomRenderCallback = false;
}
startLocalPreview(views) {
try {
this.isLocalPreviewStarted = true;
this.hasLocalPreviewView = this.validateViews(views);
this.update();
}
catch (error) {
logger_1.default.error(`${this.logPrefix}startLocalPreview failed:`, error);
throw error;
}
}
stopLocalPreview() {
try {
this.isLocalPreviewStarted = false;
this.hasLocalPreviewView = false;
this.update();
}
catch (error) {
logger_1.default.error(`${this.logPrefix}stopLocalPreview failed:`, error);
throw error;
}
}
updateLocalView(views) {
try {
this.hasLocalPreviewView = this.validateViews(views);
this.update();
}
catch (error) {
logger_1.default.error(`${this.logPrefix}updateLocalView failed:`, error);
throw error;
}
}
startScreenCapture(view = null) {
try {
this.isLocalSharingStarted = true;
this.hasLocalSharingView = view !== null && view !== undefined;
this.update();
}
catch (error) {
logger_1.default.error(`${this.logPrefix}startScreenCapture failed:`, error);
throw error;
}
}
stopScreenCapture() {
try {
this.isLocalSharingStarted = false;
this.hasLocalSharingView = false;
this.update();
}
catch (error) {
logger_1.default.error(`${this.logPrefix}stopScreenCapture failed:`, error);
throw error;
}
}
setCustomRenderCallback(hasCallback) {
try {
this.hasCustomRenderCallback = hasCallback;
this.update();
}
catch (error) {
logger_1.default.error(`${this.logPrefix}setCustomRenderCallback failed:`, error);
throw error;
}
}
setExternalRenderEnabled(enabled) {
this.isExternalRenderEnabled = enabled;
}
validateViews(views) {
if (views === null || views === undefined) {
return false;
}
if (Array.isArray(views)) {
return views.length >= 1 && views.every(view => view instanceof HTMLElement);
}
return views instanceof HTMLElement;
}
update() {
try {
const targetState = this.calcTargetState();
if (targetState !== this.currentState) {
if (targetState === type_1.LocalVideoRenderCallbackState.NotListening) {
logger_1.default.log(`${this.logPrefix}update not listening`);
this.trtcCloud.removeLocalVideoRenderCallback();
}
else {
logger_1.default.log(`${this.logPrefix}update listening`);
this.trtcCloud.addLocalVideoRenderCallback();
}
this.currentState = targetState;
}
}
catch (error) {
logger_1.default.error(`${this.logPrefix}update failed:`, error);
// 在错误情况下保持当前状态不变,避免状态不一致
}
}
/**
* 计算目标渲染状态
* 根据当前条件判断是否需要监听视频渲染回调
* @returns 目标渲染状态
*/
calcTargetState() {
// 外部渲染已启用,需要监听回调
if (this.isExternalRenderEnabled) {
return type_1.LocalVideoRenderCallbackState.Listening;
}
// 本地预览已启动且有预览视图,需要监听回调
if (this.isLocalPreviewStarted && this.hasLocalPreviewView) {
return type_1.LocalVideoRenderCallbackState.Listening;
}
// 本地预览已启动且有自定义渲染回调,需要监听回调
if (this.isLocalPreviewStarted && this.hasCustomRenderCallback) {
return type_1.LocalVideoRenderCallbackState.Listening;
}
// 屏幕共享已启动且有共享视图,需要监听回调
if (this.isLocalSharingStarted && this.hasLocalSharingView) {
return type_1.LocalVideoRenderCallbackState.Listening;
}
// 默认不监听回调
return type_1.LocalVideoRenderCallbackState.NotListening;
}
}
exports.default = LocalVideoRenderController;