使用光标捕获 canvas 流
Capture canvas stream with cursor
我使用 HTMLCanvasElement.captureStream()
获取 MediaStream
并将其传递给 MediaRecorder
以将其写入 .webm 文件。
根据 mdn,从 navigator.mediaDevices.getDisplayMedia()
检索到的 MediaStream
s 可以指定一个选项来捕获光标。这是通过将字典 {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 的位图缓冲区生成视频流。
OS 光标永远不会在该位图缓冲区上呈现,它也不会出现在输出视频流中。 (顺便说一句,从 HTMLMediaElements 捕获的流也是如此)。
使用 getDisplayMedia()
时可以有一个光标,因为这里的视频流是从浏览器的渲染器或 OS 渲染器生成的(光标通常绘制在那里)。
要从 HTMLCanvasElement 在流中绘制“a”光标,您需要自己绘制它,但它不会是您用户的 OS。
我使用 HTMLCanvasElement.captureStream()
获取 MediaStream
并将其传递给 MediaRecorder
以将其写入 .webm 文件。
根据 mdn,从 navigator.mediaDevices.getDisplayMedia()
检索到的 MediaStream
s 可以指定一个选项来捕获光标。这是通过将字典 {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 的位图缓冲区生成视频流。
OS 光标永远不会在该位图缓冲区上呈现,它也不会出现在输出视频流中。 (顺便说一句,从 HTMLMediaElements 捕获的流也是如此)。
使用 getDisplayMedia()
时可以有一个光标,因为这里的视频流是从浏览器的渲染器或 OS 渲染器生成的(光标通常绘制在那里)。
要从 HTMLCanvasElement 在流中绘制“a”光标,您需要自己绘制它,但它不会是您用户的 OS。