canvas转video

    
	let canvasDom = document.getElementById('main').children[0].children[0] ;//获取到渲染echarts的canvas元素
    var video$ = document.querySelector('video');
    // var stream = canvasDom.captureStream(60);
    const recording = this.record(canvasDom, 10000)
    // 
    recording.then(url => video$.setAttribute('src', url) )

    // download it
        var link$ = document.createElement('a')
        link$.setAttribute('download','recordingVideo') 
        recording.then(url => {
        link$.setAttribute('href', url) 
        link$.click()
        })
      },
       record(canvas, time) {
    var recordedChunks = [];
    return new Promise(function (res, rej) {
        var stream = canvas.captureStream(25 /*fps*/);
        var mediaRecorder = new MediaRecorder(stream, {
            mimeType: "video/webm; codecs=vp9"
        });
        
        //ondataavailable will fire in interval of `time || 4000 ms`
        mediaRecorder.start(time || 4000);

        mediaRecorder.ondataavailable = function (event) {
            recordedChunks.push(event.data);
             // after stop `dataavilable` event run one more time
            if (mediaRecorder.state === 'recording') {
                mediaRecorder.stop();
            }

        }

        mediaRecorder.onstop = function (event) {
            var blob = new Blob(recordedChunks, {type: "video/webm" });
            var url = URL.createObjectURL(blob);
            res(url);
        }
    })

思路:
canvas的captureStream属性将其动点捕捉转换为视频帧, 声明一个recordedChunks 视频池, 将帧放入池 MediaRecorder用录制对象去监听并实现帧入流并根据录制的状态去回调接下来的操作
注意: 转载请标明出处,有问题可以直接私聊我

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值