这段代码可以将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版。



相关文章
|
缓存 前端开发
前端代码整洁与规范之CSS篇
【4月更文挑战第2天】 前端代码整洁与规范之CSS篇
551 4
|
6月前
|
人工智能 自然语言处理 算法
2026中国AI数字人全栈技术类企业信息
AI数字人全栈技术涵盖感知、认知、生成、渲染与交互五大层级,融合ASR、NLP、TTS、3D渲染等核心技术,推动数字人从“形象载体”进化为具备理解与决策能力的智能体。像衍科技、阿里、百度、世优等企业通过全栈自研或生态布局,实现虚拟客服、直播、政务等场景落地。未来,随着多模态大模型与轻量化技术发展,AI数字人将迈向情感化、自主化、合规化,成为虚实融合的核心生产力,真正实现“有皮囊,更有灵魂”。
|
前端开发 JavaScript 网络架构
react对antd中Select组件二次封装
本文介绍了如何在React中对Ant Design(antd)的Select组件进行二次封装,包括创建MSelect组件、定义默认属性、渲染Select组件,并展示了如何使用Less进行样式定义和如何在项目中使用封装后的Select组件。
780 2
react对antd中Select组件二次封装
|
10月前
|
JavaScript Java 关系型数据库
基于springboot的计算机在线考试管理系统
本系统基于Spring Boot、Java、Vue与MySQL,构建高效安全的在线考试管理平台,推动教育信息化发展。
|
设计模式 前端开发 JavaScript
神奇canvas 带你实现魔法摄像头
神奇canvas 带你实现魔法摄像头
347 5
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
1515 8
|
前端开发 JavaScript UED
React 通知组件 Notification
本文从基础入手,逐步介绍如何创建一个简单的 React 通知组件,包括基本结构、样式设计、使用方法以及常见问题和易错点。通过示例代码,展示了如何显示不同类型的提示信息(成功、警告、错误),并添加关闭按钮、动画效果和自动关闭功能。适合初学者学习和参考。
468 1
|
存储 算法 C语言
数据结构基础详解(C语言): 二叉树的遍历_线索二叉树_树的存储结构_树与森林详解
本文从二叉树遍历入手,详细介绍了先序、中序和后序遍历方法,并探讨了如何构建二叉树及线索二叉树的概念。接着,文章讲解了树和森林的存储结构,特别是如何将树与森林转换为二叉树形式,以便利用二叉树的遍历方法。最后,讨论了树和森林的遍历算法,包括先根、后根和层次遍历。通过这些内容,读者可以全面了解二叉树及其相关概念。
591 6
|
开发者
解决 display: inline-block 产生的空白间隙问题
【10月更文挑战第27天】在实际应用中,可以根据具体的布局需求、代码结构和兼容性要求等因素,选择合适的方法来消除空白间隙,以实现更精确、更美观的页面布局效果。