让我们用 JS 创建一个屏幕录像机
OBS Studio 很酷,但让我们用 JavaScript 创建我们自己的屏幕录像机吧。
猜猜怎么着?它不仅限于录制浏览器屏幕。是的,你没看错。虽然 JavaScript 是在浏览器上运行的,但我们可以使用 JS 录制活动标签页,甚至录制任何标签页或整个屏幕。那就让我们开始吧。
首先我们需要一个HTML文件,其中包含一个录制按钮和一个视频元素,用于播放录制的视频。
<!DOCTYPE html>
<html>
<head>
<title>Parcel Sandbox</title>
<meta charset="UTF-8" />
</head>
<body>
<video class="video" width="600px" controls></video>
<button class="record-btn">record</button>
<script src="./index.js"></script>
</body>
</html>
我们还需要一个 JS 文件,所以让我们也创建index.js
let btn = document.querySelector(".record-btn");
btn.addEventListener("click", function () {
console.log("hello");
});
所以现在如果我们打开浏览器并单击按钮,我们应该hello
在控制台中看到。
好的,现在让console.log
我们获取用户流显示
let btn = document.querySelector(".record-btn");
btn.addEventListener("click", async function () {
let stream = await navigator.mediaDevices.getDisplayMedia({
video: true
});
});
现在你可能以为我们已经完成了,选择一个窗口或屏幕,点击“共享”,它应该就会开始录制了。但实际操作起来要复杂一些。我们必须自己录制视频。我们将使用MediaRecorder来录制视频。
let btn = document.querySelector(".record-btn")
btn.addEventListener("click", async function () {
let stream = await navigator.mediaDevices.getDisplayMedia({
video: true
})
//needed for better browser support
const mime = MediaRecorder.isTypeSupported("video/webm; codecs=vp9")
? "video/webm; codecs=vp9"
: "video/webm"
let mediaRecorder = new MediaRecorder(stream, {
mimeType: mime
})
//we have to start the recorder manually
mediaRecorder.start()
})
因此,当我们的屏幕被记录下来时,mediaRecorder
我们会以块的形式提供数据,我们需要将这些数据存储在一个变量中。
let btn = document.querySelector(".record-btn")
btn.addEventListener("click", async function () {
let stream = await navigator.mediaDevices.getDisplayMedia({
video: true
})
//needed for better browser support
const mime = MediaRecorder.isTypeSupported("video/webm; codecs=vp9")
? "video/webm; codecs=vp9"
: "video/webm"
let mediaRecorder = new MediaRecorder(stream, {
mimeType: mime
})
let chunks = []
mediaRecorder.addEventListener('dataavailable', function(e) {
chunks.push(e.data)
})
//we have to start the recorder manually
mediaRecorder.start()
})
现在,当我们点击停止共享按钮时,我们希望录制的视频在我们的视频元素中播放,所以让我们这样做。
let btn = document.querySelector(".record-btn")
btn.addEventListener("click", async function () {
let stream = await navigator.mediaDevices.getDisplayMedia({
video: true
})
//needed for better browser support
const mime = MediaRecorder.isTypeSupported("video/webm; codecs=vp9")
? "video/webm; codecs=vp9"
: "video/webm"
let mediaRecorder = new MediaRecorder(stream, {
mimeType: mime
})
let chunks = []
mediaRecorder.addEventListener('dataavailable', function(e) {
chunks.push(e.data)
})
mediaRecorder.addEventListener('stop', function(){
let blob = new Blob(chunks, {
type: chunks[0].type
})
let video = document.querySelector(".video")
video.src = URL.createObjectURL(blob)
})
//we have to start the recorder manually
mediaRecorder.start()
})
现在,作为最后的润色,让我们自动下载录制的视频。
let btn = document.querySelector(".record-btn")
btn.addEventListener("click", async function () {
let stream = await navigator.mediaDevices.getDisplayMedia({
video: true
})
//needed for better browser support
const mime = MediaRecorder.isTypeSupported("video/webm; codecs=vp9")
? "video/webm; codecs=vp9"
: "video/webm"
let mediaRecorder = new MediaRecorder(stream, {
mimeType: mime
})
let chunks = []
mediaRecorder.addEventListener('dataavailable', function(e) {
chunks.push(e.data)
})
mediaRecorder.addEventListener('stop', function(){
let blob = new Blob(chunks, {
type: chunks[0].type
})
let url = URL.createObjectURL(blob)
let video = document.querySelector("video")
video.src = url
let a = document.createElement('a')
a.href = url
a.download = 'video.webm'
a.click()
})
//we have to start the recorder manually
mediaRecorder.start()
})
现在我们有了一个功能齐全的屏幕录像机应用程序。
请务必阅读我的其他文章。
文章来源:https://dev.to/0shuvo0/lets-create-a-screen-recorder-with-js-3leb