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;
}