51 lines
1.7 KiB
JavaScript
51 lines
1.7 KiB
JavaScript
|
/*
|
||
|
* Copyright (c) 2018 The adapter.js 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';
|
||
|
export function shimGetDisplayMedia(window, getSourceId) {
|
||
|
if (window.navigator.mediaDevices &&
|
||
|
'getDisplayMedia' in window.navigator.mediaDevices) {
|
||
|
return;
|
||
|
}
|
||
|
if (!(window.navigator.mediaDevices)) {
|
||
|
return;
|
||
|
}
|
||
|
// getSourceId is a function that returns a promise resolving with
|
||
|
// the sourceId of the screen/window/tab to be shared.
|
||
|
if (typeof getSourceId !== 'function') {
|
||
|
console.error('shimGetDisplayMedia: getSourceId argument is not ' +
|
||
|
'a function');
|
||
|
return;
|
||
|
}
|
||
|
window.navigator.mediaDevices.getDisplayMedia =
|
||
|
function getDisplayMedia(constraints) {
|
||
|
return getSourceId(constraints)
|
||
|
.then(sourceId => {
|
||
|
const widthSpecified = constraints.video && constraints.video.width;
|
||
|
const heightSpecified = constraints.video &&
|
||
|
constraints.video.height;
|
||
|
const frameRateSpecified = constraints.video &&
|
||
|
constraints.video.frameRate;
|
||
|
constraints.video = {
|
||
|
mandatory: {
|
||
|
chromeMediaSource: 'desktop',
|
||
|
chromeMediaSourceId: sourceId,
|
||
|
maxFrameRate: frameRateSpecified || 3
|
||
|
}
|
||
|
};
|
||
|
if (widthSpecified) {
|
||
|
constraints.video.mandatory.maxWidth = widthSpecified;
|
||
|
}
|
||
|
if (heightSpecified) {
|
||
|
constraints.video.mandatory.maxHeight = heightSpecified;
|
||
|
}
|
||
|
return window.navigator.mediaDevices.getUserMedia(constraints);
|
||
|
});
|
||
|
};
|
||
|
}
|