You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

LiteModeContext.js 1.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /* global TransformStream */
  2. import { getLogger } from '@jitsi/logger';
  3. import RTCEvents from '../../service/RTC/RTCEvents';
  4. import FeatureFlags from '../flags/FeatureFlags';
  5. // Flag to set on receivers to avoid setting up the lite mode
  6. // more than once.
  7. const kJitsiLiteMode = Symbol('kJitsiLiteMode');
  8. const logger = getLogger(__filename);
  9. /**
  10. * This module implements a discard-all insertable stream. Use to reduce decoder CPU load for testing.
  11. */
  12. export class LiteModeContext {
  13. /**
  14. * A constructor.
  15. * @param {JitsiConference} conference - The conference instance for which lite mode is to be enabled.
  16. */
  17. constructor(conference) {
  18. this.enabled = FeatureFlags.isRunInLiteModeEnabled();
  19. if (!this.enabled) {
  20. return;
  21. }
  22. conference.rtc.on(
  23. RTCEvents.REMOTE_TRACK_ADDED,
  24. (track, tpc) => this._setupLiteModeForTrack(tpc, track));
  25. }
  26. /**
  27. * Setup Lite Mode for a track.
  28. *
  29. * @private
  30. */
  31. _setupLiteModeForTrack(tpc, track) {
  32. if (!this.enabled) {
  33. return;
  34. }
  35. const receiver = tpc.findReceiverForTrack(track.track);
  36. if (!receiver) {
  37. logger.warn(`Could not set up lite mode for ${track}: receiver not found in: ${tpc}`);
  38. return;
  39. }
  40. if (receiver[kJitsiLiteMode]) {
  41. return;
  42. }
  43. receiver[kJitsiLiteMode] = true;
  44. const receiverStreams = receiver.createEncodedStreams();
  45. const transformStream = new TransformStream({
  46. transform: () => {
  47. // Don't call controller.enqueue(encodedFrame), and so drop everything
  48. }
  49. });
  50. receiverStreams.readable.pipeThrough(transformStream).pipeTo(receiverStreams.writable);
  51. }
  52. }