是否可以使用 getDisplayMedia() 禁用记录光标

Car*_*ler 6 javascript webrtc getusermedia web-mediarecorder

我正在使用 MediaStream 和 MediaRecorder 录制浏览器窗口。

\n

但需要禁用鼠标光标被记录,所以当我创建视频轨道时,我使用以下代码:

\n
stream[\'input\'] = await navigator.mediaDevices.getDisplayMedia({\n    audio: true,\n    video: {\n    cursor: \'never\',\n    frameRate: 40,\n}\n});\nconsole.log( stream[\'input\'].getVideoTracks()[0].getSettings() );\n
Run Code Online (Sandbox Code Playgroud)\n

但是 chrome、opera 和 Edge 控制台显示:

\n
aspectRatio: 1.7777777777777777\ncursor: "motion"\ndeviceId: "window:200730:1"\ndisplaySurface: "window"\nframeRate: 40\nheight: 1080\nlogicalSurface: true\nresizeMode: "crop-and-scale"\nwidth: 1920\n
Run Code Online (Sandbox Code Playgroud)\n

但似乎忽略了该设置,因此光标正在被记录。

\n

我可以看到我的控制台中正在设置帧速率约束,但是我似乎无法禁用光标。

\n

然而,Firefox 不会记录光标并在控制台中显示它

\n
frameRate: 40\n\xe2\x80\x8bheight: 924\n\xe2\x80\x8bwidth: 1263\n
Run Code Online (Sandbox Code Playgroud)\n

有没有人成功地用 Chrome、Edge 和 Opera 完全禁用光标?

\n

我什至尝试过使用

\n
stream[\'input\'].getVideoTracks()[0].applyConstraints( { \nvideo: { cursor: \'never\', frameRate: 30 } \n} );\n
Run Code Online (Sandbox Code Playgroud)\n

这不起作用:-(

\n

更新:\n我可以从这里的图表中看到:\n https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints

\n

游标约束应该只在 Opera 上受支持。然而 getSupportedConstraints() 的输出显示游标毕竟不受支持。

\n

谢谢

\n

O. *_*nes 5

在此页面底部,您将找到一个表格,显示浏览器对各种“MediaTrackConstraints”属性的支持。

https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackSupportedConstraints

cursor遗憾的是,它没有得到广泛支持。

您可以使用它getSupportedConstraints()来了解运行代码的浏览器支持什么。

在您的开发工具控制台中尝试此操作,看看您的浏览器可以做什么,或者更可能不能做什么。

console.log(navigator.mediaDevices.getSupportedConstraints())
Run Code Online (Sandbox Code Playgroud)

  • 我感受到你的痛苦!这些位于 WebRTC 边缘的 API 目前很混乱。即使一切都如宣传的那样,约束对象的整个想法也会造成 API 的混乱。MDN 上的文档通常反映 W3C 的规范,从 W3C 的抽象规范语言翻译为 Javascript API 描述。因为它们代表了理想、目标,有时甚至是实现的现实。换句话说,MDN 上的内容可能很牛逼,也可能不正确。 (2认同)