65 lines
4.0 KiB
JavaScript
65 lines
4.0 KiB
JavaScript
|
/*
|
||
|
* 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';
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
exports.shimGetUserMedia = shimGetUserMedia;
|
||
|
var utils = _interopRequireWildcard(require("../utils"));
|
||
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
||
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
||
|
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
||
|
function shimGetUserMedia(window, browserDetails) {
|
||
|
var navigator = window && window.navigator;
|
||
|
var 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())) {
|
||
|
var remap = function remap(obj, a, b) {
|
||
|
if (a in obj && !(b in obj)) {
|
||
|
obj[b] = obj[a];
|
||
|
delete obj[a];
|
||
|
}
|
||
|
};
|
||
|
var 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) {
|
||
|
var nativeGetSettings = MediaStreamTrack.prototype.getSettings;
|
||
|
MediaStreamTrack.prototype.getSettings = function () {
|
||
|
var obj = nativeGetSettings.apply(this, arguments);
|
||
|
remap(obj, 'mozAutoGainControl', 'autoGainControl');
|
||
|
remap(obj, 'mozNoiseSuppression', 'noiseSuppression');
|
||
|
return obj;
|
||
|
};
|
||
|
}
|
||
|
if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) {
|
||
|
var 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]);
|
||
|
};
|
||
|
}
|
||
|
}
|
||
|
}
|