UNPKG

trtc-electron-sdk

Version:

trtc electron sdk

147 lines (146 loc) 5.46 kB
"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;