09. 将canvas绘图动画录制为视频

背景

使用canvas绘制一个动画,不使用录屏软件,将动画录制为视频

方法

canvas对象所支持的captureStream方法,会返回一个stream对象,可以通过这个stream对象,来创建一个MediaRecorder进行录屏

代码实现

  1. 页面标签
	<div class="recorder">
        <canvas id="canvas" width="400" height="400"></canvas>
        <video controls class="vido-node" type="video/mp4"> </video>
    </div>
  1. canvas绘制动画
const draw = (rotation = 0) => {
    const canvas = document.querySelector('canvas') as HTMLCanvasElement
    const ctx = canvas?.getContext('2d') as CanvasRenderingContext2D
    const  { width, height } = canvas;
    (ctx as any).fillStyle = 'red'
    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()
}

const update = (t) => {
    draw(t / 500)
    requestAnimationFrame(update)
}
update(0)
  1. 实施录屏
class Recorder {

    recorderCanvas(canvas:HTMLCanvasElement) {
        const stream = canvas.captureStream() // 获取stream
        const recorder = new MediaRecorder(stream, { mimeType: 'video/webm' }) // 创建MediaRecorder对象
        
        const data: any[] = [] // 用来记录数据
        
        recorder.ondataavailable = function(event) {
            if(event.data && event.data.size) {
                data.push(event.data)
            }
        }
        recorder.onstop = function() {
            const url = URL.createObjectURL(new Blob(data, { type: 'video/webm'}));
            (document.querySelector('.vido-node') as any).src = url // 将bolbURL写到页面标签上
        }

        recorder.start()

        setTimeout(() => { // 录制10秒
            recorder.stop()
        }, 10000);
    }
}
  1. 结果展示
    在这里插入图片描述
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值