预检清单
- 我已阅读了此项目的 Contributing Guidelines。
- 我同意遵循此项目遵循的 Code of Conduct。
- 我在 issue tracker 中搜索了一个与我想要提交的 bug 报告相匹配的 bug,但没有成功。
Electron 版本
25.1.0
您正在使用的操作系统是什么?
macOS
您正在使用的操作系统版本是什么?
macOS 14.0 beta(在 13.4 中也可以重现)
您正在使用的架构是什么?
x64
最后已知的工作 Electron 版本
N/A
预期行为
我编写了一个函数,将整个桌面记录在一个 render.ts 文件中,该文件加载在一个窗口中。
此函数具有 chromeMediaSource 参数(不包括 chromeMediaSourceId)。
这可以正常工作并记录屏幕。所有屏幕都应该被记录。
实际行为
在 macOS 上,当主屏幕在右侧,第二屏幕在左侧时,某些第二屏幕的某些区域无法正确记录,主屏幕也无法正确记录(将屏幕上的应用程序移动以查看此现象)。如果使用 sidecar 通过 iPad 连接,iPad 屏幕将永远不会被记录。
这个问题在 Windows 上无法重现,并且在约束 chromeMediaSourceId 时记录工作正常。
主屏幕:1920 x 1080
第二屏幕:2560 x 1440
测试用例 Gist URL
- 无响应*
其他信息
所有功能都在 html 代码中:
`
<head>
<meta charset="utf-8">
<title>apegv2-browser-welcome</title>
</head>
<body>
<script type="text/javascript">
var lastScreenStream = null;
openScreen = async () => {
try {
if (lastScreenStream) {
return;
}
lastScreenStream = lastScreenStream = await navigator.mediaDevices.getUserMedia({
video: {
mandatory: {
chromeMediaSource: 'desktop',
maxFrameRate: 10,
},
}
});
const screen = document.getElementById('screen');
let screenElement = null;
if (screen && screen instanceof HTMLVideoElement) {
screenElement = screen;
screenElement.srcObject = lastScreenStream;
screenElement.width = 1920;
screenElement.height = 1080;
}
} catch (e) {
closeScreen();
}
}
closeScreen = async () => {
try {
if (lastScreenStream) {
lastScreenStream.getTracks().forEach(track => track.stop());
lastScreenStream = null;
const screen = document.getElementById('screen');
let screenElement = null;
if (screen && screen instanceof HTMLVideoElement) {
screen.srcObject = null;
screen = null;
}
}
} catch (e) {
}
}
</script>
<button type="button" onclick="openScreen()">open screen sharing</button>
<button type="button" onclick="closeScreen()">close screen sharing</button>
<div>
<video id="screen" autoPlay muted playsInline />
</div>
</body>
`
9条答案
按热度按时间5cnsuln71#
你好,@chinaofmelon。感谢你报告这个问题并帮助让Electron变得更好!
是否有可能为你制作一个独立的测试用例,只包含重现问题的必要代码?例如,Electron Fiddle是一个制作小型测试用例的很好工具,它可以轻松地将你的测试用例发布到一个gist中,Electron维护者可以使用。
独立的测试用例可以让修复问题更加顺利:它确保每个人都在查看同一个问题,它从方程中删除了所有不必要的变量,而且它还可以为自动化回归测试提供基础。
现在为了这个原因添加了
blocked/need-repro
标签。在你制作了一个测试用例后,请在后续评论中链接到它。如果上述内容没有得到解决,这个问题将在10天内关闭。ckx4rj1h2#
gist test link: https://gist.github.com/8fccd24ca5a38415873ac8b4a504ce0b
wgeznvg73#
有任何更新吗?
mpbci0fu4#
此外,在没有chromeMediaSourceId约束的情况下,我只能录制主屏幕(将两个屏幕连接到Macbook)。这个问题发生在2022年MacBook Air M2(14.0 beta)上。
u0sqgete5#
我正在使用MacOS 14.0 (23A344)和electron 27.0.0遇到相同的问题。从
desktopCapturer.getSources
传递到chromeMediaSourceId
的screen:1:0
screen:2:0
会导致Uncaught DOMException: Could not start video source
错误。除了electron窗口本身之外,使用任何其他窗口都会抛出相同的错误。如果不向GUM传递任何
chomeMediaSourceId
,Electron应用程序窗口本身会返回一个有效的流,主显示流也是可见的。请electron团队关注这个问题,因为Sonoma的大规模采用将会跟进。如果我得到这样的关注,我很愿意合作。
wyyhbhjk6#
这个问题已经被自动标记为过时。如果这个问题仍然影响到你,请留下任何评论(例如“提升”),我们会保持开放。如果你有任何新的附加信息——特别是,如果这个问题在 latest version of Electron 或 beta 中仍然可复现——请在你的评论中包含它!
eivgtgni7#
同样的问题,Electron 28.1.4
chromeMediaSource: 'desktop'
"可以工作",但它只显示桌面背景和我的应用程序窗口的冻结图片,但屏幕上没有其他窗口(甚至菜单项),好像需要一些权限才能“看到”其他窗口??视频流中只有光标在移动,但其他所有东西都似乎被冻结了设置
chromeMediaSourceId: 'screen:1:0'
(来自desktopCapturer.getSources
)导致DOMException: Could not start video source
mgdq6dx18#
这个问题的翻译是:同样的问题,只要'chromeMediaSourceId'存在,就会得到一个错误:'DOMException: 无法启动视频源'。
dxxyhpgq9#
这个问题已经被自动标记为过时。如果这个问题仍然影响到你,请留下任何评论(例如“提升”),我们会保持开放。如果你有任何新的附加信息——特别是,如果这个问题在 latest version of Electron 或 beta 中仍然可重现——请在你的评论中包含它!