20行JavaScript 中的简单屏幕录像机
公众号:程序员白特,*********
如何用20行JavaScript代码编写一个简单屏幕录像机呢?我是白特,让我们一起来学习下吧。
文章前言
假设您厌倦了屏幕录像机的付费墙和限制状态,并希望继续自己编写代码 - 事实证明,您已经可以在几行代码中拥有基本功能。
分步实践
首先,我们可以要求浏览器使用屏幕捕获 API为我们获取捕获的视频流,但出于安全原因,我们必须确保用户手势触发捕获,例如单击按钮:
const button = document.createElement("button"); button.innerHTML = "capture"; document.body.append(button); button.addEventListener("click", async () => { // TODO });
单击后,获取视频流并录制
const stream = await navigator.mediaDevices.getDisplayMedia(); const recoder = new MediaRecorder(stream); recoder.start();
当用户停止共享屏幕时停止录制
const [video] = stream.getVideoTracks(); video.addEventListener("ended", () => { recoder.stop(); });
获取录制的文件并下载
recoder.addEventListener("dataavailable", (evt) => { const a = document.createElement("a"); a.href = URL.createObjectURL(evt.data); a.download = "capture.webm"; a.click(); });
全部代码
const button = document.createElement("button"); button.innerHTML = "capture"; document.body.append(button); button.addEventListener("click", async () => { const stream = await navigator.mediaDevices.getDisplayMedia(); const recoder = new MediaRecorder(stream); recoder.start(); const [video] = stream.getVideoTracks(); video.addEventListener("ended", () => { recoder.stop(); }); recoder.addEventListener("dataavailable", (evt) => { const a = document.createElement("a"); a.href = URL.createObjectURL(evt.data); a.download = "capture.webm"; a.click(); }); });
瞧,你有一个简单的屏幕录像机!
它有许多限制,解决起来会很有趣——录音、网络摄像头集成、长时间运行的流等——但我只是发现,用这么少的代码行就已经做了这么强大的事情,这太棒了,不能不分享。
#前端#