Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

LiteModeContext.ts 2.1KB

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