这段代码可以将Canvas录制为webm视频文件

简介: 2020年6月我做了一个给程序员专用的虚拟鼓励师插件叫“Rainbow Fart Waifu”,VSCode和HBuilderX的插件市场里都可以搜到。

2020年6月我做了一个给程序员专用的虚拟鼓励师插件叫“Rainbow Fart Waifu”,VSCode和HBuilderX的插件市场里都可以搜到。


image.png


总之就是让没有妹子陪伴的程序员朋友们写代码时不孤单...


这个插件获得了HBuilderX插件开发大赛的二等奖,据很多用户朋友们说,这是个值得特等奖的插件!


上周对这个插件又进行了一个小更新,可以一键导出截图和导出一段五秒短视频。


image.png


其中导出五秒短视频正是看了 @十年踪迹 大佬的这一篇 【前端冷知识】如何将Canvas绘制过程转为视频 后才加入的。


这个API的使用非常简单,下面这段代码将录制到下载一气呵成


var canvas = document.getElementById("mycanvas");
var stream = canvas.captureStream();
var recorder = new MediaRecorder(stream, { mimeType: 'video/webm' });
console.log("开始录制");
const data = [];
recorder.ondataavailable = function (event) {
    if (event.data && event.data.size) {
        data.push(event.data);
    }
};
recorder.onstop = () => {
  //结束录制时下载视频
    const url = URL.createObjectURL(new Blob(data, { type: 'video/webm' }));
    var element = document.createElement('a');
    element.setAttribute('href', url);
    element.setAttribute('download', "");
    element.style.display = 'none';
    document.body.appendChild(element);
    element.click();
    document.body.removeChild(element);
};
//录制开始
recorder.start();
//5秒后录制结束
setTimeout(() => {
    recorder.stop();
    console.log("结束录制");
}, 5000);


录制完成后,浏览器会下载一个.webm格式的文件


image.png


你电脑里的视频播放器大概率无法直接播放这个格式的视频


但是不要慌,我们把它拖拽到浏览器里


image.png


在浏览器里的表现和播放一般视频无二


WebM格式介绍


WebM由Google提出,是一个开放、免费的媒体文件格式。WebM 影片格式其实是以 Matroska(即 MKV)容器格式为基础开发的新容器格式,里面包括了VP8影片轨和 Ogg Vorbis 音轨,其中Google将其拥有的VP8视频编码技术以类似BSD授权开源,Ogg Vorbis 本来就是开放格式。 WebM标准的网络视频更加偏向于开源并且是基于HTML5标准的,WebM 项目旨在为对每个人都开放的网络开发高质量、开放的视频格式,其重点是解决视频服务这一核心的网络用户体验。Google 说 WebM 的格式相当有效率,应该可以在 netbook、tablet、手持式装置等上面顺畅地使用。


所以,如果你录制的结果本就打算在浏览器中播放,那直接用webm格式就行了。如果非要生成其他格式,我们可以利用 ffmpeg的js版本 将其转换为mp4等...


不过我尝试了一下在使用这个WebAssembly版的ffmpeg,最终需要加载一个20mb以上的.wasm的模块,暂时还不是太适合在网站前端里用。如果是electron的话,可以直接用命令行ffmpeg,也没必要用这个js版。



相关文章
|
11月前
[笔记]音视频学习之SDL篇《五》裁剪图片成子图片(裁剪精灵表)
[笔记]音视频学习之SDL篇《五》裁剪图片成子图片(裁剪精灵表)
|
计算机视觉
【方便的Opencv】实现播放有声音的视频+附带图片生成gif
【方便的Opencv】实现播放有声音的视频+附带图片生成gif
【方便的Opencv】实现播放有声音的视频+附带图片生成gif
|
11月前
|
缓存 监控 前端开发
调用摄像机播放画面,并且实现录制GIF动图预览和下载
调用摄像机播放画面,并且实现录制GIF动图预览和下载
|
前端开发 Android开发 开发者
Android平台RTSP、RTMP播放端如何实现YUV或ARGB数据按设定角度旋转
做音视频RTSP或RTMP直播播放器的时候,不免会遇到这样的诉求,实时播放或快照的时候,由于前端摄像头安装角度不一定是正向,导致播放或快照的时候,视频view显示的画面是呈90° 180°甚至270°旋转的。
162 0
|
存储 移动开发 小程序
小程序:播放视频
小程序:播放视频
348 0
|
安全
【实用工具】如何录制电脑屏幕gif动图?
【实用工具】如何录制电脑屏幕gif动图?
269 0
【实用工具】如何录制电脑屏幕gif动图?
|
Python
Python 技术篇-用imageio库实现图片转gif动画,Gif录制屏幕操作实例演示
Python 技术篇-用imageio库实现图片转gif动画,Gif录制屏幕操作实例演示
963 0
Python 技术篇-用imageio库实现图片转gif动画,Gif录制屏幕操作实例演示
|
Web App开发 移动开发 JavaScript
用aliplayer如何实现视频的连续播放?
场景 假如有多个视频,在上一个视频播放完毕时,自动播放下一个视频,要怎么处理的呢?需要按使用的播放器类型和切换的地址格式,采用不同的实现方式。 直播地址方式 这种方式最简单,h5和flash的行为都是一致的,只需要订阅'ended', 在ended事件里,调用loadByUrl方法, 参数为下一个视频的地址。
6486 0