Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import { getLogger } from '@jitsi/logger';
  2. import browser from '../browser';
  3. const logger = getLogger('FeatureFlags');
  4. /**
  5. * A global module for accessing information about different feature flags state.
  6. */
  7. class FeatureFlags {
  8. /**
  9. * Configures the module.
  10. *
  11. * @param {boolean} flags.runInLiteMode - Enables lite mode for testing to disable media decoding.
  12. * @param {boolean} flags.receiveMultipleVideoStreams - Signal support for receiving multiple video streams.
  13. * @param {boolean} flags.sendMultipleVideoStreams - Signal support for sending multiple video streams.
  14. * @param {boolean} flags.sourceNameSignaling - Enables source names in the signaling.
  15. * @param {boolean} flags.ssrcRewritingEnabled - Use SSRC rewriting. Requires sourceNameSignaling to be enabled.
  16. * @param {boolean} flags.enableUnifiedOnChrome - Use unified plan signaling on chrome browsers.
  17. */
  18. init(flags) {
  19. this._runInLiteMode = Boolean(flags.runInLiteMode);
  20. this._receiveMultipleVideoStreams = flags.receiveMultipleVideoStreams ?? true;
  21. this._sendMultipleVideoStreams = flags.sendMultipleVideoStreams ?? true;
  22. this._sourceNameSignaling = flags.sourceNameSignaling ?? true;
  23. this._ssrcRewriting = this._sourceNameSignaling && Boolean(flags.ssrcRewritingEnabled);
  24. // For Chromium, check if Unified plan is enabled.
  25. this._usesUnifiedPlan = browser.supportsUnifiedPlan()
  26. && (!browser.isChromiumBased() || (flags.enableUnifiedOnChrome ?? true));
  27. logger.info(`Send multiple video streams: ${this._sendMultipleVideoStreams},`
  28. + ` Source name signaling: ${this._sourceNameSignaling},`
  29. + ` Unified plan: ${this._usesUnifiedPlan}`);
  30. }
  31. /**
  32. * Checks if multiple local video streams support is enabled.
  33. *
  34. * @returns {boolean}
  35. */
  36. isMultiStreamSupportEnabled() {
  37. return this._sourceNameSignaling && this._sendMultipleVideoStreams && this._usesUnifiedPlan;
  38. }
  39. /**
  40. * Checks if receiving multiple video streams is supported.
  41. *
  42. * @returns {boolean}
  43. */
  44. isReceiveMultipleVideoStreamsSupported() {
  45. return this._receiveMultipleVideoStreams;
  46. }
  47. /**
  48. * Checks if the run in lite mode is enabled.
  49. * This will cause any media to be received and not decoded. (Directions are inactive and no ssrc and ssrc-groups
  50. * are added to the remote description). This can be used for various test scenarios.
  51. *
  52. * @returns {boolean}
  53. */
  54. isRunInLiteModeEnabled() {
  55. return this._runInLiteMode;
  56. }
  57. /**
  58. * Checks if the source name signaling is enabled.
  59. *
  60. * @returns {boolean}
  61. */
  62. isSourceNameSignalingEnabled() {
  63. return this._sourceNameSignaling;
  64. }
  65. /**
  66. * Checks if the clients supports re-writing of the SSRCs on the media streams by the bridge.
  67. * @returns {boolean}
  68. */
  69. isSsrcRewritingSupported() {
  70. return this._ssrcRewriting;
  71. }
  72. }
  73. export default new FeatureFlags();