javascript - 用光标捕获 Canvas 流

标签 javascript html5-canvas mediastream web-mediarecorder mediastreamtrack

我使用 HTMLCanvasElement.captureStream() 获取 MediaStream 并将其传递给 MediaRecorder 以将其写入 .webm 文件。

根据mdn ,从 navigator.mediaDevices.getDisplayMedia() 检索的 MediaStream 可以指定一个选项来捕获光标。这是通过将字典 {cursor: 'always'} 传递给 .getDisplayMedia() 方法或 MediaStreamTrack.applyConstraints() 来完成的> 方法。

有没有办法从 HTMLCanvasElement 捕获 MediaStream 的光标? Here是 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() 方法从 Canvas 的位图缓冲区生成视频流。
操作系统光标永远不会在该位图缓冲区上呈现,它也不会出现在输出视频流中。 (顺便说一句,从 HTMLMediaElements 捕获的流也是如此)。

使用 getDisplayMedia() 时可以有一个光标,因为这里的视频流是由浏览器的渲染器或操作系统的渲染器生成的(并且光标通常绘制在那里)。

要从 HTMLCanvasElement 的流中绘制“a”光标,您需要自己绘制它,但它不会是您用户的操作系统之一。

关于javascript - 用光标捕获 Canvas 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68230560/

相关文章:

webrtc - 关闭WebRTC轨道不会关闭相机设备或选项卡相机指示器

javascript - d3 如何在发布请求中正确传递请求正文?

JavaScript:遍历 Canvas 的每个像素以改变颜色

javascript - 如何运行一个对象的多个实例

node.js - FFMPEG 仅执行一次 HTTP 范围请求 (HTML5 MediaStream/WebM)

javascript - 是否可以在客户端运行代理视频媒体请求的 javascript 代理?

javascript - 如何在 three.js 中切割现有几何体

javascript - 我正在尝试制作一个 Javascript 计算器作为 freecodecamp 任务的一部分,但无法让它与 ID 和数据运算符一起使用

javascript - 如何在 D3 可视化的文本元素中包含链接?

javascript - 如何使用 Flask 将 Canvas url 转换为图像 numpy 数组?