ov-components: Refactors Firefox background processor handling

Simplifies the logic for attaching and detaching the background processor in Firefox.

Ensures the processor is stopped when background effects are disabled, optimizing performance.
master
CSantosM 2026-01-22 19:35:22 +01:00
parent 465403f8cb
commit 6cfa44c4f1
1 changed files with 26 additions and 10 deletions

View File

@ -286,21 +286,37 @@ export class OpenViduService {
*/
async switchBackgroundMode(options: SwitchBackgroundProcessorOptions): Promise<void> {
// For Firefox, attach processor only when an effect is activated
if (this.platformService.isFirefox() && options.mode !== 'disabled') {
const videoTrack = await this.getVideoTrack();
if (videoTrack) {
const hasProcessor = videoTrack.getProcessor();
if (!hasProcessor) {
this.log.d('Firefox: Attaching processor on effect activation');
await videoTrack.setProcessor(this.backgroundProcessor);
}
}
if (this.platformService.isFirefox()) {
await this.handleFirefoxProcessor(options.mode);
}
await this.backgroundProcessor.switchTo(options);
this.log.d('Background mode switched:', options);
}
/**
* Applies the background processor handling for Firefox browser.
* @internal
*/
private async handleFirefoxProcessor(mode: SwitchBackgroundProcessorOptions['mode']): Promise<void> {
const videoTrack = await this.getVideoTrack();
if (!videoTrack) return;
const hasProcessor = Boolean(videoTrack.getProcessor());
const isDisabled = mode === 'disabled';
if (!isDisabled && !hasProcessor) {
this.log.d('Firefox: Attaching processor on effect activation');
await videoTrack.setProcessor(this.backgroundProcessor);
return;
}
if (isDisabled && hasProcessor) {
this.log.d('Firefox: Stopping processor on effect deactivation');
await videoTrack.stopProcessor();
}
}
/**
* @internal
**/
@ -377,7 +393,7 @@ export class OpenViduService {
// For Firefox: skip processor attachment to avoid performance issues (applied only when effect is activated)
// For other browsers: attach processor for smooth transitions
const videoTrack = newLocalTracks.find((t) => t.kind === Track.Kind.Video) as LocalVideoTrack | undefined;
debugger
debugger;
if (videoTrack && !this.platformService.isFirefox()) {
await videoTrack.setProcessor(this.backgroundProcessor);
this.log.d('Background processor applied to newly created video track');