1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- /* global TransformStream */
- import { getLogger } from '@jitsi/logger';
-
- import RTCEvents from '../../service/RTC/RTCEvents';
- import FeatureFlags from '../flags/FeatureFlags';
-
- // Flag to set on receivers to avoid setting up the lite mode
- // more than once.
- const kJitsiLiteMode = Symbol('kJitsiLiteMode');
-
- const logger = getLogger(__filename);
-
- /**
- * This module implements a discard-all insertable stream. Use to reduce decoder CPU load for testing.
- */
- export class LiteModeContext {
- /**
- * A constructor.
- * @param {JitsiConference} conference - The conference instance for which lite mode is to be enabled.
- */
- constructor(conference) {
- this.enabled = FeatureFlags.isRunInLiteModeEnabled();
- if (!this.enabled) {
- return;
- }
-
- conference.rtc.on(
- RTCEvents.REMOTE_TRACK_ADDED,
- (track, tpc) => this._setupLiteModeForTrack(tpc, track));
- }
-
- /**
- * Setup Lite Mode for a track.
- *
- * @private
- */
- _setupLiteModeForTrack(tpc, track) {
- if (!this.enabled) {
- return;
- }
-
- const receiver = tpc.findReceiverForTrack(track.track);
-
- if (!receiver) {
- logger.warn(`Could not set up lite mode for ${track}: receiver not found in: ${tpc}`);
-
- return;
- }
-
- if (receiver[kJitsiLiteMode]) {
- return;
- }
- receiver[kJitsiLiteMode] = true;
-
- const receiverStreams = receiver.createEncodedStreams();
-
- const transformStream = new TransformStream({
- transform: () => {
- // Don't call controller.enqueue(encodedFrame), and so drop everything
- }
- });
-
- receiverStreams.readable.pipeThrough(transformStream).pipeTo(receiverStreams.writable);
- }
- }
|