javascript - 使用光标捕获画布流
问题描述
我HTMLCanvasElement.captureStream()
用来获取 aMediaStream
并将其传递给 aMediaRecorder
以将其写入 .webm 文件。
根据mdn,从中MediaStream
检索的 snavigator.mediaDevices.getDisplayMedia()
可以指定一个选项来捕获光标。这是通过将字典传递{cursor: 'always'}
给.getDisplayMedia()
方法或MediaStreamTrack.applyConstraints()
方法来完成的。
有没有办法MediaStream
从 a 捕获 s的光标HTMLCanvasElement
?
这是 JSFiddle 上的简化复制示例;确保允许弹出。相关行重复如下:
let canvas = document.querySelector('canvas');
let stream = canvas.captureStream(20);
let recorder = new MediaRecorder(stream, {mimeType: 'video/webm'});
我也试过stream.getTracks()[0].applyConstraints({cursor: 'always'})
无济于事。
解决方案
不,没有办法。
HTMLCanvasElement 的captureStream()
方法从画布的位图缓冲区生成视频流。
操作系统光标永远不会在该位图缓冲区上呈现,它也不会在输出视频流中。(顺便说一下,从 HTMLMediaElements 捕获的流也是如此)。
使用时可以有一个光标,getDisplayMedia()
因为这里的视频流是由浏览器的渲染器或操作系统的渲染器制作的(并且光标通常在那里绘制)。
要从 HTMLCanvasElement 在流中绘制“a”光标,您需要自己绘制它,但它不会是您用户的操作系统。
推荐阅读
- python - 在另一个函数中导入一个函数
- javascript - Node、Express、React 和 DB 结构
- ios - WebdriverAgent:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- react-native - 去抖动搜索输入 onChangeText()
- amazon-web-services - Power BI - Redshift odbc 驱动程序
- eiffel - Eiffel:如何获取 Void 对象的类?可能吗?
- android - kotlin嵌套recyclerview添加数据
- chef-infra - 厨师执行失败,同样的命令手动成功
- c# - 在 Telerik ReportViewer 控件中从文件系统查看 PDF
- javascript - 如何在Javascript中将多个json数组合并为一个数组swift子数组?