假如我们用Canvas实现了一些动画效果,需要将它回放出来,很多人通常就是用录屏工具将屏幕内容录下来播放,很少有人知道,Canvas可以直接通过今世浏览器支持的 Media Streams API 来转成视频。 Canvas对象支持captureStream方法,这个方法会返回一个MediaStream对象。然后,我们可以通过这个对象创建一个MediaRecorder来录屏。 我们看一个简朴的例子。 录制视频首先我们写一个非常简朴的Canvas动画效果,代码如下: [code] const canvas = document.querySelector('canvas'); const ctx = canvas.getContext('2d'); const {width, height} = canvas; ctx.fillStyle = 'red'; function draw(rotation = 0) { ctx.clearRect(0, 0, 1000, 1000); ctx.save(); ctx.translate(width / 2, height / 2); ctx.rotate(rotation); ctx.translate(-width / 2, -height / 2); ctx.beginPath(); ctx.rect(200, 200, 200, 200); ctx.fill(); ctx.restore(); } function update(t) { draw(t / 500); requestAnimationFrame(update); } update(0);[/code]这个效果实现一个200宽高的矩形在画布中央旋转。 接下来,我们将这个效果录制下来,假设我们录制6秒的视频,首先我们要获取MediaStream对象: [code] const stream = canvas.captureStream();[/code]然后,我们创建一个MediaRecorder: [code] const recorder = new MediaRecorder(stream, { mimeType: 'video/webm' });[/code]接着我们可以注册ondataavailable事件,将数据记载下来: [code] const data = []; recorder.ondataavailable = function (event) { if (event.data && event.data.size) { data.push(event.data); } };[/code]在onstop事件里,我们通过Blob对象,将数据写入到页面上的video标签中。 [code] recorder.onstop = () => { const url = URL.createObjectURL(new Blob(data, { type: 'video/webm' })); document.querySelector("#videoContainer").style.display = "block"; document.querySelector("video").src = url; };[/code]假如你不相识 Blob 对象,可以看这篇文章。 末了,我们开始录制视频,并设定在6秒钟之后制止录制: [code] recorder.start(); setTimeout(() => { recorder.stop(); }, 6000);[/code]这样,就可以到达我们想要的录屏效果了。 完备的代码在https://codepen.io/akira-cn/pen/LYNVewy。 与音频结合Canvas 录制好的视频,我们还可以将它和音频结合,方法是通过 ffmpeg 的 Web 端来合成。 到此这篇关于详解如何将 Canvas 绘制过程转为视频的文章就介绍到这了,更多相干Canvas 绘制过程转为视频内容请搜索脚本之家从前的文章或继承浏览下面的相干文章,希望各人以后多多支持脚本之家! 来源:https://www.jb51.net/html5/762117.html 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
|手机版|小黑屋|梦想之都-俊月星空
( 粤ICP备18056059号 )|网站地图
GMT+8, 2025-7-2 09:12 , Processed in 0.032223 second(s), 18 queries .
Powered by Mxzdjyxk! X3.5
© 2001-2025 Discuz! Team.