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.

FeatureFlags.js 3.0KB

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