console
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>录屏工具</title>
<style>
* {
padding: 0;
margin: 0;
}
#player {
width: 500px;
height: 300px;
}
</style>
</head>
<body>
<button id="start">屏幕分享</button>
<button id="record">开始录制</button>
<button id="stop">结束录制</button>
<button id="download">下载视频</button>
<video autoplay playsinline id="player"></video>
<script>
let allStream;
document.querySelector('#start').onclick = function () {
if (navigator.mediaDevices && navigator.mediaDevices.getDisplayMedia) {
navigator.mediaDevices.getDisplayMedia({
video: true,
audio: false
}).then((stream) => {
allStream = stream;
document.querySelector('#player').srcObject = stream;
}).catch((err) => {
console.error(err);
})
} else {
alert('不支持这个特性');
}
}
let buf = [];
let mediaRecorder;
document.querySelector('#record').onclick = function () {
const options = {
mimeType: 'video/webm;codecs=vp8'
}
if (!MediaRecorder.isTypeSupported(options.mimeType)) {
console.error('不支持的视频格式');
return;
}
try {
mediaRecorder = new MediaRecorder(allStream, options);
mediaRecorder.ondataavailable = function (e) {
if (e && e.data && e.data.size > 0) {
buf.push(e.data);
}
};
mediaRecorder.start(10);
} catch (e) {
console.error(e);
}
}
document.querySelector('#download').onclick = function () {
mediaRecorder.stop();
if (buf.length) {
const blob = new Blob(buf, { type: 'video/webm' });
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.style.display = 'none';
a.download = 'aaa.webm';
a.click();
} else {
alert('还没有录制任何内容');
}
}
document.querySelector('#stop').onclick = function () {
if (mediaRecorder) {
mediaRecorder.stop();
}
}
</script>
</body>
</html>