我实施了Chrome扩展程序,使用chrome.desktopCapture.chooseDesktopMedia
来检索屏幕ID。
这是我的后台脚本:
chrome.runtime.onConnect.addListener(function (port) {
port.onMessage.addListener(messageHandler);
// listen to "content-script.js"
function messageHandler(message) {
if(message == 'get-screen-id') {
chrome.desktopCapture.chooseDesktopMedia(['screen', 'window'], port.sender.tab, onUserAction);
}
}
function onUserAction(sourceId) {
//Access denied
if(!sourceId || !sourceId.length) {
return port.postMessage('permission-denie');
}
port.postMessage({
sourceId: sourceId
});
}
});
我需要获得共享的显示器信息(分辨率,横向或纵向)。
我的问题是:如果客户使用多台显示器,我如何确定他选择的显示器?
我可以添加例如" system.display"我的扩展程序的权限,并从"chrome.system.display.getInfo"
获取监控信息?
答案 0 :(得分:1)
你是对的。您可以添加system.display许可和呼叫chrome.system.display.getDisplayLayout(callbackFuncion(DisplayLayout))和处理DisplayLayout.position回调获得的布局和chrome.system.display.getInfo处理displayInfo的阵列在回调中。你应该寻找' isPrimary'值
答案 1 :(得分:1)
这是一个古老的问题,但是由于遇到了同样的信息,所以我碰到了这个问题,我终于设法弄清楚了如何识别用户选择哪个监视器在Chrome中进行屏幕共享。
首先:此信息不会来自您可能在Chrome中用于屏幕共享的扩展程序,因为:
chrome.desktopCapture.chooseDesktopMedia
API回调仅返回一个sourceId
,这是一个表示流ID的字符串,然后可以用来调用getMediaSource
API来构建媒体流。 chrome.system.display.getInfo
将为您提供显示列表,是的,但是从该信息中您无法确定正在共享哪个显示,并且无法将sourceId
与任何显示进行匹配每次显示返回的字段数。所以... 我找到的解决方案来自MediaStream
对象本身。获得流之后,在调用getMediaSource
之后,您需要获取视频轨道,然后在其中找到一个名为“标签”的属性。该标签使您可以了解用户选择了哪个屏幕。
您可以通过以下方式获得视频轨道:
const videoTrack = mediaStream.getVideoTracks()[0];
(在此处检查getVideoTracks
API:https://developer.mozilla.org/en-US/docs/Web/API/MediaStream/getVideoTracks)。
如果您打印该对象,则将看到“标签”字段。在Chrome中,屏幕1显示为“ 0:0”,而屏幕2显示为“ 1:0”,并且我假设屏幕i将为“ i-1:0”(我只测试了2个屏幕)。 这是在控制台中打印的该对象的捕获:
不仅适用于Chrome,而且适用于其他实现该功能的浏览器!在Firefox中,它们显示为“屏幕i”:
此外,如果您检查Chrome浏览器chrome://webrtc-internals
,则会看到它们在addStream
事件中显示的内容:
就是这样!这不是理想的,因为它是标签,而不是真实的屏幕标识符,但是可以使用。识别完屏幕后,您就可以在Chrome中使用chrome.system.display.getInfo
来获取该显示的信息。