68 lines
2.4 KiB
JavaScript
Executable File
68 lines
2.4 KiB
JavaScript
Executable File
/*
|
|
* Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree.
|
|
*/
|
|
/* eslint-env node */
|
|
'use strict';
|
|
|
|
import * as utils from '../utils';
|
|
|
|
export function shimGetUserMedia(window, browserDetails) {
|
|
const navigator = window && window.navigator;
|
|
const MediaStreamTrack = window && window.MediaStreamTrack;
|
|
|
|
navigator.getUserMedia = function(constraints, onSuccess, onError) {
|
|
// Replace Firefox 44+'s deprecation warning with unprefixed version.
|
|
utils.deprecated('navigator.getUserMedia',
|
|
'navigator.mediaDevices.getUserMedia');
|
|
navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);
|
|
};
|
|
|
|
if (!(browserDetails.version > 55 &&
|
|
'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) {
|
|
const remap = function(obj, a, b) {
|
|
if (a in obj && !(b in obj)) {
|
|
obj[b] = obj[a];
|
|
delete obj[a];
|
|
}
|
|
};
|
|
|
|
const nativeGetUserMedia = navigator.mediaDevices.getUserMedia.
|
|
bind(navigator.mediaDevices);
|
|
navigator.mediaDevices.getUserMedia = function(c) {
|
|
if (typeof c === 'object' && typeof c.audio === 'object') {
|
|
c = JSON.parse(JSON.stringify(c));
|
|
remap(c.audio, 'autoGainControl', 'mozAutoGainControl');
|
|
remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression');
|
|
}
|
|
return nativeGetUserMedia(c);
|
|
};
|
|
|
|
if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) {
|
|
const nativeGetSettings = MediaStreamTrack.prototype.getSettings;
|
|
MediaStreamTrack.prototype.getSettings = function() {
|
|
const obj = nativeGetSettings.apply(this, arguments);
|
|
remap(obj, 'mozAutoGainControl', 'autoGainControl');
|
|
remap(obj, 'mozNoiseSuppression', 'noiseSuppression');
|
|
return obj;
|
|
};
|
|
}
|
|
|
|
if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) {
|
|
const nativeApplyConstraints =
|
|
MediaStreamTrack.prototype.applyConstraints;
|
|
MediaStreamTrack.prototype.applyConstraints = function(c) {
|
|
if (this.kind === 'audio' && typeof c === 'object') {
|
|
c = JSON.parse(JSON.stringify(c));
|
|
remap(c, 'autoGainControl', 'mozAutoGainControl');
|
|
remap(c, 'noiseSuppression', 'mozNoiseSuppression');
|
|
}
|
|
return nativeApplyConstraints.apply(this, [c]);
|
|
};
|
|
}
|
|
}
|
|
}
|