mirror of https://github.com/OpenVidu/openvidu.git
140 lines
4.7 KiB
JavaScript
140 lines
4.7 KiB
JavaScript
var chromeMediaSource = 'screen';
|
|
var sourceId;
|
|
var screenCallback;
|
|
var isFirefox = typeof window.InstallTrigger !== 'undefined';
|
|
var isOpera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
|
|
var isChrome = !!window.chrome && !isOpera;
|
|
window.addEventListener('message', function (event) {
|
|
if (event.origin != window.location.origin) {
|
|
return;
|
|
}
|
|
onMessageCallback(event.data);
|
|
});
|
|
function onMessageCallback(data) {
|
|
if (data == 'PermissionDeniedError') {
|
|
if (screenCallback)
|
|
return screenCallback('PermissionDeniedError');
|
|
else
|
|
throw new Error('PermissionDeniedError');
|
|
}
|
|
if (data == 'rtcmulticonnection-extension-loaded') {
|
|
chromeMediaSource = 'desktop';
|
|
}
|
|
if (data.sourceId && screenCallback) {
|
|
screenCallback(sourceId = data.sourceId, data.canRequestAudioTrack === true);
|
|
}
|
|
}
|
|
function isChromeExtensionAvailable(callback) {
|
|
if (!callback)
|
|
return;
|
|
if (chromeMediaSource == 'desktop')
|
|
return callback(true);
|
|
window.postMessage('are-you-there', '*');
|
|
setTimeout(function () {
|
|
if (chromeMediaSource == 'screen') {
|
|
callback(false);
|
|
}
|
|
else
|
|
callback(true);
|
|
}, 2000);
|
|
}
|
|
function getSourceId(callback) {
|
|
if (!callback)
|
|
throw '"callback" parameter is mandatory.';
|
|
if (sourceId)
|
|
return callback(sourceId);
|
|
screenCallback = callback;
|
|
window.postMessage('get-sourceId', '*');
|
|
}
|
|
function getCustomSourceId(arr, callback) {
|
|
if (!arr || !arr.forEach)
|
|
throw '"arr" parameter is mandatory and it must be an array.';
|
|
if (!callback)
|
|
throw '"callback" parameter is mandatory.';
|
|
if (sourceId)
|
|
return callback(sourceId);
|
|
screenCallback = callback;
|
|
window.postMessage({
|
|
'get-custom-sourceId': arr
|
|
}, '*');
|
|
}
|
|
function getSourceIdWithAudio(callback) {
|
|
if (!callback)
|
|
throw '"callback" parameter is mandatory.';
|
|
if (sourceId)
|
|
return callback(sourceId);
|
|
screenCallback = callback;
|
|
window.postMessage('audio-plus-tab', '*');
|
|
}
|
|
function getChromeExtensionStatus(extensionid, callback) {
|
|
if (isFirefox)
|
|
return callback('not-chrome');
|
|
if (arguments.length != 2) {
|
|
callback = extensionid;
|
|
extensionid = 'lfcgfepafnobdloecchnfaclibenjold';
|
|
}
|
|
var image = document.createElement('img');
|
|
image.src = 'chrome-extension://' + extensionid + '/icon.png';
|
|
image.onload = function () {
|
|
chromeMediaSource = 'screen';
|
|
window.postMessage('are-you-there', '*');
|
|
setTimeout(function () {
|
|
if (chromeMediaSource == 'screen') {
|
|
callback('installed-disabled');
|
|
}
|
|
else
|
|
callback('installed-enabled');
|
|
}, 2000);
|
|
};
|
|
image.onerror = function () {
|
|
callback('not-installed');
|
|
};
|
|
}
|
|
function getScreenConstraintsWithAudio(callback) {
|
|
getScreenConstraints(callback, true);
|
|
}
|
|
function getScreenConstraints(callback, captureSourceIdWithAudio) {
|
|
sourceId = '';
|
|
var firefoxScreenConstraints = {
|
|
mozMediaSource: 'window',
|
|
mediaSource: 'window'
|
|
};
|
|
if (isFirefox)
|
|
return callback(null, firefoxScreenConstraints);
|
|
var screen_constraints = {
|
|
mandatory: {
|
|
chromeMediaSource: chromeMediaSource,
|
|
maxWidth: screen.width > 1920 ? screen.width : 1920,
|
|
maxHeight: screen.height > 1080 ? screen.height : 1080
|
|
},
|
|
optional: []
|
|
};
|
|
if (chromeMediaSource == 'desktop' && !sourceId) {
|
|
if (captureSourceIdWithAudio) {
|
|
getSourceIdWithAudio(function (sourceId, canRequestAudioTrack) {
|
|
screen_constraints.mandatory.chromeMediaSourceId = sourceId;
|
|
if (canRequestAudioTrack) {
|
|
screen_constraints.canRequestAudioTrack = true;
|
|
}
|
|
callback(sourceId == 'PermissionDeniedError' ? sourceId : null, screen_constraints);
|
|
});
|
|
}
|
|
else {
|
|
getSourceId(function (sourceId) {
|
|
screen_constraints.mandatory.chromeMediaSourceId = sourceId;
|
|
callback(sourceId == 'PermissionDeniedError' ? sourceId : null, screen_constraints);
|
|
});
|
|
}
|
|
return;
|
|
}
|
|
if (chromeMediaSource == 'desktop') {
|
|
screen_constraints.mandatory.chromeMediaSourceId = sourceId;
|
|
}
|
|
callback(null, screen_constraints);
|
|
}
|
|
exports.getScreenConstraints = getScreenConstraints;
|
|
exports.getScreenConstraintsWithAudio = getScreenConstraintsWithAudio;
|
|
exports.isChromeExtensionAvailable = isChromeExtensionAvailable;
|
|
exports.getChromeExtensionStatus = getChromeExtensionStatus;
|
|
exports.getSourceId = getSourceId;
|
|
//# sourceMappingURL=Screen-Capturing.js.map
|