private calculateMediaStreamConstraints()

in src/devicecontroller/DefaultDeviceController.ts [1264:1327]


  private calculateMediaStreamConstraints(
    kind: string,
    deviceId: string,
    groupId: string,
    minimal: boolean
  ): MediaTrackConstraints | boolean {
    // No need for any constraints if we want minimal constraint and there is only one device
    if (minimal && this.listCachedDevicesOfKind(`${kind}input`).length === 1) {
      return true;
    }
    const trackConstraints: MediaTrackConstraints = {};
    // In Samsung Internet browser, navigator.mediaDevices.enumerateDevices()
    // returns same deviceId but different groupdId for some audioinput and videoinput devices.
    // To handle this, we select appropriate device using deviceId + groupId.
    if (this.browserBehavior.requiresNoExactMediaStreamConstraints()) {
      trackConstraints.deviceId = deviceId;
    } else {
      trackConstraints.deviceId = { exact: deviceId };
    }
    if (groupId) {
      trackConstraints.groupId = groupId;
    }

    if (minimal) {
      return trackConstraints;
    }

    // Video additional constraints
    if (kind === 'video') {
      trackConstraints.width = {
        ideal: this.videoInputQualitySettings.videoWidth,
      };
      trackConstraints.height = {
        ideal: this.videoInputQualitySettings.videoHeight,
      };
      trackConstraints.frameRate = {
        ideal: this.videoInputQualitySettings.videoFrameRate,
      };
      return trackConstraints;
    }

    // Audio additional constraints
    if (this.supportSampleRateConstraint()) {
      trackConstraints.sampleRate = { ideal: DefaultDeviceController.defaultSampleRate };
    }
    if (this.supportSampleSizeConstraint()) {
      trackConstraints.sampleSize = { ideal: DefaultDeviceController.defaultSampleSize };
    }
    if (this.supportChannelCountConstraint()) {
      trackConstraints.channelCount = { ideal: DefaultDeviceController.defaultChannelCount };
    }
    const augmented = {
      echoCancellation: true,
      googEchoCancellation: true,
      googEchoCancellation2: true,
      googAutoGainControl: true,
      googAutoGainControl2: true,
      googNoiseSuppression: true,
      googNoiseSuppression2: true,
      googHighpassFilter: true,
      ...trackConstraints,
    };
    return augmented as MediaTrackConstraints;
  }